ページの先頭行へ戻る
Interstage Application Server/Interstage Web Server J2EE ユーザーズガイド

2.4 トランザクション制御

ここでは、IJServerに配備されたJ2EEアプリケーションのトランザクション制御について説明します。


トランザクションの制御方法

Webアプリケーションでトランザクションを制御する場合は、JNDIからUserTransactionを取得して制御します。

EJBアプリケーションでトランザクション制御する場合は、トランザクション種別にBean(Bean Managed Transaction)を指定してUserTransactionで制御するか、またはトランザクション種別にContainer(Container Managed Transaction)を指定して、コンテナがトランザクションを制御するかを選択できます。

UserTransactionの使用方法については、“4.12 UserTransactionインタフェースを使用したトランザクション制御”を参照してください。
EJBのトランザクション制御については、“10.4 EJBサービスのトランザクション制御”を参照してください。

トランザクションは、デフォルトのトランザクションと分散トランザクションを選択できます。

デフォルトのトランザクション

同一Java VM上のJ2EEアプリケーションは、デフォルトのトランザクションを使用したトランザクション連携によってデータベースにアクセスできます。
トランザクションを開始してから、そのトランザクション内で同一のデータソースに対して、同一のユーザID/パスワードで接続した場合、1つのコネクションを共有して使用できるため、トランザクション連携が可能になります。

また、J2EEアプリケーションでトランザクションを開始し、同一Java VM上のJ2EEアプリケーションにアクセスする場合、同一のトランザクションで動作させることができます。
EJBアプリケーションをトランザクション連携させる場合には、トランザクション種別に“Container”を指定し、トランザクションが連携可能なトランザクション属性(“Required”など)を指定してください。

分散トランザクション

以下のトランザクション連携を行う場合には、分散トランザクションを使用してください。

  • 異なるリソースへのアクセスでトランザクション連携する場合

  • 異なるIJServer間でトランザクション連携する場合

  • J2EEアプリケーションクライアントからトランザクションの開始と終了を制御する場合

注意

  • 分散トランザクションはEJBアプリケーションだけで使用できるため、IJServerの運用タイプは以下のいずれかにしてください。

    • EJBアプリケーションのみ運用でのEJBアプリケーションを運用するプロセス

    • WebアプリケーションとEJBアプリケーションを運用(別Java VM)

    分散トランザクションの指定はIJServerの定義時に指定します。指定方法についてはInterstage管理コンソールのヘルプを参照してください。
    分散トランザクションの詳細については“第5部 JTS/JTA編”を参照してください。

  • 異なるサーバマシンで連携しているEJBアプリケーション間では、分散トランザクションを使用できません。

  • 分散トランザクション機能を使用し、Entity Beanメソッドのいずれかにトランザクション属性 NotSupported、Supports、Never が指定されている場合は、対象EJBアプリケーション起動時にエラーが発生して起動に失敗します。

  • IJServerのプロセスを多重で起動できません。

  • 使用できるリソースマネージャは、最大32個までです。

EJBアプリケーションのトランザクション

EJBアプリケーションのトランザクション機能では、トランザクション内でJDBCコネクションをキャッシュしています。このため、分散したアプリケーションを1つのトランザクションで制御できます。


トランザクション内でのJDBCコネクションのキャッシュ

通常のJDBCアプリケーションでは、データソースのgetConnectionメソッドで取得したコネクションごとにトランザクションが管理されます。
EJBアプリケーションの場合には、getConnectionメソッドで取得したコネクションを、コンテナがトランザクション内でキャッシュします。同一のトランザクション内で同一のデータソースに対して、再度getConnectionメソッドが実行した場合、コンテナがキャッシュされたコネクションを返却するため、以下の図のように分散したアプリケーションの処理も1つのトランザクションで制御できます。



EJBアプリケーションのトランザクション(ET1)を開始してから、getConnectionメソッドを複数回実行していますが、同じデータソースを使用しているため、Entity Bean1とEntity Bean2は同一コネクションで処理します。
このため、Entity Bean1とEntity Bean2のそれぞれのデータベース処理を、同じトランザクション(JT1)で処理できます。

注意

異なるデータソースから取得したコネクションに対する処理は、別々のトランザクションで処理します。それぞれのデータソースが同じデータベースを対象とする場合も、別々のトランザクションで処理します。このため、以下の図のようにアプリケーションを構築すると処理が停止する場合があります。


トランザクション連携可能なリソース

デフォルトのトランザクションと分散トランザクションで制御できるリソースは以下です。

デフォルトのトランザクションの場合

以下のリソースをトランザクション制御可能です。

  • JDBCデータソース

また、Message-driven Beanがメッセージを受信するJMSコネクションファクトリについては、Message-driven Beanのトランザクション種別にContainerを指定して、トランザクション種別にRequiredを指定することで、コンテナがトランザクションを制御します。

分散トランザクションの場合

以下のリソースをトランザクション制御可能です。

  • JDBCデータソース

  • JMSコネクションファクトリ

  • connectorコネクションファクトリ

分散トランザクションを使用する場合には、あらかじめ分散トランザクション連携可能なリソースを定義しておく必要があります。