Enterprise JavaBeans (EJB) リモート・インターフェースにはトランザクション伝搬がサポートされない

Liberty は EJB リモート・インターフェースに対するアウトバウンドとインバウンドのいずれのトランザクション伝搬もサポートしません。デフォルトでは、 EJB Bean はコンテナー管理であり、Required トランザクション属性を使用します。結果として、container-transaction のプロパティーを何も指定していない既存の EJB 定義は、 サポートされていないにもかかわらず、トランザクションを使用するようにデフォルトで構成されます。

この規則は、リモート・ビジネス・インターフェースまたはリモート・ホーム・インターフェースの使用を示す以下の EJB アノテーションを参照する Java コードにフラグを立てます。

この規則は、ejb-jar.xml ファイル内の以下の参照にもフラグを立てます。

EJB 仕様では、アウトバウンド・トランザクション伝搬をサポートしている製品であっても、ヌル・トランザクション・コンテキストを送信する必要があるとされています。 このコンテキストは、トランザクション属性 Required (デフォルト)、Mandatory、または Supports を使用する EJB コンポーネントによって拒否されなければなりません。アクティブなグローバル・トランザクションのあるクライアントは、 クライアントまたはサーバーのいずれかが Liberty にある場合は、デフォルトのトランザクション属性で EJB Bean を開始することはできません。

クライアントが EJB Bean を開始できるようにするには、トランザクション属性 RequiresNew または NotSupported を使用するように EJB Bean を変更します。これらの属性は EJB Bean の開始を許可しますが、 EJB Bean によって行われるトランザクション処理は、クライアント・トランザクションの一部としてコミットされません。

同じ JVM で実行されている EJB リモート・インターフェースにはトランザクション伝搬がサポートされますが、 これはアプリケーション動作をさらに調査することによってのみ判別できるものであることに注意してください。

リモート EJB インターフェースが必要であることの確認

EJB 2.x Bean では、ejb-jar.xml 内に、使用されない場合でもリモート・インターフェースが構成されることがあります。 リモート・インターフェースが必要なのは、2 つの別々の JVM にわたって実行されるコードがある場合のみです。 WebSphere 用語では、これは 2 つの別々のアプリケーション・サーバーであるか、または、別々の JVM で実行されている 1 つのクライアント・アプリケーションと 1 つのアプリケーション・サーバーです。 EJB ルックアップ内の iiop:// プロバイダー URL などの CORBA 情報も、リモート EJB Bean 使用の標識です。

同じ JVM で実行されていてリモート・インターフェースを使用している EJB Bean を参照している場合、 ローカル・インターフェースを使用でき、そのほうがパフォーマンスが向上します。 可能な場所では、アノテーションを @Remote から @Local に、@RemoteHome から @LocalHome に変更し、 コードのすべてのシナリオをテストしてください。 同様に、ejb-jar.xml 構成で、<remote/> および <business-remote/> 定義を削除し、 すべてのシナリオをテストしてください。 このシナリオにはトランザクション伝搬がサポートされますが、ベスト・プラクティスは、ローカル・インターフェースを使用するように変換することです。 それにより、パフォーマンスが向上し、同じ JVM から外部的に呼び出し可能なメソッドの認知が除去されます。

本当にリモート・インターフェースが必要な場合

EJB Bean を Web サービス内でラップします (JAX-WS)

リモート・アクセスを必要とする EJB Bean の場合、ベスト・プラクティスは、それらを Web サービス内でラップすることです。 これらのコード変更を行うための WebSphere Application Server Developer Tools for Eclipse の使用方法については、 Web サービスを作成するための EJB Bean のアノテーション付けを参照してください。 Web サービス内で EJB Bean をラップした後、Web サービス・クライアントを使用して EJB Web サービスを呼び出します。 テストの後、EJB のリモートのアノテーションまたは構成を削除できます。

トランザクション伝搬の処理
Liberty は、分散グローバル・トランザクションを可能にする Web Services Atomic Transaction (WS-AT) をサポートしています。 EJB が Web サービスとしてデプロイされていると、WS-AT を使用してトランザクションを管理できます。 詳しくは、 Web Services Atomic Transaction 概要を参照してください。

関連トピックについて詳しくは、以下を参照してください。