corner imagecorner image
FeaturesPluginsDocs & SupportCommunityPartners

Tomcat での RESTful Web サービスについて

REST (REpresentational State Transfer) は、World Wide Web などの分散ハイパーメディアシステム用アーキテクチャースタイルです。RESTful アーキテクチャーで中心となるのは、URI (Universal Resource Identifier) によって識別されるリソースという概念です。これらのリソースは HTTP などの標準インタフェースを使用して操作できます。また情報は、これらのリソースの表現を使用して交換されます。

GlassFish での RESTful Web サービスについて」では、まず REST について初歩的な説明をしたあと、NetBeans IDE 6.0 による RESTful アーキテクチャースタイルのサポート方法について解説しました。簡潔にするために、そのチュートリアルは GlassFish アプリケーションサーバーに限定してあります。Tomcat サーバーで RESTful Web サービスを実行するには、いくつか追加で設定作業を行う必要があります。このチュートリアルでは「GlassFish での RESTful Web サービスについて」と同じソースを使用して、Tomcat アプリケーションサーバーに配備する方法を説明します。

目次

このページの内容は NetBeans IDE 6.0 が対象です

このチュートリアルに従うには、次のソフトウェアとリソースが必要です。

ソフトウェアまたはリソース 必須バージョン
NetBeans IDE Web および Java EE の version 6.0
Java Development Kit (JDK) version 6 または
version 5
Tomcat Web サーバー version 6.0

Tomcat は、NetBeans IDE の Web および Java EE の配布とともにオプションでインストールできます。または、Apache Tomcat のダウンロードページにアクセスすることも可能です。

このチュートリアルでは RESTful Web サービスのプラグインも必要です。IDE で「ツール」メニューの下にある「プラグイン」マネージャーを開き、「インストール済み」タブで「RESTful Web サービス」プラグインがインストールされているかを確認します。インストールされていない場合、「使用可能なプラグイン」タブから次のようにインストールします。

プラグインマネージャーからの RESTful

はじめに

RESTful Web サービスは、RESTful アーキテクチャースタイルを使用して構築されたサービスです。RESTful アプローチを使用する Web サービスの構築は、インターネット上にサービスを配備するために、SOAP ベースのテクノロジを使用する代わりとして幅広く使用されています。これは、軽量かつ HTTP 経由でデータを直接送信できるためです。

IDE は、JAX-RS (JSR 311 - Java API for RESTful Web Services) および Jersey (JAX-RS のリファレンス実装) を使用する、RESTful Web サービスの迅速な開発をサポートしています。

詳細については、次を参照してください。

RESTful Web サービスの構築に加え、IDE は RESTful Web サービスにアクセスするクライアントアプリケーションの構築、テスト、および Web サービスを呼び出すコードの生成 (RESTful と SOAP ベースの両方) もサポートしています。

IDE が提供する RESTful 機能の一覧は次のとおりです。

  1. JPA エンティティークラスおよびパターンからの RESTful Web サービスの迅速な作成。
  2. RESTful コンポーネントパレットからコンポーネントをドラッグ&ドロップすることによる、Google マップ、Yahoo News Search、StrikeIron Web サービスなどの Web サービスを呼び出すコードの迅速な生成。
  3. RESTful クライアントアプリケーションの構築用 RESTful Web サービスからの JavaScript クライアントのスタブの生成。
  4. RESTful Web サービスのテスト用テストクライアントの生成。
  5. プロジェクト内の RESTful Web サービスの実装クラスを簡単にナビゲートする論理ビュー。

このチュートリアルを使用する前に、「GlassFish での RESTful Web サービスについて」を使用することをお勧めします。こちらでは RESTful Web サービスの生成、実装、およびテストに関する IDE のサポート方法を説明しています。このチュートリアルでは、同じサービスではあるものの、Tomcat 6.0 以上のアプリケーションサーバーで実行する場合に追加で必要となる設定手順をデモしています。

Tomcat へのライブラリのコピー

Tomcat で RESTful Web サービスをサポートするには、Toplink、Derby、および Javax API のセットが必要です。これらのライブラリはこのチュートリアルで有用なだけではなく、将来 Tomcat で RESTful サービスを実行できるようになります。

