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

第3部 EJB編> 第28章 Bean共通編> 28.3 トランザクションを使用したアプリケーション> 28.3.1 EJBサービスのトランザクション機能を使用する

28.3.1.4 記述例

 以下に、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の記述例

 単体の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インタフェースを使用した場合の記述例を示します。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 {
                 ・・・    
                  /* トランザクションのコミット時、リソースに対して    */
                  /* コミットを実行した後に呼び出されます。            */
          }
      }

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

All Rights Reserved, Copyright (C) 富士通株式会社 2006