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