NetBeans 7でのRESTful Webサービスを使用したCRUD操作の実装: パート2

目的

このチュートリアルでは、NetBeans 7でRESTful Webサービスを使用してCRUDデータベース操作を実装する方法について説明します。

所要時間

約30分

 

概要

 

RESTful WebサービスはHTTPプロトコル・メソッドを使用します。 GET、POST、DELETEなどのHTTPメソッドを作成、読取り、更新、削除(CRUD)アクションにマッピングし、実行できます。Java仕様JAX-RS(JSR 311)では、Javaを使用してRESTful Webサービスを作成するためのAPIが提供されています。 Jerseyは、JAX-RSの公式なリファレンス実装であり、 Jersey Client APIなどの独自APIを通じて追加機能を提供します。

このチュートリアルはパート2です。パート1のNetBeans 7でのRESTful Webサービスの作成:パート1では、NetBeans 7でのRESTful Webサービスの作成とテストを取り上げました。

このチュートリアルで実施する内容は、次のとおりです。

前提条件

 

クライアント・アプリケーションの構築によるRESTful Webサービスの消費

ここでは、PlayerClientというJavaクライアント・アプリケーションを作成し、PlayerServerアプリケーションで作成されたRESTful Webサービスを消費する方法を紹介します。

 

.

RESTful Webサービスの作成に使用するPlayerServerアプリケーションが実行中であることを確認します。 実行中でない場合はサーバーを起動し、次の手順を実行します。

a. 「Projects」タブを開きます。

b. 「PlayerServer」プロジェクトを右クリックします。

c. 「Run」を選択します。

これによってGlassFishサーバーが起動され、アプリケーションがデプロイされます。

