7.5. セッション Bean の呼び出し
7.5.1. JNDI を使用したリモートでのセッション Bean の呼び出し
このタスクは、JNDI を使用してセッション Bean の呼び出すリモートクライアントへサポートを追加する方法を説明します。Maven を使用してプロジェクトがビルドされていることが前提となります。
ejb-remote
クイックスタートには、この機能のデモを行う 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 を呼び出すには、最初にプロジェクトを適切に設定する必要があります。
手順7.7 セッション Bean のリモート呼び出しに対する Maven プロジェクト設定を追加する
必要なプロジェクト依存関係の追加
必要な依存関係が含まれるようにするため、プロジェクトのpom.xml
を更新する必要があります。jboss-ejb-client.properties
ファイルの追加JBoss EJB クライアント API は、JNDI サービスの接続情報が含まれるjboss-ejb-client.properties
という名前のプロジェクトのルートにファイルがあることを想定します。このファイルを以下の内容と共にプロジェクトのsrc/main/resources/
ディレクトリーに追加します。remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false
ホスト名とポートを変更してサーバーと一致するようにします。4447
がデフォルトのポート番号です。 安全な接続の場合、SSL_ENABLED
行をtrue
に設定し、SSL_STARTTLS
行をアンコメントします。コンテナ内のリモーティングインターフェースは同じポートを使用して安全な接続と安全でない接続をサポートします。リモートビジネスインターフェースの依存関係の追加
セッション Bean のリモートビジネスインターフェースに対するpom.xml
に Maven の依存関係を追加します。<dependency> <groupId>org.jboss.as.quickstarts</groupId> <artifactId>jboss-as-ejb-remote-server-side</artifactId> <type>ejb-client</type> <version>${project.version}</version> </dependency>
これでプロジェクトが適切に設定されたため、コードを追加してセッション Bean へアクセスしたり呼び出しすることができるようになりました。
手順7.8 JNDI を使用して Bean プロキシを取得し、Bean のメソッドを呼び出す
チェック例外の処理
次のコードに使用されるメソッドの 2 つ (InitialContext()
およびlookup()
) は、タイプjavax.naming.NamingException
のチェック済み例外を持っています。これらのメソッド呼び出しはNamingException
をキャッチする try/catch ブロックか、NamingException
のスローが宣言されたメソッドに存在する必要があります。ejb-remote
クイックスタートでは、2 番目の方法を使用します。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);
JNDI サービスの接続プロパティーはjboss-ejb-client.properties
ファイルより読み取られます。JNDI コンテキストの lookup() メソッドを使用した Bean プロキシの取得
Bean プロキシのlookup()
メソッドを呼び出し、必要なセッション Bean の JNDI 名 へ渡します。これにより、呼び出したいメソッドが含まれるリモートビジネスインターフェースのタイプへキャストされなければならないオブジェクトが返されます。final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName());
セッション 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);
メソッド呼び出し要求が実行されるサーバー上で、プロキシ Bean がメソッド呼び出し要求をセッション Bean へ渡します。結果はプロキシ Bean へ返され、プロキシ Bean によって結果が呼び出し側へ返されます。プロキシ Bean とリモートセッション Bean 間の通信は呼び出し側に透過的です。
これで、Maven プロジェクトを設定してリモートサーバー上で呼び出しを行うセッション Bean をサポートし、JNDI を使用してサーバーより読み出したプロキシ Bean を使用してセッション Bean メソッドを呼び出すコードを作成できるようになりました。