この節では、トランザクションを使用するときのパフォーマンスを改善するためのヒントを示します。
コンテナ管理によるトランザクションは、整合性の面で望ましく、パフォーマンスにも優れています。
リソースが不必要に長期間保持されることを避けるために、トランザクションにはユーザーの入力または思考時間を含めないことをお勧めします。
セッション EJB コンポーネントの非トランザクションメソッドを、トランザクション属性 NotSupported または Never を使用して宣言します。これらの属性は、配備記述子ファイル ejb-jar.xml にあります。トランザクションはデータベース行をロックするため、持続時間をできるだけ短くします。
非常に長いトランザクション連鎖については、トランザクション属性 TX_REQUIRED を使用します。呼び出し連鎖で EJB メソッドを保証するには、同じトランザクションを使用します。
任意のトランザクションと整合性のあるデータベースから使用可能なロックのうち、もっともコストが低いものを使用します。各メソッド呼び出しのあとでなく、トランザクションが完了したあとにデータをコミットします。
複数のデータベースリソース、コネクタリソース、または JMS リソースが 1 つのトランザクションに関係するとき、分散トランザクションまたはグローバルトランザクションを実行する必要があります。これには、XA 対応のリソースマネージャーおよびデータソースが必要です。XA 対応のデータソースは、2 つ以上のデータソースがトランザクションに関係する場合にのみ使用します。データベースがいくつかの分散トランザクションに参加するが、ほとんどの参加先がローカルトランザクションまたは単一データベーストランザクションである場合、2 つの独立した JDBC リソースを登録し、アプリケーション内で適切なリソースを使用することをお勧めします。
複数のリソースが関係しているトランザクションのパフォーマンスを改善するために、Application Server では最終エージェント最適化 (LAO) を使用します。これにより、分散トランザクション内のリソースのうちの 1 つを、1 フェーズコミット (1PC) リソースとして設定することが可能になります。JDBC リソースに関しては、複数リソーストランザクションのオーバーヘッドのほうがメッセージキューよりもずっと大きいため、LAO により、1 つの JDBC リソースと 1 つ以上のメッセージキューが関係する分散トランザクションのパフォーマンスが大きく改善されます。LAO を利用するには、JDBC リソースを 1PC リソースとして設定します。JMS リソースを設定するために、特別なことを行う必要はありません。
複数の JDBC リソースが関係するグローバルトランザクションでも LAO によってパフォーマンスが改善されますが、改善の度合いは 1 つの JDBC リソースの場合には及びません。この状況では、JDBC リソースのうち 1 つを 1 PC として設定し、その他すべてを XA として設定することをお勧めします。
EJB 配備記述子ファイル (ejb-jar.xml) で、次のトランザクション属性を設定します。オプションの一覧は、もっともパフォーマンスの高いものから低いものの順に並んでいます。パフォーマンスを改善するには、アプリケーションに必要な機能性を提供する属性の中でもっとも負荷の小さいものを選択します。
NEVER
TX_NOTSUPPORTED
TX_MANDATORY
TX_SUPPORTS
TX_REQUIRED
TX_REQUIRESNEW