アプリケーションのデプロイが成功すると、ブラウザにデフォルトのjspページ(URL:http://localhost:8080/PlayerServer/)が開き、"Hello World"と表示されます。

 

.

新しいJavaプロジェクトを作成するには、「File」→「New Project」の順に選択します。


.

Categories列から「Java」を選択し、Projects列から「Java Application」を選択して、「Next」をクリックします。


.

以下の手順を実行します。

a. プロジェクトの名前としてPlayerClientを指定します。

b. 「Create Main Class」の選択を解除します。

c. 「Finish」をクリックします。

データベースを使用したエンティティ・クラスの生成

データベースのCRUD操作を実装するには、データベースと通信するエンティティ・クラスを作成する必要があります。 ここでは、データベースを使用したエンティティ・クラスの作成方法について説明します。

.

PlayerClient 」プロジェクトを右クリックして、「New」→「Entity Classes From Database」を選択します。

 

.

a. Database TablesウィンドウのDatabase Connectionフィールドで、ドロップダウン・リストから「jdbc:derby://localhost:1527/playerDB[john on JOHN]」を選択します。

Available TablesカテゴリにPLAYERとTEAMが表示されます。
b. 「Add All」をクリックします。

Selected TablesカテゴリにPLAYERとTEAMが表示されます。
c. 「Next」をクリックします。

 

.

Entity Classesウィンドウで、パッケージ名としてplayerentitiesを入力し、「Next」をクリックします。

.

Mappings Optionウィンドウで、デフォルト選択のままにして「Finish」をクリックします。

.

エンティティ・クラスが作成されたことを確認します。

a. 「PlayerClient」プロジェクトを選択します。
b. 「Source package」→「playerentities」を展開します。Team.javaPlayer.javaが作成されています。

RESTfulクライアントを使用した作成操作

ここでは、RESTful Webサービスを使用した作成操作の実装を紹介します。 RESTful Webサービスを使用して、PLAYER表に行を作成します。

 

.

PlayerClientプロジェクトにRESTfulクライアントを作成するには、次の手順を実行します。

a. 「PlayerClient」を右クリックし、「New」→「Other」→「Web Services」→「RESTful Java Client」の順に選択します。

b. 「Next」をクリックします。

a. New Restful Java Clientウィンドウのフィールドに次の詳細情報を入力します。

  • Class Name: CreatePlayerJerseyClient
  • Package: playerClient
  • Select the REST resource:From Project」を選択して「Browse」をクリックします。

b. 「PlayerServer」を選択します。
c. 「PlayerServer」アプリケーションを展開します。
d. 「PlayerFacadeREST[com.playerentity.player]」を選択します。


g. 「OK」をクリックします。

h. 「Finish」をクリックします。

コード・エディタにCreatePlayerJerseyClient.javaが表示されます。

.

CreatePlayerJerseyClient.javaを確認します。

a. URIとRESTfulサービスのパスを使用してWebResourceが初期化されているコードの断片を探します。

b. Webサービスのすべてのメソッド(gets、puts、deletes、posts)が含まれることを確認します。
それぞれのWebメソッドにapplication/XMLおよびapplication/JSON形式が含まれます。作成操作のcreate_XML (Object requestEntity)およびcreate_JSON(Object requestEntity)は、2つの例です。

.

RESTful Webサービスを使用してPLAYER表に行を作成するには、CreatePlayerJerseyClient.javaに対して次の変更を実施します。

a. 次のパッケージをインポートします。

import java.util.ArrayList;
import java.util.List;
import playerentities.Player;

b. mainメソッドを追加します。

public static void main(String args[])throws UniformInterfaceException
{

CreatePlayerJerseyClient client1=new CreatePlayerJerseyClient();
ClientResponse response=client1.findAll_XML(ClientResponse.class);

GenericType<List<Player>> genericType = new GenericType<List<Player>>() {};
// WebサービスからPlayerの配列リストを返します
List<Player> data= new ArrayList<Player>();
data=(response.getEntity(genericType));

Player p=new Player();
p.setFirstname("Michael");
p.setId(30);
p.setJerseynumber(60);
p.setLastname("Phelps");
p.setLastspokenwords("Thanks to my fans");
client1.create_XML(p);
}

 

.

Projectsウィンドウで「CreatePlayerJerseyClient.java」を右クリックし、「Run File」を選択します。


.

次の2つのうちいずれかの方法で出力を確認します。 PLAYER表の中身を確認するか、Webサービス・テスト・クライアントを生成します。

a. PLAYER表の中身を確認するには、次の手順を実行します。

1. Servicesウィンドウで、Databasesノードの下の「jdbc:derby://localhost:1527/playerDB」接続を展開します。
2. 「connection」を右クリックし、「Refresh」を選択します。
3. 「JOHN」スキーマ→「Tables」ノード→「PLAYER」表の順に展開します。
4. 「PLAYER」表ノードを右クリックし、「View Data」を選択します。

5. PLAYER表のデータを確認して、Playerオブジェクト"p"に対して指定した情報を持つ新しい行が作成されていることを確認します。


b. パート1で説明されているとおりに、Webサービスのテスト・クライアントを生成します。 Webサービス・クライアントのテスト用のテスト・クライアントがデプロイされたら、次の手順を実行します。

1. リソース・ノードの「com.playerentity.player」を選択します。
2. "Choose method to test"フィールドで「GET (application/xml)」を選択します。
Test」をクリックします。
4. application/xmlリクエストに対するレスポンスの出力を調べます。XMLファイルに新しく作成されたPlayerオブジェクトが確認できます。

RESTfulクライアントを使用した取得操作

 

ここでは、RESTful Webサービスを使用してデータベースの取得操作を実装する方法について説明します。 RESTful Webサービスを使用してPLAYER表からすべての行を取得し、コンソールに表示します。

 

.

PlayerClientプロジェクトにRESTfulクライアントを作成するには、次の手順を実行します。

a. 「PlayerClient」を右クリックし、「New」→「Other」→「Web Services」→「RESTful Java Client」の順に選択します。

b. 「Next」をクリックします。

.

New Restful Java Clientウィンドウのフィールドに次の詳細情報を入力します。
a. Class Name: GetPlayerJerseyClient
b. Package: playerClient
c. Select the REST resource:From Project」を選択して「Browse」をクリックします。

d. 「PlayerServer」を選択します。
e. 「PlayerServer」アプリケーションを展開します。
f. 「PlayerFacadeREST[com.playerentity.player]」を選択します。
g. 「OK」をクリックします。

h. 「Finish」をクリックします。

コード・エディタにGetPlayerJerseyClient.javaが表示されます。

.

RESTful Webサービスを使用してPLAYER表の中身を取得するには、GetPlayerJerseyClient.javaに対して次の変更を実施します。

a. 次のパッケージをインポートします。

import java.util.ArrayList;
import java.util.List;
import playerentities.Player;

b. mainメソッドを追加します。

public static void main(String args[])throws UniformInterfaceException
{

GetPlayerJerseyClient client1=new GetPlayerJerseyClient();
ClientResponse response=client1.findAll_XML(ClientResponse.class);


GenericType<List<Player>> genericType = new GenericType<List<Player>>() {};
// WebサービスからPlayerの配列リストを返します
List<Player> data= new ArrayList<Player>();
data=(response.getEntity(genericType));
System.out.println("Retreiving and Displaying Players Details");
for( Player players:data ){
System.out.println("FirstName: "+players.getFirstname());
System.out.println("PlayerID: "+players.getId());
System.out.println(" Jerseyno: "+players.getJerseynumber());
System.out.println("LastName: "+players.getLastname());
System.out.println("Last Spoken Words:"+players.getLastspokenwords());
}

}


PLAYER表からレコードを取得するために使用されるfindAll_XML()メソッドを確認します。

 

.

Projectsウィンドウで「GetPlayerJerseyClient.java」を右クリックして「Run File」を選択します。


.

出力を確認します。PLAYER表の中身はコンソールに表示されています。


RESTfulクライアントを使用した更新操作

 

ここでは、RESTful Webサービスを使用してデータベースの更新操作を実装する方法について説明します。 RESTful Webサービスを使用して、PLAYER表内の指定された行を更新します。

.

RESTful Webサービスを使用してPLAYER表内の特定の行を更新するには、次の手順を実行します。

CreatePlayerJerseyClient.javaのメイン・メソッドで次の変更を実施します。

a. mainメソッドの内容を削除します。

b. 次のコード行をmainメソッドに追加します。

CreatePlayerJerseyClient client1=new CreatePlayerJerseyClient();
ClientResponse response1= client1.find_XML(ClientResponse.class,"3");
GenericType<Player> genericType = new GenericType<Player>() {};
Player player=response1.getEntity(genericType);
System.out.println("FirstName: "+player.getFirstname());
System.out.println("PlayerID: "+player.getId());
System.out.println(" Jerseyno: "+player.getJerseynumber());
System.out.println("LastName: "+player.getLastname());
System.out.println("Last Spoken Words: "+player.getLastspokenwords());

 


上記コードは、Player表からIDが3のPlayerを取得します。 指定されたPlayer IDを持つPlayerオブジェクトを取得するには、find_XML()メソッドを使用します。

.

Projectsウィンドウで「CreatePlayerJerseyClient.java」を右クリックし、メニューから「Run File」を選択します。


.

出力を確認すると、3というIDを持つPlayerの詳細情報がコンソールに表示されています。



.

取得したPlayerオブジェクトを更新するには、mainメソッドに次のコードを追加します。

player.setJerseynumber(100);
player.setLastspokenwords(" I will be retiring soon");
client1.edit_XML(player);


上記コードは、PLAYER表で、Player IDが3の行に対して次のフィールドを更新します。 JerseyNumber100に変更し、LastSpokenWordsを"I will be retiring soon"に変更します。 PLAYER表のレコードを更新するために使用されるメソッドは、edit_XML()です。

.

Projectsウィンドウで「CreatePlayerJerseyClient.java」を右クリックし、メニューから「Run File」を選択します。


.

次の2つのうちいずれかの方法で出力を確認します。 PLAYER表の中身を確認するか、Webサービス・テスト・クライアントを生成します。

a. PLAYER表の中身を確認するには、次の手順を実行します。

1. Servicesウィンドウで、Databasesノードの下の「jdbc:derby://localhost:1527/playerDB」接続を展開します。
2. 「connection」を右クリックし、「Refresh」を選択します。
3. 「JOHN」スキーマ→「Tables」ノード→「PLAYER」表の順に展開します。
4. 「PLAYER」表ノードを右クリックし、「View Data」を選択します。
5. Player表のPlayerIDが3の行に対して、フィールドJerseynumberLastSpokenWordsが更新されています。

b. パート1で説明されているとおりに、Webサービスのテスト・クライアントを生成します。 Webサービス・クライアントのテスト用のテスト・クライアントがデプロイされたら、次の手順を実行します。

1. リソース・ノードの「com.playerentity.player」を選択します。
2. "Choose method to test"フィールドで「GET (application/xml)」を選択します。
Test」をクリックします。
4. application/xmlリクエストに対するレスポンスの出力を調べます。XMLファイル内でplayerIDが3のPlayerオブジェクトが更新されていることが確認できます。

RESTfulクライアントを使用した削除操作

 

ここでは、RESTful Webサービスを使用してデータベースの削除操作を実装する方法について説明します。 RESTful Webサービスを使用して、PLAYER表内の指定された行を削除します。

.

RESTful Webサービスを使用してPLAYER表内の指定された行を削除するには、次の手順を実行します。

GetPlayerJerseyClient.javaのメイン・メソッドで次の変更を実施します。

a. mainメソッドの内容を削除します。

b. 次のコード行をmainメソッドに追加します。

GetPlayerJerseyClient client1=new GetPlayerJerseyClient();
client1.remove("3");



b. remove()メソッドを使用して、PlayerIdが3のレコードがPlayer表から削除されることを確認します。

 

.

Projectsウィンドウで「GetPlayerJerseyClient.java」を右クリックし、メニューから「Run File」を選択します。


.

次の2つのうちいずれかの方法で出力を確認します。 PLAYER表の中身を確認するか、Webサービス・テスト・クライアントを生成します。

a. PLAYER表の中身を確認するには、次の手順を実行します。

1. Servicesウィンドウで、Databasesノードの下の「jdbc:derby://localhost:1527/playerDB」接続を展開します。
2. 「connection」を右クリックし、「Refresh」を選択します。
3. 「JOHN」スキーマ→「Tables」ノード→「PLAYER」表の順に展開します。
4. 「PLAYER」表ノードを右クリックし、「View Data」を選択します。
5. Player IDが3の行がPLAYER表から削除されています。

b. パート1で説明されているとおりに、Webサービスのテスト・クライアントを生成します。 Webサービスをテストするには、次の手順を実行します。

1. リソース・ノードの「com.playerentity.player」を選択します。
2. "Choose method to test"フィールドで「GET (application/xml)」を選択します。
3. 「Test」をクリックします。
4. 出力を確認すると、Player IDが3のPlayer要素が削除されています。

 

まとめ

このチュートリアルでは、RESTful WebサービスとJPAを組み合わせて使用することで、データベースのCRUD操作を簡単に実装できることを確認しました。

参考資料

著者

Hardware and Software Engineered to Work Together Copyright © 2011, Oracle and/or its affiliates. All rights reserved