ローカル・トランザクション内包
ローカル・トランザクション内包 (LTC) を使用して、 未指定のトランザクション・コンテキストにおけるアプリケーション・サーバーの動作を定義します。
未指定のトランザクション・コンテキストは、Enterprise JavaBeans 仕様、バージョン 2.0 以降で定義されています。 例えば、このテクノロジーの仕様を参照してください。
LTC は、境界のある作業単位スコープです。この範囲内で、ゼロ個以上のリソース・マネージャー・ローカル・トランザクション (RMLT) にアクセスできます。LTC は、RMLT が完了しなければならない境界を定義します。 未完了の RMLT は、いずれもポリシーに従って、 コンテナーによって解決されます。 デフォルトでは、LTC は Bean インスタンスに対してローカルです。 同じコンテナーで管理されている Bean であっても、その Bean 間で LTC が共有されることはありません。 グローバル・トランザクション・コンテキストが存在しないときにディスパッチが行われる場合には必ず、エンタープライズ Bean やサーブレットなどのエンタープライズ・アプリケーション・コンポーネントでメソッドをディスパッチする前に、コンテナーによって LTC が始動されます。LTC は、アプリケーション構成の LTC 境界に従って、コンテナーによって完了されます (例えば、メソッド・ディスパッチの終わり)。 LTC サポートに対するプログラマチック・インターフェースはありません。 LTC は、コンテナーによって排他的に管理されます。 アプリケーションのデプロイヤーは、アプリケーションのデプロイメント記述子内でトランザクション属性を使用することにより、個々のアプリケーション・コンポーネント (Web アプリケーションまたは EJB のいずれか) 上で LTC を構成します。
ローカル・トランザクション内包 (LTC) は、アプリケーション・コンポーネントのデプロイメント記述子の一部として、コンテナー管理トランザクションを使用する Web アプリケーション・コンポーネントやエンタープライズ Bean などの複数のアプリケーション・コンポーネントに渡って共有可能となるように構成できるので、グローバル・トランザクションを使用しなくても、これらのコンポーネントが接続を共有できるようになります。複数のアプリケーション・コンポーネント間で単一のリソース・マネージャーが共有されるので、 パフォーマンスやスケーラビリティーの向上、およびリソースに対するロック競合の削減を実現できます。
LTC は、コンテナー管理トランザクションを使用するエンタープライズ Bean および Web アプリケーション・コンポーネントを含む、複数のコンポーネント間で共有することができます。この共有は、Web コンポーネント include() 呼び出しが頻繁に使用されるような状況で便利です。こうした呼び出しでは、スレッドが、LTC でブロックされた複数の接続を別々の Web モジュールに持つ可能性があるからです。この状況では、スレッドが、自身による接続の解放を待機し始めるときに、 アプリケーションは、負荷がかかった状態でコードのデッドロックに遭遇する場合があります。 グローバル・トランザクションを使用せずにこの問題を解決するには、各コンポーネントのデプロイメント記述子で Shareable 属性を設定して、アプリケーション・コンポーネントが LTC を共有できるように指定します。 デプロイメント記述子を使用する必要があります。 アノテーションが使用された場合、この属性は指定できません。
共有可能属性を設定すると、拡張デプロイメント記述子 XML ファイルに以下のコード行が組み込まれます。
<local-transaction boundary="BEAN_METHOD" resolver="CONTAINER_AT_BOUNDARY"
unresolved-action="COMMIT" shareable="true"/>
共有 LTC の利点を最大限に得るためには、各コンポーネントのリソース参照のデフォルト が共有可能接続になっていることも確認します。

共有可能 LTC を使用するアプリケーションは、共有可能 LTC で使用されているリソース・マネージャー接続を明示的にコミットまたはロールバックすることはできません。ただし、autoCommit 機能のある接続を使用することができます。これにより、各コンポーネントごとの接続使用率を適切にカプセル化でき、1 つのコンポーネントが、接続を共有する他のコンポーネントの動作を想定しなくて済みます。
Resolver 属性が Application に設定され、Shareable 属性が true に設定されている LTC で、アプリケーションが何らかの非自動コミット作業を開始すると、実行時に例外が発生します。例えば、JDBC 接続での非自動コミット作業は、接続での自動コミット・オプションを使用不可にするために setAutoCommit(false) メソッドを使用した後で、アプリケーションによって実行される作業のことです。Bean 管理トランザクション (BMT) を使用するエンタープライズ Bean を、LTC 構成上の共有可能な属性セットを使用してアセンブルすることはできません。
![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
- アプリケーション・コンポーネント・ディスパッチが、コンテナーの介在なしに発生する (ステートレス・セッション Bean の create メソッドや、サーブレットで開始されたスレッドの場合など)。
- J2EE 1.2 Web コンポーネント。
- J2EE 1.2 Bean 管理トランザクション (BMT) エンタープライズ Bean。
ローカル・トランザクション内包は、
グローバル・トランザクションと並行して存在することはできません。
グローバル・トランザクションが存在しないときに、
アプリケーション・コンポーネントのディスパッチが発生すると、コンテナーは常に LTC を確立します。
この振る舞いの唯一の例外は、アプリケーション・コンポーネント・ディスパッチが、コンテナーの介在なしに発生する場合で、例えば、ステートレス・セッション Bean の create メソッドの場合です。
ローカル・トランザクション内包の有効範囲を、ActivitySession コンテキストに指定することができます。このコンテキストは、そのコンテキストが開始されたエンタープライズ Bean メソッドよりも長く存続します (『ActivitySession およびトランザクション・コンテキスト』トピックを参照)。