8.11. クラスター環境の Jakarta Enterprise Beans トランザクション
クライアントコードがクラスター化された Jakarta Enterprise Beans を呼び出すと、クラスターのアフィニティーは自動的に設定されます。クライアント側のトランザクションを管理する場合は、クラスター内の特定のノードをターゲット にするか、クライアントがクラスターノードをレイジーに選択できる ようにしてトランザクションを処理します。本セクションでは、両方のオプションを説明します。
Jakarta Enterprise Beans トランザクションターゲットを特定のノードにする
以下の手順を使用して、クラスター内の特定のノードを対象にし、トランザクションを処理できます。
InitialContext
の作成時にPROVIDER_URL
プロパティーを使用してターゲットクラスターノードアドレスを指定します。props.put(Context.PROVIDER_URL, "remote+http://127.0.0.1:8080"); ... InitialContext ctx = new InitialContext(props);
クライアントで、
InitialContext
からtxn:RemoteUserTransaction
を検索します。UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
UserTransaction
の Java Naming and Directory Interface ルックアップは、以下のコード例のようにPROVIDER_URL
プロパティーをサーバーの URL に設定し、txn:UserTransaction
を検索して実行できます。final Hashtable<String, String> jndiProperties = new Hashtable<>(); jndiProperties.put(Context.INITIAL_CONTEXT_FACTORY, "org.wildfly.naming.client.WildFlyInitialContextFactory"); jndiProperties.put(Context.PROVIDER_URL, "remote+http://localhost:8080"); final Context context = new InitialContext(jndiProperties); SecuredEJBRemote reference = (SecuredEJBRemote) context.lookup("txn:UserTransaction");
UserTransaction
は実際の呼び出しが実行されるまで特定の宛先にバインドされません。呼び出し時に、このUserTransaction
はトランザクションのライフタイム期間中、適切な宛先にバインドされます。UserTransaction
を開始する前に、ノード名または宛先を認識する必要はありません。org.jboss.ejb.client.EJBClient.getUserTransaction ()
メソッドは、最初の呼び出しに基づいて宛先を自動的に選択するリモートUserTransaction
を提供します。Java Naming and Directory Interface からリモートUserTransaction
を検索すると、同じ方法で機能します。注記org.jboss.ejb.client.EJBClient.getUserTransaction()
メソッドが非推奨になりました。- トランザクションが開始されると、すべての Jakarta Enterprise Beans 呼び出しがその特定のノードにトランザクションの間バインドされ、サーバーのアフィニティーが確立されます。
- トランザクションが終了すると、サーバーのアフィニティーがリリースされ、Jakarta Enterprise Beans プロキシーが一般的なクラスターアフィニティーに戻ります。
Jakarta Enterprise Beans Transactions Lazily Select a Node
トランザクションに関連する最初の呼び出し中に、クライアントがクラスターノードを選択してトランザクションを処理するようにできます。これにより、クラスター全体でトランザクションの負荷分散が可能になります。このオプションを使用するには、以下の手順を行います。
-
Jakarta Enterprise Beans を呼び出すために使用される
InitialContext
ではPROVIDER_URL
プロパティーを指定しないでください。 クライアントで、
InitialContext
からtxn:RemoteUserTransaction
を検索します。UserTransaction ut = (UserTransaction)ctx.lookup("txn:RemoteUserTransaction");
- トランザクションが開始されると、あるクラスターノードが自動的に選択され、サーバーのアフィニティーが確立されて、すべての Jakarta Enterprise Beans 呼び出しがトランザクション期間中その特定のノードにバインドされます。
- トランザクションが終了すると、サーバーのアフィニティーがリリースされ、Jakarta Enterprise Beans プロキシーが一般的なクラスターアフィニティーに戻ります。