Interstage Application Server J2EE ユーザーズガイド |
目次 索引 |
第1部 J2EE共通編 | > 第2章 J2EEアプリケーションの設計 | > 2.4 トランザクション制御 |
Webアプリケーションでトランザクションを制御する場合は、JNDIからUserTransactionを取得して制御します。
EJBアプリケーションでトランザクション制御する場合は、トランザクション種別にBean(Bean Managed Transaction)を指定してUserTransactionで制御するか、またはトランザクション種別にContainer(Container Managed Transaction)を指定して、コンテナがトランザクションを制御するかを選択できます。
UserTransactionの使用方法については、“UserTransactionインタフェースを使用したトランザクション制御”を参照してください。
EJBのトランザクション制御については、“EJBサービスのトランザクション制御”を参照してください。
トランザクションは、デフォルトのトランザクションと分散トランザクションを選択できます。
同一Java VM上のJ2EEアプリケーションは、デフォルトのトランザクションを使用したトランザクション連携によってデータベースにアクセスできます。
トランザクションを開始してから、そのトランザクション内で同一のデータソースに対して、同一のユーザID/パスワードで接続した場合、1つのコネクションを共有して使用できるため、トランザクション連携が可能になります。
また、J2EEアプリケーションでトランザクションを開始し、同一Java VM上のJ2EEアプリケーションにアクセスする場合、同一のトランザクションで動作させることができます。
EJBアプリケーションをトランザクション連携させる場合には、トランザクション種別に“Container”を指定し、トランザクションが連携可能なトランザクション属性(“Required”など)を指定してください。
以下のトランザクション連携を行う場合には、分散トランザクションを使用してください。
分散トランザクションの指定はIJServerの定義時に指定します。指定方法についてはInterstage管理コンソールのヘルプを参照してください。
分散トランザクションの詳細については“JTS/JTA編”を参照してください。
EJBアプリケーションのトランザクション機能では、トランザクション内でJDBCコネクションをキャッシュしています。このため、分散したアプリケーションを1つのトランザクションで制御できます。
通常のJDBCアプリケーションでは、データソースのgetConnectionメソッドで取得したコネクションごとにトランザクションが管理されます。
EJBアプリケーションの場合には、getConnectionメソッドで取得したコネクションを、コンテナがトランザクション内でキャッシュします。同一のトランザクション内で同一のデータソースに対して、再度getConnectionメソッドが実行した場合、コンテナがキャッシュされたコネクションを返却するため、以下の図のように分散したアプリケーションの処理も1つのトランザクションで制御できます。
EJBアプリケーションのトランザクション(ET1)を開始してから、getConnectionメソッドを複数回実行していますが、同じデータソースを使用しているため、Entity Bean1とEntity Bean2は同一コネクションで処理します。
このため、Entity Bean1とEntity Bean2のそれぞれのデータベース処理を、同じトランザクション(JT1)で処理できます。
異なるデータソースから取得したコネクションに対する処理は、別々のトランザクションで処理します。それぞれのデータソースが同じデータベースを対象とする場合も、別々のトランザクションで処理します。このため、以下の図のようにアプリケーションを構築すると処理が停止する場合があります。
目次 索引 |