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 { ・・・ /* トランザクションのコミット時、リソースに対して */ /* コミットを実行した後に呼び出されます。 */ } }
目次
索引
![]() ![]() |