Interstage Application Server J2EE ユーザーズガイド |
目次 索引 |
第3部 EJB編 | > 第14章 EJBアプリケーションの呼出し方法 | > 14.5 トランザクションを使用する場合 |
EJBサービスが提供するトランザクションで、トランザクション管理種別を“Container”に指定した場合の例外処理と、SessionSynchronizationインタフェースを使用した場合の例外処理について説明します。
EJBサービスが提供するトランザクションの詳細は、“トランザクション管理種別とトランザクション属性”を参照してください。
以下に、各属性を指定した場合の例外処理について示します。
トランザクション属性 |
例外処理の内容 |
|
ユーザ例外発生時 |
システム例外発生時 |
|
Mandatory |
呼出し元に、メソッド内で返却されたユーザ例外が返却されます。 |
トランザクションをrollbackするように宣言(マーク)し、呼出し元へは “TransactionRolledBackException”が返却されます。呼出し元でトランザクションがrollbackされます。 |
Required |
トランザクションがrollbackにマークされている場合、呼出し元へは“TransactionRolledBackException”例外が返却され、呼出し元で、トランザクションがrollbackされます(rollbackされなくてはなりません)。 上記以外の場合、ユーザ例外が返却されます。
トランザクションがrollbackにマークされている場合、コンテナによりトランザクションがrollbackされ、呼出し元へは“RemoteException”例外が返却されます。 上記以外の場合、コンテナによりトランザクションがcommitされ、呼出し元へはユーザ例外が返却します。 |
コンテナがトランザクションをrollbackするようマーク(宣言)します。呼出し元へは“TransactionRolledBackException”例外が返却され、呼出し元で、トランザクションがrollbackされます(rollbackされなくてはなりません)。
コンテナにより、トランザクションがrollbackされ、呼出し元へは“RemoteException”例外が返却されます。 |
Supports |
当属性が指定されたメソッドは、SessionContext/EntityContextインタフェースのsetRollbackOnlyメソッドを使用することはできません。呼出し元へは、メソッド内で返却されたユーザ例外が返却されます。 |
コンテナは、トランザクションをrollbackするようマーク(宣言)し、呼出し元へは“TransactionRolledBackException”が返却されます。呼出し元でトランザクションがrollbackされます。
呼出し元へは“RemoteException”を返却します。 |
RequiresNew |
トランザクションをrollbackするようマークされている場合は、rollbackを行います。マークされていない場合は、commitを行います。中断されたトランザクションは、コンテナにより再開され、呼出し元へユーザ例外が返却されます。
トランザクションをrollbackするようマークされている場合は、rollbackを行います。マークされていない場合は、commitを行います。呼出し元へはユーザ例外が返却されます。 |
トランザクションは、rollbackされます。中断されたトランザクションをコンテナにより再開され、呼出し元へは“RemoteException”が返却されます。
トランザクションは、rollbackされます。呼出し元へは“RemoteException”が返却されます。 |
NotSupported |
停止されたトランザクションはコンテナによって再開され、当メソッド呼出し元へはユーザ例外が返却されます。 |
停止されたトランザクションは、コンテナによって再開されます。呼出し元へは“RemoteException”例外が返却されます。 |
Never |
呼出し元へは、メソッド内で返却されたユーザ例外が返却されます。 |
呼出し元へは、“RemoteException”が返却されます。 |
メソッド名 |
例外処理の内容 |
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 { ・・・ /* トランザクションのコミット時、リソースに対して */ /* コミットを実行した後に呼び出されます。 */ } }
目次 索引 |