EJBからWebサービスをつくるパソコンで試してわかるWebサービス(9)(3/4 ページ)

» 2003年06月27日 00時00分 公開
[イチロー樋口研究室監修]

エンタープライズ・プロジェクトの作成

 Java 2 Platform, Enterprise Edition(J2EE)の規約では、エンタープライズ・アプリケーション、すなわちJ2EEアプリケーションはEARファイルとしてアプリケーション・サーバに配置します。このパッケージングについては前回少しお話ししていますので省きますが、前回と違うのは「EJBを使う」ということです。

 WSADではEJBを利用するJ2EEアプリケーションを作成するときには、「エンタープライズ・アプリケーション・プロジェクト」として開発を進めます。このプロジェクトを作成するには、メニューから「ファイル」−「新規」−「エンタープライズ・アプリケーション・プロジェクト」を選択してください。

(クリックすると拡大します) (クリックすると拡大します)

 するとプロジェクト作成ウィザードが起動します。ここでは、J2EEのバージョンを選択します。今回は「J2EE 1.3」を選択し、「次へ」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 次の画面ではプロジェクト名を入力します。一番上のフィールド「エンタープライズ・アプリケーション・プロジェクト名」に「EJBWebService」とだけ入れてください。するとほかのフィールドには自動的にプロジェクト名が入力されます。そのまま「終了」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 このウィザードにより、4つのプロジェクトが作成されます。少しだけこの4つのプロジェクトについて解説しておきましょう。

(クリックすると拡大します) (クリックすると拡大します)

 J2EEの規約では、エンタープライズ・アプリケーションには、「クライアント」「EJB」「Web」のそれぞれのアプリケーションが含まれることになっています。WSADでは、そのそれぞれのアプリケーションを別のプロジェクトとして管理します。しかし、最終的なJ2EEアプリケーションにおいては、エンタープライズ・アプリケーションの中(EARファイルの中)に、それぞれのアプリケーション(クライアント、EJB、Web)が別々のパッケージとして含まれることになります。

 それを確認するには、「J2EE階層」タグを選択し、「エンタープライズ・アプリケーション」−「EJBWebService」−「モジュール」とたどっていくと、3つのプロジェクトに対応したパッケージが含まれていることが確認できます。

 これで、プロジェクトの作成が完了しました。

EJBの作成(ひな型作成)

 EJBを作成します。EJBの作成は3つのパッケージ(モジュール)のうち、「EJBモジュール」で行います。ちなみに前回のJavaBeansは「Webモジュール」で実施しました。まず、EJBのひな型を作成します。

 「J2EE階層」タブを選択し、「EJBモジュール」の「EJBWebServiceEJB」においてマウスを右クリックして、「新規作成」−「エンタープライズBean」を選択します。

(クリックすると拡大します) (クリックすると拡大します)

 これにより、EJB作成ウィザードが起動します。EJBはエンタープライズ・アプリケーション・プロジェクトに直接含まれるわけではなく、先に書いたようにEJBプロジェクトに含まれて、そのEJBプロジェクトがエンタープライズ・アプリケーション・プロジェクトに含まれることになります。

 ということで、この最初の画面では、EJBプロジェクト「EJBWebServiceEJB」を選択し、「次へ」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 今回はWebサービス化するEJBを作成します。Webサービス化できるEJBは「セッションBean」になります。この画面では、「セッションBean」を選択し、Bean名に「SimpleAddEJB」と入力してください。そして、デフォルト・パッケージは「atmarkit」とします。入力できたら、「次へ」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 次の画面では、セッションBeanの種類を選択します。Webサービス化するには「ステートレス」を選択し、「次へ」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 次の画面では、特に設定の必要はありません。「終了」ボタンを押します。

(クリックすると拡大します) (クリックすると拡大します)

 これでEJBのひな型が出来上がりました。EJBを表す豆アイコンの「SimpleAddEJB」が出来ています。その中には3つのファイルが含まれています。3つのファイルはJavaプログラムのため、「J」アイコンになっていますが、EJBの場合、3つの目的別ファイルになっています。小さく「H」が書かれているのは「ホーム・インターフェイス」、小さく「R」が書かれているのは「リモート・インターフェイス」、そして、小さな豆マークが付いているのは、EJB本体のクラスファイルになっています。これら全部で1つの部品「SimpleAddEJB」を構成しています。

(クリックすると拡大します) (クリックすると拡大します)

 これでEJBのひな型が出来上がりました。EJBを表す豆アイコンの「SimpleAddEJB」が出来ています。その中には3つのファイルが含まれています。3つのファイルはJavaプログラムのため、「J」アイコンになっていますが、EJBの場合、3つの目的別ファイルになっています。小さく「H」が書かれているのは「ホーム・インターフェイス」、小さく「R」が書かれているのは「リモート・インターフェイス」、そして、小さな豆マークが付いているのは、EJB本体のクラスファイルになっています。これら全部で1つの部品「SimpleAddEJB」を構成しています。