次の表で、NB_HOME は Netbeans のインストールディレクトリ、TOMCAT_HOME は Apache Tomcat 6.x のインストールディレクトリ、および GLASSFISH_HOME は Glassfish v2 のインストールディレクトリを表します。

これらのライブラリをコピーしたあと、コンピュータを再起動します。

ソースディレクトリライブラリファイルターゲットディレクトリ
NB_HOME/java_n/modules/ext/toplink
toplink-essentials.jar
                    toplink-essentials-agent.jar
TOMCAT_HOME/lib
NB_HOME/java_n/modules/ext/jaxws/api すべての JAR ファイル TOMCAT_HOME/endorsed

このディレクトリが存在しない場合は作成してください。

GLASSFISH_HOME/javadb/lib
derbynet.jar
                    derbyclient.jar
TOMCAT_HOME/lib

データベースからのエンティティークラスの生成

この課題の目標は、プロジェクトを作成し、データベースからエンティティークラスを生成することです。

データベースからエンティティークラスを作成するには、次の手順に従います。

  1. 「ファイル」>「新規プロジェクト」を選択します。「カテゴリ」で「Web」を選択します。「プロジェクト」で「Web アプリケーション」を選択して、「次へ」をクリックします。
  2. 「プロジェクト名」に「CustomerDB-Tomcat」と入力します。
  3. 「サーバー」で Apache Tomcat 6.0.x を選択します。「完了」をクリックします。
  4. CustomerDB-Tomcat」ノードを右クリックし、「新規」>「データベースからのエンティティークラス」を選択します。「新規 データベースからのエンティティークラス」ウィザードが「データベース表」で開きます。
  5. 「データベース表」パネルで、「データソース」ドロップダウンリストから「新しいデータソース」を選択します。「データソースを作成」ダイアログが開きます。
  6. 「JNDI 名」フィールドに「jdbc/sample」と入力します。次のように、「データベース接続」ドロップダウンフィールドから「jdbc:derby://ホスト名:1527/sample [APP の app]」を選択します。「了解」をクリックします。ダイアログが閉じ、「データベース表」パネルに戻ります。
    「データソースを作成」ダイアログ
  7. 「使用可能な表」で「CUSTOMER」を選択し、「追加」をクリックします。CUSTOMER 表と関連のある DISCOUNT_CODE 表が自動的に「選択した表」に追加されます。画面は次のようになります。
    選択した表の一覧
  8. 「次へ」をクリックします。「エンティティークラス」パネルが開きます。
  9. 「パッケージ」で「customer.db.tomcat」と入力します。
  10. 「持続性ユニットを作成」をクリックします。「持続性ユニットを作成」ダイアログが開きます。デフォルトをすべて受け入れ、「作成」をクリックします。「エンティティークラス」パネルに戻ります。「完了」をクリックします。
  11. 「プロジェクト」ウィンドウを表示します。画面は次のようになります。
    customer.db.tomcat パッケージを表示している「プロジェクト」ビュー

プロジェクトへの Toplink ライブラリの追加

Toplink ファイルを Tomcat に追加しましたが (「Tomcat へのライブラリのコピー」参照)、クラスキャスト例外を回避するために TopLink Essentials ライブラリをプロジェクトに追加する必要があります。前出の REST ライブラリに加えて、このライブラリを追加する必要があります。

  1. プロジェクトノードを右クリックし、コンテキストメニューから「プロパティー」を選択します。「プロジェクトプロパティー」ダイアログが開きます。
  2. 「カテゴリ」ビューから「ライブラリ」を選択します。プロジェクトのコンパイル時ライブラリを示すタブが表示されます。「プロジェクトプロパティー」ダイアログの「コンパイル時ライブラリ」タブ
  3. 「ライブラリを追加」をクリックします。「ライブラリを追加」ダイアログが開き、使用可能なライブラリの一覧が表示されます。
  4. 「Top Link Essentials」ライブラリの場所までライブラリ一覧をスクロールします。このライブラリを選択し、「ライブラリを追加」をクリックします。
    「ライブラリを追加」ダイアログの「Top Link Essentials」ライブラリ
  5. ここで「プロジェクトプロパティー」ダイアログに戻っているはずです。「コンパイル時ライブラリ」に「TopLink Essentials」が表示されているはずです。「パッケージ」のチェックボックスが選択されていることを確認してください。「TopLink Libraries」を選択し、「上へ移動」をクリックしてライブラリ一覧の先頭に移動します。コンパイル時ライブラリの一覧は次のようになります。
    「TopLink Essentials」がコンパイル時ライブラリの先頭に追加された状態の「プロジェクトプロパティー」
  6. 「了解」をクリックします。IDE により、TopLink Essentials がプロジェクトライブラリの先頭に追加されます。TopLink Essentials ライブラリが存在することを確認するには、プロジェクトの「ライブラリ」ノードを展開します。ライブラリの一覧は次のようになります。
    プロジェクト内のライブラリ一覧
  7. 変更を有効にするには、IDE を再起動します。IDE の再起動後、Derby データベースサーバーを再起動します (「ツール」>「Java DB データベース」>「サーバーを起動」)。

