8.5. セッション Bean の呼び出し
8.5.1. JNDI を使用してリモートで SessionBean を呼び出す
このタスクでは、JNDI を使用してセッション Bean を呼び出すためのサポートをリモートクライアントに追加する方法について説明します。このタスクは、プロジェクトが Maven を使用してビルドされていることを前提としています。
ejb-remote
クイックスタートには、この機能を実証する動作中の Maven プロジェクトが含まれています。クイックスタートには、デプロイするセッション Bean とリモートクライアントの両方のプロジェクトが含まれています。以下のコードサンプルは、リモートクライアントプロジェクトから取得したものです。
このタスクは、セッション Bean が認証を必要としないことを前提としています。
警告
Red Hat は、影響するすべてのパッケージで TLSv1.1 または TLSv1.2 を利用するために SSL を明示的に無効化することを推奨しています。
前提条件
開始する前に、次の前提条件を満たしている必要があります。
- Maven プロジェクトを作成してすぐに使用できるようにしておく必要があります。
- JBoss EAP 6Maven リポジトリーの設定はすでに追加されています。
- 呼び出すセッション Bean はすでにデプロイされています。
- デプロイされたセッション Bean は、リモートビジネスインターフェイスを実装します。
- セッション Bean のリモートビジネスインターフェイスは、Maven 依存関係として利用できます。リモートビジネスインターフェイスが JAR ファイルとしてのみ利用可能な場合は、JAR をアーティファクトとして Maven リポジトリーに追加することをお勧めします。指示については、install:install-file の 目標について Maven のドキュメントを参照してください。 http://maven.apache.org/plugins/maven-install-plugin/usage.html
- セッション Bean をホストしているサーバーのホスト名と JNDI ポートを知っている必要があります。
リモートクライアントからセッション Bean を呼び出すには、最初にプロジェクトを正しく設定する必要があります。
手順8.8 セッション Bean のリモート呼び出し用の Maven プロジェクト設定の追加
- 必要なプロジェクトの依存関係を追加しますプロジェクトの
pom.xml
を更新して、必要な依存関係を含める必要があります。 jboss-ejb-client.properties
ファイルを追加しますJBoss EJB クライアント API は、JNDI サービスの接続情報を含むjboss-ejb-client.properties
という名前のプロジェクトのルートでファイルを見つけることを想定しています。このファイルをプロジェクトのsrc/main/resources/
ディレクトリーに次の内容で追加します。# In the following line, set SSL_ENABLED to true for SSL remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default # Uncomment the following line to set SSL_STARTTLS to true for SSL # remote.connection.default.connect.options.org.xnio.Options.SSL_STARTTLS=true remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false # Add any of the following SASL options if required # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false # remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER
サーバーに一致するようにホスト名とポートを変更します。4447
はデフォルトのポート番号です。安全な接続のために、SSL_ENABLED
行をtrue
に設定し、SSL_STARTTLS
行のコメントを解除します。コンテナーの Remoting インターフェイスは、同じポートを使用したセキュリティーで保護された接続とセキュリティーで保護されていない接続をサポートします。- リモートビジネスインターフェイスの依存関係を追加するセッション Bean のリモートビジネスインターフェイスの
pom.xml
に Maven 依存関係を追加します。<dependency> <groupId>org.jboss.as.quickstarts</groupId> <artifactId>jboss-ejb-remote-server-side</artifactId> <type>ejb-client</type> <version>${project.version}</version> </dependency>
プロジェクトが正しく設定されたので、セッション Bean にアクセスして呼び出すためのコードを追加できます。
手順8.9 JNDI を使用して Bean プロキシーを取得し、Bean のメソッドを呼び出す
- チェックされた例外を処理する次のコードで使用される 2 つのメソッド (
InitialContext()
とlookup()
) タイプのチェックされた例外がありますjavax.naming.NamingException
。これらのメソッド呼び出しは、キャッチする try/catch ブロックで囲む必要がありますNamingException
または出力するように宣言されているメソッドで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 プロキシーを取得しますを呼び出す
lookup()
Bean プロキシーのメソッドを渡し、必要なセッション Bean の JNDI 名を渡します。これにより、呼び出すメソッドを含むリモートビジネスインターフェイスのタイプにキャストする必要があるオブジェクトが返されます。final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());
セッション Bean の JNDI 名は、特別な構文を使用して定義されます。詳細は、「EJB JNDI 命名リファレンス」 を参照してください。 - invoke メソッドプロキシー 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 の間の通信は、呼び出し元に対して透過的です。
これで、リモートサーバーでのセッション Bean の呼び出しをサポートするように Maven プロジェクトを設定し、JNDI を使用してサーバーから取得したプロキシー Bean を使用してセッション Bean メソッドを呼び出すコードを記述できるようになります。