EJBの作成(ビジネスロジック記述)

 EJBのビジネスロジック記述は、セッションBeanにおいてはあまりJavaBeansと変わりません。前回JavaBeansを作ったときと同じように作ることが可能です。そこで、せっかく前回JavaBeansを作っていますので、そこからビジネスロジックをコピーして作ってみましょう。

 まず、前回作成したJavaBeans「SimpleAddBean.java」と、EJBのビジネスロジックを記述する「SimpleAddEJBBean.java」の2つのプログラムを開きます。

(クリックすると拡大します) (クリックすると拡大します)

 そして、JavaBeansのソースコード「SimpleAddBean.java」を表示すると、左下のアウトライン・ウィンドウにこのJavaBeansに含まれるフィールドやメソッドが表示されます。

 ここでコピーするフィールド/メソッドを、Ctrlキーを押しながら複数選択します。今回は、JavaBeansのコンストラクタ以外(SimpleAddBeanメソッド以外)をすべて選択します。選択後、マウスの右クリックをし、「コピー」を選びます。

(クリックすると拡大します) (クリックすると拡大します)

 次に、コピー先の「SimpleAddEJBBean.java」のプログラムを表示させます。やはり左下のアウトライン・ウィンドウにおいてコピー先のクラス名「SimpleAddEJBBean」を選択し、マウスを右クリックして「貼り付け」を選択します。

(クリックすると拡大します) (クリックすると拡大します)

 これにより、JavaBeansからEJBにフィールドやメソッドがコピーされたことが確認できます。このように、ソースコードを容易に切り貼りできる機能は統合開発環境を利用するメリットの1つともいえるでしょう。

(クリックすると拡大します) (クリックすると拡大します)

 先ほどJavaBeansのコンストラクタはコピーしなかったのを思い出してください。というのは、EJBの場合、コンストラクタではなく、コンストラクタのような動きをするメソッドとして「ejbCreate」メソッドが用意されていて、これを利用するためです。

 JavaBeansのコンストラクタに記述していた内容を確認してください。変数の初期化が行われると同時に、起動したことを知らせるメッセージ出力文が行われています。

(クリックすると拡大します) (クリックすると拡大します)

 このJavaBeansのコンストラクタと同じ内容をEJBのejbCreateメソッドに記述します。記述する内容は次のようになります。

resultValue = 0;
inputValue = 0;
System.out.println("SimpleAddEJBがCreate化されました!"); 
(クリックすると拡大します) (クリックすると拡大します)

 これで、ビジネスロジックの記述は終了です。

EJBの配置(Deploy)

 EJBにビジネスロジックを記述しました。残念ながら、「さて、動かしてみましょう」とはなりません。最初にJavaBeansとEJBの手順の違いで見たように、次に「EJBの配置(Deploy)」というEJBを作成する際の特徴的な作業を行います。

 最初に書いたようにJavaBeansとEJBでは実行方法に違いがあります。EJBはネットワークを介した呼び出しになります。そのため、ネットワークの先のEJBクライアントが呼び出すことのできる機能を、EJB側は明らかにしておく必要があります。ネットワークの向こう側からはEJBにどのような機能があるかを知る方法はありません。そのため、明示的に「このメソッドは呼び出し可能である」というマーキングをしておく必要があります。

 ところで、これまでWebサービスを学習してきた皆さんは、これがWebサービスのWSDLに似ていることに気付きましたか? EJBはネットワーク越しにオブジェクト呼び出しを行いますが、Webサービスも大変似ている動きをしているといえます。

 話を元に戻しましょう。先ほど作成したEJBの本体「SimpleAddEJBBean.java」において、追加したメソッドをアウトライン・ウィンドウにて選択します。Ctrlキーを押しながら複数選択し、マウスの右クリックで「エンタープライズBean」−「リモート・インターフェイスへのプロモート」を選択してください。

(クリックすると拡大します) (クリックすると拡大します)

 これで、EJBにおける利用可能な機能(メソッド)にビジネスロジックのメソッドが加わりました。ちゃんと加えられたかどうかを確認するには、小さい「R」マークが付いている「SimpleAddEJB.java」ファイルを表示します。このリモート・インターフェイスにメソッドが追加されていればOKです。

(クリックすると拡大します) (クリックすると拡大します)

 ここまでできれば、EJB作成はほとんど終わったことになります。しかし最後に必ず実施しておく作業があります。それはEJBの配置(Deploy)です。

 EJBはEJBコンテナ上で稼働することは、最初に説明しました。このEJBコンテナはさまざまな機能を持っていて、これらの機能を利用できることこそEJBのメリットです。

  さて、このEJBコンテナの機能を利用するには、EJBコンテナの機能を利用できるEJBに仕立てる必要があります。で、この「EJBコンテナーの機能を使えるように仕立てる」作業を実施します。この作業は大変複雑ですが、統合開発環境では自動生成する機能が用意されています。

 豆アイコンの「SimpleAddEJB」を選択してください。ここで、マウスの右クリックを押して、「デプロイ・コードの生成」を選択します。

