Interstage Application Server J2EE ユーザーズガイド
目次 索引 前ページ次ページ

第1部 J2EE共通編> 第4章 JNDI

4.11 UserTransactionインタフェースを使用したトランザクション制御

 アプリケーションが、トランザクションを制御する場合、UserTransactionインタフェースを使用して制御します。以下に、UserTransactionインタフェースを使用したトランザクション機能の処理の流れなど、アプリケーションの開発について説明します。

■UserTransactionインタフェースを使用したトランザクション機能の流れ

 以下に、UserTransactionインタフェースを使用したトランザクション機能を使用する場合の処理の流れを示します。

■UserTransactionインタフェースのメソッド

 UserTransactionインタフェースには以下のメソッドがあります。
 使用できるメソッドの一覧を示します。

メソッド名

内容

begin

新しいトランザクションを生成し、現在のスレッドに関連付けます。

commit

現在のスレッドと関連付けられたトランザクションを完了させます。

getStatus

現在のスレッドと関連付けられたトランザクションの状態を獲得します。

rollback

現在のスレッドと関連付けられたトランザクションをロールバックします。

setRollbackOnly

現在のスレッドと関連付けられたトランザクションを、トランザクションの結果がロールバックだけになるように変更します。

setTransactionTimeout

現在のスレッドでbeginメソッドにより開始されたトランザクションと関連するタイムアウト値を変更します。

トランザクション制御範囲

 デフォルトのトランザクションを使用する場合、J2EEアプリケーションでトランザクションを開始し、同一Java VM上の他のJ2EEアプリケーションにアクセスする場合、同一のトランザクションで動作させることができます。
 また、WebアプリケーションとEJBアプリケーションを同一JavaVMで運用する場合、WebアプリケーションがUserTrasanctionを使用して、WebアプリケーションからアクセスしたEJBアプリケーション処理をトランザクション連携させることも可能です。

■コネクションの獲得、解放

 コネクションの獲得は、データソースに対してgetConnection()メソッドを発行することによって行います。これ以外の方法で獲得されたコネクションは、トランザクション配下のコネクションとして扱われません。
 コネクションの解放は、獲得したコネクションに対してclose()メソッドを発行することによって行います。
 データソースを使用する場合は、最初にデータソースのlookupを行います。

■記述例

------------------------------------------------------------------------------------
  ...
  javax.transaction.UserTransaction userTransaction = null ;
    /* JNDIのlookupメソッドを使用して、UserTransactionを獲得します */
    try {
        javax.naming.Context initialContext = new
        javax.naming.InitialContext();
        userTransaction =
        (UserTransaction)initialContext.lookup("java:comp/UserTransaction");
    } catch(NamingException ex) {
        /* 例外処理 */
        ...
    }

    /* トランザクション処理を開始します */
    try {
        userTransaction.begin();
    } catch(javax.transaction.NotSupportedException e) {
        /* 例外処理 */
        ...
    } catch(javax.transaction.SystemException e) {
        /* 例外処理 */
        ...
    }

    try {
        /* EJBアプリケーションの呼出し、もしくは、JDBCデータソースへのアクセス */
        ...
    } catch( Throwable e ) {
        /* 例外が発生した場合などはトランザクションをロールバック*/
        userTransaction.rollback();
        throw e;
    }

    try {
        /* 処理を完結したい場合などにはトランザクションをコミット*/
        userTransaction.commit();
    } catch( Throwable e ) {
        throw e;
    }
  ...
------------------------------------------------------------------------------------

目次 索引 前ページ次ページ

All Rights Reserved, Copyright(C) 富士通株式会社 2005