持続性ファイルの設定

データベースからのエンティティークラスの生成」で、持続性ユニットを作成しました。この持続性ユニットの設定は persistence.xml というファイルに保存されています。「プロジェクト」ビューで、プロジェクトの「構成ファイル」ノードに persistence.xml があります。

異なるトランザクションのタイプを使用し、データソースの識別を行わず、必要なプロパティーを持続性プロバイダに渡すには、この持続性ファイルを変更する必要があります。IDE で persistence.xml を開きます。「XML」タブを開きます。ファイルを編集して、次のスニペットのようにします (追加または変更する部分はボールド)。

<persistence-unit name="CustomerDB-TomcatPU" transaction-type="RESOURCE_LOCAL">
    <provider>oracle.toplink.essentials.PersistenceProvider</provider>

    <!-- <jta-data-source>jdbc/sample</jta-data-source> --> 

    <properties>
      <property name="toplink.jdbc.user" value="app"/>
      <property name="toplink.jdbc.password" value="app"/>
      <property name="toplink.jdbc.url" value="jdbc:derby://localhost:1527/sample"/>
      <property name="toplink.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver"/>
    </properties>
        </persistence-unit>

エンティティークラスからの RESTful Web サービスの生成

この課題の目標は、先ほど作成したエンティティークラス (「データベースからのエンティティークラスの生成」参照) から RESTful Web サービスを生成することです。

  1. エンティティークラスを格納しているパッケージを右クリックし、「新規」>「エンティティークラスからの RESTful Web サービス」を選択します。「新規 エンティティークラスからの RESTful Web サービス」ウィザードが開きます。
  2. 「利用可能なエンティティークラス」フィールドに、「Customer」および「DiscountCode」という 2 つのクラスが表示されているはずです。「すべてを追加」をクリックすると、「選択されているエンティティークラス」に移動します。
  3. 「次へ」をクリックすると、「生成されるクラス」パネルが開きます。
    生成されるクラス

    IDE で生成される項目がすべて表示されます。IDE はコンテナと項目というパターンでリソースクラスを生成します。たとえば Customer エンティティークラスの場合、IDE は CustomersResource というコンテナリソースと、CustomerResource という項目リソースを生成します。また、CustomersConverter および CustomerConverter など対応のエンティティーインスタンスからリソース表現を生成する目的で、IDE は各リソースクラスについてコンバータクラスを生成します。さらに、関連を表現するために、CustomerRefConverter などの、参照コンバータと呼ばれる追加のコンバータクラスがあります。

    デフォルトを受け入れ、「完了」をクリックします。

  4. 「プロジェクト」ウィンドウを表示します。画面は次のようになります。
    Web サービスを表すプロジェクト
  5. 「プロジェクト」ウィンドウの「RESTful Web サービス」ノードに、プロジェクトのすべての RESTful Web サービスが表示されます。[/customers/] など、角カッコ内の値は URI テンプレートの値です。このノードをダブルクリックしてもソースファイルに移動できます。このビューではすべての HTTP メソッドとサブリソースロケータメソッドも表示されます。この場合でも、ノードをダブルクリックすることでメソッドに移動できます。

