NetBeans IDE でのアプリケーションクライアントの作成
このチュートリアルでは、Enterprise JavaBean (EJB) へのアクセスに使用する簡単なアプリケーションクライアントを作成し、配備する方法を示します。このチュートリアルでは、Java EE 5 プラットフォーム (EJB 3.0) と J2EE 1.4 プラットフォーム (EJB 2.x) を使用して構築された EJB にアクセスする方法を示します。
IDE では、アプリケーションクライアントを独立したプロジェクトの種類として作成できます。アプリケーションクライアントプロジェクトは、エンタープライズアプリケーションの一部として、または独立したスタンドアロンアプリケーションとして作成できます。
このドキュメントでは NetBeans IDE 6.1 リリースを使用します。このドキュメントに示す手順は IDE の旧リリースにも使用できますが、NetBeans IDE 6.1 の一部のオプションは旧リリースでは使用できません。
予想される所要時間: 30 分
チュートリアルの課題
このチュートリアルに従うには、次のソフトウェアとリソースが必要です。
| NetBeans IDE |
Web および Java EE の version 6.1 または
version 6.0 |
| Java Development Kit (JDK) |
version 6 または
version 5 |
GlassFish V2 または
Sun Java Systems Application Server |
UR1 または UR2 |
このチュートリアルでは、GlassFish または Sun Java System Application Server のローカルインスタンスを IDE に登録する必要があります。IDE には GlassFish アプリケーションサーバーが含まれます。IDE をインストールするときにこのアプリケーションサーバーをオプションとしてインストールした場合、サーバーはすでに IDE に登録されています。
前提条件
このドキュメントは、次のテクノロジについて基本的な知識またはプログラミング経験を持つ読者を想定して書かれています。
- Java プログラミング
- NetBeans IDE
エンタープライズアプリケーションの一部としてアプリケーションクライアントを作成
最初に EnterpriseAppEE5 という Java EE 5 エンタープライズアプリケーションを作成します。アプリケーションクライアントは、エンタープライズアプリケーションの作成時に同時に作成します。
エンタープライズアプリケーションの作成
- メインメニューから「ファイル」>「新規プロジェクト」を選択します。
- 「エンタープライズ」カテゴリから「エンタープライズアプリケーション」を選択し、「次へ」をクリックします。
- プロジェクト名として「EnterpriseAppEE5」と入力し、プロジェクトの場所を指定します。
- 専用フォルダを使用するオプションが選択されている場合は選択を解除します。
このオプションは、NetBeans IDE 6.1 を使用している場合に使用できます。このチュートリアルでは、ほかのユーザーやプロジェクトとライブラリを共有しないので、プロジェクトライブラリを専用フォルダにコピーする理由はほとんどありません。
「次へ」をクリックします。
- サーバーを GlassFish に設定し、Java EE バージョンを Java EE 5 に設定します。
- 「EJB モジュールを作成」と「アプリケーションクライアントモジュールを作成」が選択されていない場合は選択します。
このチュートリアルに Web モジュールは必要ないので、「Web アプリケーションモジュールを作成」は選択を解除してもかまいません。
- 「完了」をクリックします。
エンタープライズアプリケーションでのセッション Bean の作成
次に、EJB モジュール内に SessionBean EJB Bean を作成します。SessionBean を作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで「EnterpriseAppEE5-ejb」EJB モジュールを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「エンタープライズ」カテゴリから「セッション Bean」を選択し、「次へ」をクリックします。
- EJB 名として「Session」と入力し、パッケージとして「ejb」と入力します。
- セッションのタイプとして「ステートレス」、作成するインタフェースの型として「リモート」を選択します。
このチュートリアルではリモートインタフェースだけを使用するので、ローカルインタフェースは選択を解除してもかまいません。
「完了」をクリックします。
「完了」をクリックすると、SessionBean.java という Bean クラスがソースエディタに表示されます。
- ソースエディタ内を右クリックし、「EJB メソッド」>「ビジネスメソッドを追加」を選択して Bean のビジネスメソッドを生成します。
- 「ビジネスメソッドを追加」ダイアログで、名前として「getResult」と入力し、「戻り値の型」を「文字列」に設定し、インタフェースとして「リモート」ボックスを選択します。「閉じる」をクリックします。
- SessionBean.java で、getResult メソッドを次のように変更します。
public String getResult() {
return "This is EJB 3.0 Bean";
}
- 変更を保存します。
アプリケーションクライアントからのセッション Bean の呼び出し
次に、EJB Bean を呼び出すコードをアプリケーションクライアントに追加します。アプリケーションクライアントを変更するには、次の手順に従います。
- 「プロジェクト」ウィンドウで「EnterpriseAppEE5-app-client」>「ソースパッケージ」>「enterpriseappee5」を展開し、「Main.java」をダブルクリックしてファイルをソースエディタで開きます。
- ソースエディタ内を右クリックし、「エンタープライズリソース」>「エンタープライズ Bean を呼び出し」を選択します。
- 「エンタープライズ Bean を呼び出し」ダイアログで「EnterpriseAppEE5-ejb」ノードを展開し、呼び出す Bean として「SessionBean」を選択し、「参照先インタフェース」として「リモート」を選択します。「閉じる」をクリックします。
「了解」をクリックすると、セッション Bean を呼び出すための次の注釈が Main.java に追加されます。
@EJB
private static SessionRemote sessionBean;
- 簡単な出力を生成するように main メソッドを次のコードのように変更します。メッセージを「出力」ウィンドウで簡単に確認できるように System.err.println を使用します。
public static void main(String[] args) {
System.err.println("result=" + sessionBean.getResult());
- 変更を保存します。
エンタープライズアプリケーションの構成
これでほとんどの作業が完了しました。最後に、アプリケーションクライアントをモジュールとして設定し、エンタープライズアプリケーションを実行するときに実行されるようにします。アプリケーションクライアントとエンタープライズアプリケーションを同時に作成したので、この構成はすでに完了しているはずです。
エンタープライズアプリケーションを構成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで EnterpriseAppEE5 エンタープライズアプリケーションプロジェクトのノードを右クリックし、「プロパティー」を選択します。
- 「プロジェクトプロパティー」ダイアログで「実行」を選択します。
- クライアントモジュールの URI として「EnterpriseAppEE5-app-client」を選択します。これはデフォルトで選択されているはずです。「閉じる」をクリックします。
エンタープライズアプリケーションの実行
これでエンタープライズアプリケーションを実行し、アプリケーションクライアントをテストできます。
- 「プロジェクト」ウィンドウで「EnterpriseAppEE5」を右クリックし、「実行」を選択します。
プロジェクトを実行すると、IDE によってアプリケーションが構築され、配備されます。「出力」ウィンドウに次のメッセージが表示されます。
result = This is EJB 3.0 Bean
スタンドアロンアプリケーションクライアントを使用した EJB へのアクセス
この課題では、EJB モジュールプロジェクトを作成してから、その EJB に接続するアプリケーションクライアントプロジェクトを作成します。
ここでは、EJB 注釈を使用して EJB をアプリケーションクライアントにリンクできないので、コンテキストからのルックアップを使用します。複数のリモートインタフェースがある場合は Bean のルックアップコードが異なるので、この課題は次の 2 つに分かれています。
単一のリモートインタフェースへのアクセス
この課題では、リモートインタフェースを持つ EJB モジュールを作成してから、EJB にアクセスするアプリケーションクライアントを作成します。
EJB モジュールの作成
この課題では、EJBModule30 という EJB モジュールを作成します。ここでは、EJB モジュールはエンタープライズプロジェクトに追加しません。
- メインメニューから「ファイル」>「新規プロジェクト」を選択します。
- 「エンタープライズ」カテゴリから「EJB モジュール」を選択し、「次へ」をクリックします。
- プロジェクト名として「EJBModule30」と入力し、プロジェクトの場所を設定します。
- 専用フォルダを使用するオプションの選択を解除します。「次へ」をクリックします。
- EJB モジュールがエンタープライズアプリケーションに追加されていないことを確認します。
- サーバーを GlassFish に設定し、Java EE バージョンを Java EE 5 に設定します。
- 「完了」をクリックします。
EJB モジュールでのセッション Bean の作成
この課題では、EJB モジュールに Bean30 セッション Bean を作成します。Bean30 を作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで EJB モジュールを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「エンタープライズ」カテゴリから「セッション Bean」を選択し、「次へ」をクリックします。
- EJB 名として「Bean30」と入力し、パッケージとして「ejb」と入力し、「セッションのタイプ」を「ステートレス」のままにし、「リモート」を選択してリモートインタフェースを作成します。「完了」をクリックします。
「完了」をクリックすると、Bean30Bean.java という Bean クラスがソースエディタに表示されます。
- ソースエディタで、ソースコード内を右クリックし、ポップアップウィンドウから「EJB メソッド」>「ビジネスメソッドを追加」を選択して、Bean のビジネスメソッドを生成します。「ビジネスメソッドを追加」ダイアログで、メソッド名として「getResult」と入力し、「戻り値の型」を「文字列」に設定し、「リモート」インタフェースのボックスが選択されていることを確認します。「閉じる」をクリックします。
- Bean30Bean.java で、getResult メソッドの return を次のボールド部分に変更します。
public String getResult() {
return "This is EJB 3.0 Bean";
}
- セッション Bean の注釈 @Stateless を変更し、Bean を対応付けるデフォルト名を Bean30Bean から Bean30 に変更します。今後はアプリケーションクライアントで Bean30 を使用して Bean のルックアップを行います。注釈は次のようになります (ボールド部分が変更箇所)。
@Stateless(mappedName="Bean30")
public class Bean30Bean implements Bean30Remote {
- 変更を保存します。
アプリケーションクライアントプロジェクトの作成
次に、EJB にアクセスするアプリケーションクライアント ApplicationClientForTest を作成します。
- メインメニューから「ファイル」>「新規プロジェクト」を選択します。
- 「エンタープライズ」カテゴリから「エンタープライズアプリケーションクライアント」を選択し、「次へ」をクリックします。
- プロジェクト名として「ApplicationClientForTest」と入力し、場所を設定します。
- 専用フォルダを使用するオプションの選択を解除します。「次へ」をクリックします。
- サーバーを GlassFish に設定し、Java EE バージョンを Java EE 5 に設定します。
- 「完了」をクリックします。
アプリケーションクライアントからの EJB の呼び出し
次に EJBModule30 プロジェクトをライブラリとして ApplicationClientForTest に追加し、Bean30 にアクセスするコードを追加します。
- 「プロジェクト」ウィンドウで「ApplicationClientForTest」プロジェクトノードを展開し、「ライブラリ」ノードを右クリックして、「プロジェクトを追加」を選択します。
ApplicationClientForTest プロジェクトのプロパティーウィンドウを開き、「ライブラリ」カテゴリで「プロジェクトを追加」をクリックすることもできます。
- 「プロジェクトを追加」ダイアログで、EJBModule30 プロジェクトを探して選択し、「プロジェクト JAR ファイルを追加」をクリックします。
EJBModule30 の JAR ファイルが ApplicationClientForTest のライブラリに追加されます。プロジェクトのライブラリを表示するには、「プロジェクト」ウィンドウでプロジェクトの「ライブラリ」ノードを展開します。
- 「プロジェクト」ウィンドウで「Main.java」をダブルクリックし、ソースエディタでファイルを開きます。
- ソースエディタで、次のコードを Main.java の main メソッドに追加します。ここでも、「出力」ウィンドウで簡単にメッセージを確認できるように System.err.println を使用します。
public static void main(String[] args) {
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30");
System.err.println("EJB message is:" + br.getResult());
- インポート文を修正します (Ctrl-Shift-I)。
- コード内にエラーがある場合は修正します。このとき IDE の提案機能を使用できます。
注: この例では、エラーの原因は throws 節がないことです。IDE の提案機能を使用するには、エラーがあるコード (赤い下線) の最初の行に挿入カーソルを置きます。提案の電球が左マージンに表示されたら、電球をクリックし、「... の throws 節を追加」を選択して throws 節をメソッドに追加します。メソッドに throws 節が追加されるときに適切なインポート文も追加されます。

- 変更を保存します。
これですべて正常な状態になるので、EJBModule30 と ApplicationClientForTest をサーバーに配備できます。配備するには、「プロジェクト」ウィンドウで各プロジェクトのプロジェクトノードを右クリックし、「配備の取り消しおよび配備」を選択します。両方のプロジェクトを配備したらアプリケーションクライアントを実行します。実行するには、「プロジェクト」ウィンドウで「ApplicationClientForTest」を右クリックし、「実行」を選択します。「出力」ウィンドウに次のように表示されます。
EJB message is: This is EJB 3.0 Bean
注: ファイアウォールを使用している場合は、アプリケーションクライアントから EJB にアクセスできるようにするため、ファイアウォールを無効にする必要がある場合があります。
2 つ以上のリモートインタフェースへのアクセス
この課題では、EJBModule30 にリモートインタフェースをもう 1 つ作成します。次にアプリケーションクライアントから各インタフェースにアクセスするように、アプリケーションクライアントのコードを変更します。この課題で EJB の呼び出しに使用するコードは、単一のリモートインタフェースを呼び出すコードとは少し異なります。この課題は、単一のスタンドアロンアプリケーションクライアントから 2 つ以上のリモートインタフェースにアクセスする場合に役立ちます。
Bean30 EJB の 2 つめのリモートインタフェースの作成
この課題では、Bean30 EJB に Bean30Remote2 という 2 つめのリモートインタフェースを作成します。
2 つめのインタフェースを作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで EJB モジュールを右クリックし、「新規」>「Java クラス」を選択します。
- クラス名として「Bean30Remote2」、パッケージとして「ejb」と入力し、「完了」をクリックします。
「完了」をクリックすると、Bean30Remote2.java という Bean クラスがソースエディタに表示されます。
- @Remote 注釈をクラスに追加し、クラスをリモートインタフェースとして宣言します。
- クラスの定義を変更してクラスをインタフェースとして宣言し、getResult メソッドを追加します。クラスは次のようになります (ボールド部分が変更箇所)。
@Remote
public interface Bean30Remote2 {
String getResult2();
}
- インポート文を修正します。javax.ejb.Remote をインポートする必要があります。
- 変更を保存します。
インタフェースを実装するように Bean30 Bean を変更
この課題では、インタフェース Bean30Remote2 を実装するように Bean30 を変更します。
- Bean30Bean.java で Bean30Remote2.java の getResult2 メソッドを実装します。メソッドは次のようになります。
public String getResult2() {
return "This is EJB 3.0 Bean 2";
}
- クラス定義を変更して Bean30Remote2 を実装します。
クラスは次のようになります。
ディレクトリ構造は次のようになります。
ApplicationClientForTest の変更
次に、アプリケーションクライアントの Main クラスでルックアップコードを変更します。
- 「プロジェクト」ウィンドウで ApplicationClientForTest の main.java クラスをダブルクリックしてクラスをソースエディタで開きます。
- 2 つめのインタフェースをルックアップするように main メソッドのコードを変更します。複数のリモートインタフェースがある場合は、ルックアップ時に各インタフェースの完全名を使用する必要があります。
public static void main(String[] args) throws NamingException {
InitialContext ctx = new InitialContext();
Bean30Remote br = (Bean30Remote) ctx.lookup("Bean30#ejb.Bean30Remote");
System.err.println("EJB message is:" + br.getResult());
Bean30Remote2 br2 = (Bean30Remote2) ctx.lookup("Bean30#ejb.Bean30Remote2");
System.err.println("EJB message 2 is:" + br2.getResult2());
- インポートを修正して ejb.Bean30Remote2 のインポート文を追加します。
- 変更を保存します。
EJBModule30 を再配備し、アプリケーションクライアントを実行します。「出力」ウィンドウに次の出力が表示されます。
EJB message is: This is EJB 3.0 Bean
EJB message 2 is: This is EJB 3.0 Bean 2
まとめ
この課題では、アプリケーションクライアントを使用して EJB 3.0 エンタープライズ JavaBeans にアクセスする方法を示しました。エンタープライズアプリケーション内のアプリケーションから、またスタンドアロンのアプリケーションクライアントから EJB にアクセスする方法を示しました。また、単一のリモートインタフェースと複数のリモートインタフェースがある Bean を呼び出す方法の違いも示しました。
スタンドアロンアプリケーションクライアントを使用した EJB (EJB 2.1) へのアクセス
EJB 2.X Beans を使用する場合、手順はよく似ていますが、まったく同じではありません。この課題では、EJB 2.x Beans へのアクセス方法と EJB 3.0 Beans へのアクセス方法の違いを示します。
EJB モジュール EJBModule14 の作成
最初に EJB モジュールを作成します。
- メインメニューから「ファイル」>「新規プロジェクト」を選択します。
- 「エンタープライズ」カテゴリから「EJB モジュール」を選択し、「次へ」をクリックします。
- プロジェクト名として「EJBModule14」と入力し、プロジェクトの場所を設定します。
- 専用フォルダを使用するオプションの選択を解除します。「次へ」をクリックします。
- EJB モジュールがエンタープライズアプリケーションに追加されていないことを確認します。
- サーバーを GlassFish に設定し、Java EE バージョンを J2EE 1.4 に設定します。
- 「完了」をクリックします。
EJBModule14 でのセッション Bean の作成
次に、EJB モジュール内に Bean14 EJB Bean を作成します。Bean14 を作成するには、次の手順に従います。
- 「プロジェクト」ウィンドウで EJB モジュールを右クリックし、「新規」>「その他」を選択して「新規ファイル」ウィザードを開きます。
- 「エンタープライズ」カテゴリから「セッション Bean」を選択し、「次へ」をクリックします。
- クラス名として「Bean14」、パッケージとして「ejb」と入力し、「セッションのタイプ」は「ステートレス」のままにし、「リモート」を選択してリモートインタフェースを作成します。「完了」をクリックします。
「完了」をクリックすると、Bean14Bean.java という Bean クラスがソースエディタに表示されます。
- ソースエディタで、ソースコード内を右クリックし、ポップアップメニューから「EJB メソッド」>「ビジネスメソッドを追加」を選択して、「ビジネスメソッドを追加」ダイアログを開きます。
- 「ビジネスメソッドを追加」ダイアログで、ビジネスメソッド名として「getResult」と入力し、「戻り値の型」を「文字列」に設定し、インタフェースとして「リモート」を選択します。「閉じる」をクリックします。
- Bean14Bean.java で getResult メソッドを変更し、ほかのコンポーネントから Bean にアクセスするための戻しメソッドを用意します。
public String getResult() {
return "This is EJB 1.4 Bean";
}
- 変更を保存します。
アプリケーションクライアントからの EJB の呼び出し
次に EJBModule14 プロジェクトをライブラリとして ApplicationClientForTest に追加し、Bean14 にアクセスするコードを追加します。
- 「プロジェクト」ウィンドウで「ApplicationClientForTest」プロジェクトノードを展開し、「ライブラリ」ノードを右クリックして、「プロジェクトを追加」を選択します。
- 「プロジェクトを追加」ダイアログで、EJBModule14 プロジェクトを探して選択し、「プロジェクト JAR ファイルを追加」をクリックします。
EJBModule14 の JAR ファイルが ApplicationClientForTest のライブラリに追加されます。プロジェクトのライブラリを表示するには、「プロジェクト」ウィンドウでプロジェクトの「ライブラリ」ノードを展開します。
- 「プロジェクト」ウィンドウで「Main.java」をダブルクリックし、ソースエディタでファイルを開きます。
- ソースエディタで、EJBModule30 にアクセスするコードを削除するかコメントにし、Main.java の main メソッドに次のコード (ボールド部分) を追加します。
public static void main(String[] args) throws NamingException {
InitialContext ctx = new InitialContext();
Object remote = ctx.lookup("ejb/Bean14Bean");
Bean14RemoteHome sbrh = (Bean14RemoteHome) PortableRemoteObject.narrow(remote, Bean14RemoteHome.class);
Bean14Remote sbr = sbrh.create();
System.err.println("EJB 1.4 result:" + sbr.getResult());
- インポート文を修正します。
- ソースコード内のエラーを修正します。ルックアップからの NamingException、CreateException、RemoteException の throw 節がメソッドに必要なので、エラーになっています。エラーの解決には、IDE の提案機能を使用できます。
これですべて正常な状態になるので、EJBModule14 と ApplicationClientForTest をサーバーに配備します (各プロジェクトを右クリックし、「配備の取り消しおよび配備」を選択)。次に「ApplicationClientForTest」を右クリックし、「実行」を選択します。クライアントを実行すると、「出力」ウィンドウに次のように表示されます。
EJB 1.4 result: This is EJB 1.4 Bean
次の手順
NetBeans IDE を使用した Java EE アプリケーションの開発方法についての詳細は、次のリソースを参照してください。
EJB 3.0 エンタープライズ Bean の使用方法については、 Java EE 5 チュートリアル を参照してください。
nbj2ee メーリングリストに登録する ことによって、NetBeans IDE Java EE 開発機能に関するご意見やご提案を送信したり、サポートを受けたり、最新の開発情報を入手したりできます。