3.2.12. リモート呼び出しの変更
3.2.12.1. リモート呼び出しを JBoss EAP 6 に作成する JBoss EAP 5 のデプロイされたアプリケーションの移行
概要
JBoss EAP 5 では、EJB リモートインターフェースは JNDI でバインドされ、デフォルトではローカルインターフェースの EJB_NAME/local
でバインドされ、リモートインターフェースの EJB_NAME/remote
がバインドされました。その後、クライアントアプリケーションは、EJB_NAME/remote
を使用して Bean を検索しました。
ejb:
BEAN_REFERENCE を使用するよう既存のコードを変更できます。
ejb:
BEAN_REFERENCE 構文は以下のようになります。
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>ステートフル Bean の場合、
ejb:
BEAN_REFERENCE 構文は以下のようになります。
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
<app-name>
- デプロイされた EJB のアプリケーション名。通常、これは .ear 接尾辞のない ear 名ですが、名前は application.xml ファイルで上書きできます。アプリケーションが .ear としてデプロイされていない場合、この値は空の文字列になります。この例では EAR としてデプロイされていないことを仮定します。<module-name>
- サーバーにデプロイされた EJB のモジュール名。これは通常、.jar サフィックスのない EJB デプロイメントの jar 名ですが、ejb-jar.xml を使用して上書きできます。この例では、EJB が jboss-ejb-remote-app.jar にデプロイされたことを仮定するため、モジュール名は jboss-ejb-remote-app になります。<distinct-name>
- EJB の任意の一意の名前。この例では、別の名前を使用しないため、空の文字列を使用します。<bean-name>
- デフォルトでは、Bean 実装クラスのシンプルなクラス名です。<fully-qualified-classname-of-the-remote-interface>
- リモートビューの完全修飾クラス名。
クライアントコードの更新
以下のクライアントコードの例では、以下のステートレス EJB を JBoss EAP 6 サーバーにデプロイしていることを前提としています。@Remote
アノテーションを使用して Bean のリモートビューを公開することに注意してください。
例3.8 ステートレスセッション Bean コードの例
@Stateless @Remote(RemoteCalculator.class) public class CalculatorBean implements RemoteCalculator { @Override public int add(int a, int b) { return a + b; } @Override public int subtract(int a, int b) { return a - b; } }
InitialContext
を作成し、EJB を検索しました。
例3.9 JBoss EAP 5 クライアントの例
InitialContext ctx = new InitialContext(); RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote"); int a = 204; int b = 340; int sum = calculator.add(a, b);
Hashtable
を作成し、Bean 参照のプロパティーを設定します。以下は、クライアントルックアップおよび呼び出しの例です。
例3.10 JBoss EAP 6 のステートレスクライアントの例
final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "jboss-ejb-remote-app"; final String distinctName = ""; final String beanName = CalculatorBean.class.getSimpleName(); final String viewClassName = RemoteCalculator.class.getName(); final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName); int a = 204; int b = 340; int sum = statelessRemoteCalculator.add(a, b);
例3.11 JBoss EAP 6 のステートフルクライアントの例
final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")