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

第3部 EJB編> 第15章 EJBアプリケーションの呼出し方法> 15.5 トランザクションを使用する場合

15.5.2 EJBサービスが提供するトランザクション制御の例外処理

 EJBサービスが提供するトランザクションで、トランザクション管理種別を“Container”に指定した場合の例外処理と、SessionSynchronizationインタフェースを使用した場合の例外処理について説明します。
 EJBサービスが提供するトランザクションの詳細は、“トランザクション管理種別とトランザクション属性”を参照してください。
 以下に、各属性を指定した場合の例外処理について示します。

■トランザクション管理種別を“Container”に指定した場合の例外処理

トランザクション属

例外処理の内容

ユーザ例外発生時

システム例外発生時

Mandatory

呼出し元に、メソッド内で返却されたユーザ例外が返却されます。

トランザクションをrollbackするように宣言(マーク)し、呼出し元へは“TransactionRolledBackException”が返却されます。呼出し元でトランザクションがrollbackされます。

Required

呼出し元でトランザクションが開始されている場合

トランザクションがrollbackにマークされている場合、呼出し元へは“TransactionRolledBackException”例外が返却され、呼出し元で、トランザクションがrollbackされます(rollbackされなくてはなりません)。
上記以外の場合、ユーザ例外が返却されます。

コンテナがトランザクションをrollbackするようマーク(宣言)します。呼出し元へは“TransactionRolledBackException”例外が返却され、呼出し元で、トランザクションがrollbackされます(rollbackされなくてはなりません)。

呼出し元でトランザクションが開始されていない場合

コンテナは、トランザクションがrollbackにマークされている場合はrollbackを行い、マークされていない場合はcommitを行います。
呼び出し元へは、メソッド内で返却されたユーザ例外が返却されます。

コンテナにより、トランザクションがrollbackされ、呼出し元へは“RemoteException”例外が返却されます。

Supports

呼出し元でトランザクションが開始されている場合

当属性が指定されたメソッドは、SessionContext/EntityContextインタフェースのsetRollbackOnlyメソッドを使用することはできません。呼出し元へは、メソッド内で返却されたユーザ例外が返却されます。

コンテナは、トランザクションをrollbackするようマーク(宣言)し、呼出し元へは“TransactionRolledBackException”が返却されます。呼出し元でトランザクションがrollbackされます。

呼出し元でトランザクションが開始されていない場合

呼出し元へは“RemoteException”を返却します。

RequiresNew

呼出し元でトランザクションが開始されている場合

トランザクションをrollbackするようマークされている場合は、rollbackを行います。
マークされていない場合は、commitを行います。中断されたトランザクションは、コンテナにより再開され、呼出し元へユーザ例外が返却されます。

トランザクションは、rollbackされます。中断されたトランザクションをコンテナにより再開され、呼出し元へは“RemoteException”が返却されます。

呼出し元でトランザクションが開始されていない場合

トランザクションをrollbackするようマークされている場合は、rollbackを行います。
マークされていない場合は、commitを行います。呼出し元へはユーザ例外が返却されます。

トランザクションは、rollbackされます。呼出し元へは“RemoteException”が返却されます。

NotSupported

停止されたトランザクションはコンテナによって再開され、当メソッド呼出し元へはユーザ例外が返却されます。

停止されたトランザクションは、コンテナによって再開されます。呼出し元へは“RemoteException”例外が返却されます。

Never

呼出し元へは、メソッド内で返却されたユーザ例外が返却されます。

呼出し元へは、“RemoteException”が返却されます。

■SessionSynchronizationインタフェースを使用した場合の例外処理

メソッド名

例外処理の内容

afterbegin

トランザクションにロールバックが指定され、“TransactionRolledbackException”例外がビジネスメソッドの呼出し元へ通知されます。

beforeCompletion

トランザクションがロールバックされ、コミットの発行元に対して“HeuristicRolledbackException”例外が通知されます。

afterCompletion

例外は通知されません。

◆記述例

 以下に、SessionSynchronizationインタフェースを使用した場合の記述例を示します。
 SessionSynchronizationインタフェース関連の処理は太字で示しています。

--------------------------------------------------------------------------------
  SampleBean.java

      package Sample;

      import javax.ejb.*;
      import java.rmi.*;

      public class SampleBean
          extends Object implements SessionBean,SessionSynchronization
      {

          // constructor
          public void SampleBean() {
                 ・・・
              /*  Enterprise Bean自身のコンストラクタの処理を記述します  */
          }

          // receive SessionContext
          public void setSessionContext(SessionContext ctx)
              throws EJBException {
                 ・・・
              /* コンテナによって保守されているコンテキストへの  */
              /* アクセスを行い、必要な情報を取得します          */
          }

          // startup work
          public void ejbCreate(String sn)
              throws EJBException,
              CreateException {
                 ・・・
              /* インスタンス変数の初期化や、データベースや          */
              /* ファイルのopenなど、Enterprise Beanのインスタンスが */
              /* createされたときの処理を記述します                  */
          }

          // business method
          public String business(String s)
              throws EJBException {
                 ・・・         /* ビジネスメソッドの処理を記述します */
          }

          // termination work
          public void ejbRemove()
              throws EJBException {
                 ・・・    /* インスタンスがremoveされるときの処理を記述します */
                           /* openしているリソースはclose処理が必要です        */
          }

          // work for passivation
          public void ejbPassivate()
              throws EJBException {
                 ・・・                       /* 本バージョンでは呼ばれません */
          }

          // work for activation
          public void ejbActivate()
              throws EJBException {
                 ・・・                       /* 本バージョンでは呼ばれません */
          }
          // work after transaction begin
          public void afterBegin()
              throws EJBException {
                 ・・・    
                  /* トランザクション内で最初に呼び出されるビジネスメソッド  */
                  /* を実行する前に呼び出されます。                          */
          }

          // work before transaction commit
          public void beforeCompletion()
              throws EJBException {
                  ・・・    
                  /* トランザクションのコミット時、リソースに対して    */
                  /* コミットを実行する前に呼び出されます。            */
          }

          // work after transaction commit
          public void afterCompletion ()
              throws EJBException {
                 ・・・    
              /* トランザクションのコミット時、リソースに対して    */
              /* コミットを実行した後に呼び出されます。            */
          }
      }
--------------------------------------------------------------------------------

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

Copyright 2008 FUJITSU LIMITED