6.5. セッション Bean の呼び出し
6.5.1. JNDI を使用したリモートでのセッション Bean の呼び出し リンクのコピーリンクがクリップボードにコピーされました!
リンクのコピーリンクがクリップボードにコピーされました!
このタスクは、JNDI を使用してセッション Bean の呼び出すリモートクライアントへサポートを追加する方法を説明します。Maven を使用してプロジェクトがビルドされていることが前提となります。
remote-ejb
クイックスタートには、この機能を実証する Maven プロジェクトが含まれています。デプロイするセッション Bean のプロジェクトとリモートクライアントのプロジェクトの両方が含まれています。下記のコード例はリモートクライアントのプロジェクトから引用されています。
このタスクでは、セッション Bean に認証の必要がないことが前提となっています。
前提条件
始める前に、次の前提条件を満たしている必要があります。
- Maven プロジェクトが作成され、使用できる状態である。
- JBoss Enterprise Application Platform 6 の Maven リポジトリが既に追加されている。
- 呼び出しするセッション Bean が既にデプロイされている。
- デプロイされたセッション Bean がリモートビジネスインターフェースを実装する。
- セッション Bean のリモートビジネスインターフェースは Maven 依存関係として使用できる。リモートビジネスインターフェースが JAR ファイルとしてのみ使用できる場合は、JAR をアーティファクトとして Maven リポジトリに追加することが推奨されます。http://maven.apache.org/plugins/maven-install-plugin/usage.html にある Maven ドキュメントの
install:install-file
ゴールを参照してください。 - セッション Bean をホストするサーバーのホスト名と JNDI ポートを覚えておく必要があります。
リモートクライアントよりセッション Bean を呼び出すには、最初にプロジェクトを適切に設定する必要があります。
手順6.7 セッション Bean のリモート呼び出しに対する Maven プロジェクト設定の追加
必要なプロジェクト依存関係の追加
必要な依存関係が含まれるようにするため、プロジェクトのpom.xml
を更新する必要があります。jboss-ejb-client.properties
ファイルの追加JBoss EJB クライアント API は、JNDI サービスの接続情報が含まれるjboss-ejb-client.properties
という名前のプロジェクトのルートにファイルがあることを想定します。このファイルを以下の内容と共にプロジェクトのsrc/resources/
ディレクトリに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホスト名とポートを変更してサーバーと一致するようにします。4447
がデフォルトのポート番号です。 安全な接続の場合、SSL_ENABLED
行をtrue
に設定し、SSL_STARTTLS
行をアンコメントします。コンテナ内のリモーティングインターフェースは同じポートを使用して安全な接続と安全でない接続をサポートします。リモートビジネスインターフェースの依存関係の追加
セッション Bean のリモートビジネスインターフェースに対するpom.xml
に Maven の依存関係を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
これでプロジェクトが適切に設定されたため、コードを追加してセッション Bean へアクセスしたり呼び出しすることができるようになりました。
手順6.8 JNDI を使用して Bean プロキシを取得し、Bean のメソッドを呼び出す
チェック例外の処理
次のコードに使用されるメソッドの 2 つ (InitialContext()
およびlookup()
) は、タイプjavax.naming.NamingException
のチェック例外を持っています。これらのメソッド呼び出しはNamingException
をキャッチする try/catch ブロックか、NamingException
のスローが宣言されたメソッドで囲まなければなりません。remote-ejb
クイックスタートではNamingException
のスローが宣言されたメソッドで囲む方法を使用します。JNDI コンテキストの作成
JNDI コンテキストオブジェクトはサーバーよりリソースを要求するメカニズムを提供します。次のコードを使用して JNDI コンテキストを作成します。final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);
final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI サービスの接続プロパティーはjboss-ejb-client.properties
ファイルより読み取られます。JNDI コンテキストの lookup() メソッドを使用した Bean プロキシの取得
Bean プロキシのlookup()
メソッドを呼び出し、必要なセッション Bean の JNDI 名 へ渡します。これにより、呼び出したいメソッドが含まれるリモートビジネスインターフェースのタイプへキャストされなければならないオブジェクトが返されます。final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-app/CalculatorBean!" + RemoteCalculator.class.getName() );
final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-app/CalculatorBean!" + RemoteCalculator.class.getName() );
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セッション Bean の JNDI 名は特別な構文によって定義されます。呼び出しメソッド
プロキシ Bean オブジェクトを取得したため、リモートビジネスインターフェースに含まれるすべてのメソッドを呼び出しすることができます。int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);
int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow メソッド呼び出し要求が実行されるサーバー上で、プロキシ Bean がメソッド呼び出し要求をセッション Bean へ渡します。結果はプロキシ Bean へ返され、プロキシ Bean によって結果が呼び出し側へ返されます。プロキシ Bean とリモートセッション Bean 間の通信は呼び出し側に透過的です。
これで、Maven プロジェクトを設定してリモートサーバー上で呼び出しを行うセッション Bean をサポートし、JNDI を使用してサーバーより読み出したプロキシ Bean を使用してセッション Bean メソッドを呼び出すコードを作成できるようになりました。