ここまででエンティティークラスと RESTful Web サービスが生成されたので、アプリケーションのテストを始めましょう。IDE には RESTful Web サービスのテストに便利なユーティリティーが備わっています。次の節でこれを利用します。

RESTful Web サービスのテスト

この課題の目標は、アプリケーションを試してみることです。

  1. プロジェクトのノードを右クリックし、「RESTful Web サービスをテスト」を選択します。

    サーバーが起動し、アプリケーションが配備されます。最後に、各 Web サービスのリンクが含まれるアプリケーションがブラウザ上に表示されます。
    最初のテスト

  2. 左側にあるのはルートリソースのセットで、customers および discountCodes という名前が付いています。

  3. まず customers ルートリソースを選択します。メソッドのドロップダウンリストをクリックし、「GET(application/xml)」または「GET(application/json)」を選択します。「Test」をクリックします。結果が「テスト出力」セクションに表示されます。

    customers 出力一覧のテスト
  4. 「テスト出力」セクションには 4 つのタブがあります。「表形式ビュー」は出力結果のドキュメントにあるすべての URI を表示するフラットなビューで、リンクをクリックすることで移動できます。「raw データのビュー」は実際に戻ってきたデータを表示します。選択した MIME タイプ (application/xml または application/json) により、表示されるデータはそれぞれ XML または JSON 形式です。「Headers」タブは HTTP ヘッダー情報を表示します。「HTTP モニター」というタブもあり、実際に送受信された HTTP 要求および応答を表示します。

  5. ブラウザを閉じ、IDE に戻ります。

Google マップ機能の追加

この課題の目標は、Google マップの機能を RESTful Web サービスに追加することです。

  1. 次のように、エディタで CustomerResource クラスを開きます。「ツール」メニューから「パレット」を選択します。パレットがエディタの右側に現れ、次のようなコードスニペットが表示されます。
    エディタの CutomerResource クラス
  2. http://www.google.com/apis/maps/signup.html で Google マップのキーにサインアップします。Google マップのキー要求ダイアログには、ユーザーの Web サイトの URL を入力するフィールドがあります。このフィールドに「http://localhost:8080」と入力します。
  3. 「Google」カテゴリから「マップ」の項目をドラッグし、クラスの任意の場所にドロップします。「GoogleMap のカスタマイズ」ダイアログが開きます。次のように Google マップのキーを「apiKey」フィールドに入力します。
    Google マップのカスタマイズダイアログ

    「了解」をクリックします。IDE は「GoogleMapResource」クラスを作成します。CustomerResource クラスはこれのメソッドを使用してアクセスします。次も IDE が作成します。

        /**
    * Returns GoogleMapResource sub-resource.
    */
    @Path("googleMap/")
    public GoogleMapResource getGoogleMap() {
    try {
    customer.db.tomcat.Customer entity = getEntity();
    String apiKey = null;
    String address = entity.getAddressline1();
    Integer zoom = null;
    return new GoogleMapResource(apiKey, address, zoom);
    } finally {
    PersistenceService.getInstance().close();
    }
    }
  4. プロジェクトノードを右クリックし、再度「RESTful Web サービスをテスト」を選択しすると、ふたたびブラウザが起動するので「googleMap」をクリックします。apiKey が入力された状態で、次のような画面が表示されるはずです。
    Google マップのノードを表示している RESTful サービスのテスト
  5. 「Test」ボタンをクリックします。Google マップが「raw データのビュー」タブで開きます。

    重要: Firefox 2 では、テストクライアントは画像を生成しようとして常にハングアップしている状態になります。「Resource:」の下にある http:.../googleMap/ の URL をクリックすると、マップの画像がブラウザの新しいタブに表示されます。


    住所を表示している Google マップ


関連項目

NetBeans IDE 6.0 を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。

メーリングリストに登録することによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。

Bookmark this page

del.icio.us furl simpy slashdot technorati digg
Companion
Projects:
MySQL Database Server   GlassFish Community: an Open Source Application Server   Open Solaris  Open JDK: an Open SourceJDK   Mobile & Embedded Community     Sponsored by 
Sponsored by Sun Microsystems