| Interstage Application Server J2EE ユーザーズガイド |
目次
索引
![]()
|
| 第3部 EJB編 | > 第28章 Bean共通編 | > 28.3 トランザクションを使用したアプリケーション | > 28.3.1 EJBサービスのトランザクション機能を使用する |
以下に、EJBサービスのトランザクション機能を使用した場合の記述例を示します。
EJBアプリケーションで、トランザクションを連携する(SampleTranでトランザクションを開始してSampleTranCalledでデータベースにアクセスする)場合の記述例を示します。
トランザクション関連の処理は太字で示しています。
(1) SampleTran
package Tran01;
import java.rmi.*;
import javax.ejb.*;
import javax.transaction.*;
public class SampleTran implements SessionBean
{
public javax.ejb.SessionContext context;
・・・
public void setSessionContext(javax.ejb.SessionContext ctx)
throws EJBException
{
/* SessionContextを取得します */
context = ctx;
}
・・・
public int Business(String ID, String NAME) throws EJBException
{
int ret = 0;
/* 高速に呼び出されるBeanのlookup処理を行います */
・・・
/* SessionContextより、UserTransactionを獲得します */
javax.transaction.UserTransaction ut = context.getUserTransaction();
/* トランザクション処理を開始します */
ut.begin();
/* 高速に呼び出されるBeanのメソッドを呼び出します */
・・・
/* トランザクション終了(コミット処理) */
ut.commit();
return(ret);
}
・・・
}
(2) SampleTranCalled
package Tran01;
import java.rmi.*;
import javax.ejb.*;
import javax.transaction.*;
import javax.rmi.*;
public class SampleTranCalled implements SessionBean
{
private javax.ejb.SessionContext context;
private javax.sql.DataSource ds;
・・・
public void setSessionContext(javax.ejb.SessionContext ctx)
throws EJBException
{
/* SessionContextを取得します */
context = ctx;
/* データソースを獲得します */
try {
javax.naming.Context ic = new javax.naming.InitialContext();
ds = (javax.sql.DataSource)ic.lookup("java:comp/env/jdbc/DS1");
}
・・・
}
・・・
public int Business2(String ID, String NAME) throws EJBException
{
int ret = 0;
/* データソースからコネクションを獲得します */
Connection c;
try{
c = ds.getConnection();
}
・・・
/* データベースのアクセスを行います */
・・・
/* コネクションの解放を行います */
try{
c.close();
}
return(ret);
}
・・・
}
単体のSTATEFUL Session Beanの記述例を示します。トランザクション関連の処理は太字で示しています。
package Tran02;
import java.rmi.*;
import javax.ejb.*;
import javax.transaction.*;
import javax.rmi.*;
public class SampleTran implements SessionBean
{
private javax.ejb.SessionContext context;
private javax.sql.DataSource ds;
・・・
public void setSessionContext(javax.ejb.SessionContext ctx)
throws EJBException
{
/* SessionContextを取得します */
context = ctx;
/* データソースを獲得します */
try {
javax.naming.Context ic = new javax.naming.InitialContext( );
ds = (javax.sql.DataSource)ic.lookup("java:comp/env/jdbc/DS1");
}
・・・
}
・・・
public int Business(String ID, String NAME) throws EJBException
{
int ret = 0;
/* SessionContextより、UserTransactionを獲得します */
javax.transaction.UserTransaction ut = context.getUserTransaction();
/* トランザクション処理を開始します */
ut.begin();
/* データソースからコネクションを獲得します */
Connection c;
try{
c = ds.getConnection();
}
・・・
/* データベースのアクセスを行います */
・・・
/* コネクションの解放を行います */
try{
c.close();
}
/* トランザクション終了(コミット処理) */
ut.commit();
return(ret);
}
・・・
}
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 {
・・・
/* トランザクションのコミット時、リソースに対して */
/* コミットを実行した後に呼び出されます。 */
}
}
目次
索引
![]()
|