Red Hat Training

A Red Hat training course is available for Red Hat JBoss Enterprise Application Platform

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 プロジェクト設定の追加

  1. 必要なプロジェクトの依存関係を追加します
    プロジェクトの pom.xml を更新して、必要な依存関係を含める必要があります。
  2. 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 インターフェイスは、同じポートを使用したセキュリティーで保護された接続とセキュリティーで保護されていない接続をサポートします。
  3. リモートビジネスインターフェイスの依存関係を追加する
    セッション 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 のメソッドを呼び出す

  1. チェックされた例外を処理する
    次のコードで使用される 2 つのメソッド (InitialContext()lookup()) タイプのチェックされた例外がありますjavax.naming.NamingException。これらのメソッド呼び出しは、キャッチする try/catch ブロックで囲む必要がありますNamingExceptionまたは出力するように宣言されているメソッドでNamingExceptionejb-remote クイックスタートは 2 番目の手法を使用します。
  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 ファイルから読み取られます。
  3. 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 命名リファレンス」 を参照してください。
  4. 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 メソッドを呼び出すコードを記述できるようになります。