(クリックすると拡大します) (クリックすると拡大します)

 これで配置準備の整ったEJBが出来ました。J2EEナビゲータウィンドウでは、さまざまなプログラムが追加されていることが確認できます。

(クリックすると拡大します) (クリックすると拡大します)

 このEJBをアプリケーション・サーバに配置することでEJBは利用可能になります。WSAD内には、WebSphereアプリケーション・サーバのテスト環境が含まれています。前回、そのサーバも作られていますので、そのサーバにEJBも追加しましょう。

 「サーバ構成」−「WebSphere Ver5.0 Server Configuration」を選択し、マウス右クリックのメニューより「追加」−「EJBWebService」を選択します。

(クリックすると拡大します) (クリックすると拡大します)

 これでEJBが含まれたエンタープライズ・アプリケーションがアプリケーション・サーバに配置されたことになり、EJBが稼働できる状態になったことになります。

(クリックすると拡大します) (クリックすると拡大します)

 早速EJBの単体テストを実施してみましょう。

EJBのテスト

 EJBの実行にはEJBクライアントが必要です。しかし、まだEJBクライアントを作っていません。そこで、WSADの持っている汎用テスト・クライアントを利用します。これは、JavaBeansの際に利用したものと同じです。この汎用テスト・クライアントはEJBの実行も可能であり、EJBの動作確認を容易に行うことができます。

 このテストを実行するには、豆アイコンの「SimpleAddEJB」を選択し、マウス右クリックで「サーバで実行」を選ぶだけです。

(クリックすると拡大します) (クリックすると拡大します)

 するとWebSphereアプリケーション・サーバが起動し、その後、汎用テスト・クライアントが立ち上がります。

(クリックすると拡大します) (クリックすると拡大します)

 汎用テスト・クライアントは前回も利用しましたが、JavaBeansとEJBとでは、少し手順が異なります。EJBクライアントは、ネットワークの向こう側にあるEJBを使えるようにひと手間必要です。

 まず、すでに表示されている「SimpleAddEJB」の下、「SimpleAddEJBHome」の「SimpleAddEJB.create()」をクリックします。すると右側の画面にそのcreateメソッドを起動する画面が現れます。ここで「起動」ボタンを押してください。

(クリックすると拡大します) (クリックすると拡大します)

 すると、パラメータウィンドウの下部に結果が表示されます。そこに「SimpleAddEJB (atmarkit.SimpleAddEJB)」と書かれています。そのまま、「オブジェクトの使用」ボタンを押してください。

(クリックすると拡大します) (クリックすると拡大します)

 すると、左側の「参照」ウィンドウに「SimpleAddEJB_1」というのが表示されます。

(クリックすると拡大します) (クリックすると拡大します)

 これは、リモート・インターフェイスの参照になります。このリモート・インターフェイスこそ、リモートにあるEJBを操作するインターフェイスです。EJBで利用可能にしたメソッドがすべて表示されていることが確認できると思います。

 リモート・インターフェイスの名称がEJBの名称と同じである理由がここにありますが、気が付きましたか? EJBクライアントは、「まるでローカル(同一JavaVM)にBeanがあるかのごとく」操作できることになります。これが、Webサービス・クライアントのときと似ていることにも気付きましたか?

 このホーム・インターフェイスを使って、ネットワークの先にあるEJBへアクセスするためのリモート・インターフェイスを取得する作業は、EJB特有の作業です。これはJavaBeansでいえば、インスタンス化することに似ています。

 この後はJavaBeansのテストと同様ですが、簡単に書くと次のような手順になります。参照ウィンドウの「setInputValue()」メソッドをクリックして、値に「5」を入力し、「起動」ボタンを押します。次に「add()」メソッドをクリックして、「起動」ボタンを押します。もう一度、参照ウィンドウの「setInputValue()」メソッドをクリックして、値に「7」を入力し、「起動」ボタンを押します。次に「add()」メソッドをクリックして、「起動」ボタンを押します。これで2つの数字を加算したことになりますので、結果を見るために、「getResultValue()」メソッドを選択し、「起動」ボタンを押します。これで、結果の「12」が得られます。

 EJBは正常に動いていることが確認できたと思います。

EJBのテスト(クリックすると拡大します) EJBのテスト(クリックすると拡大します)

 これで、Webサービスの種になるEJBが出来ました。これをWebサービス化しましょう。

Copyright © ITmedia, Inc. All Rights Reserved.

RSSについて

アイティメディアIDについて

メールマガジン登録

@ITのメールマガジンは、 もちろん、すべて無料です。ぜひメールマガジンをご購読ください。