SlideShare a Scribd company logo
1 of 19
EJB3入門
~ EJB3は怖くない ~




    武田正英
Contents
1   概要

2   EJBの変遷

3   EJBのライフサイクル

4   EJBのトランザクション

5   EJB3はEoD目指した

6   EJBを使うとおいしい所
概要
EJBというとネガティブなイメージが
思い浮かぶと思います。
でも本当にEJB3を知って言ってますか?

 本日はEJB3の概要をお話し、EJB3の世界に
 触れてもらえればと思います。
EJBの変遷



   EJB1.0/1.1




・エンティティBeanはオプション扱い
・セッションBeanのみのサポート
・ホームインターフェース/
 リモートインターフェースが必要
・デプロイメント記述子が必要
・ベンダー固有の定義ファイルや
 設定が必要
EJBの変遷
       EJB1.0/1.1を反省
・EJBを分散配置することはアンチパターン ><

・Web層からのローカル呼び出しかセッション
 ファサードパターンでまとめられる事が多かった ><




     EJB1.0/1.1              EJB2.0/2.1




  ・エンティティBeanはオプション扱い
  ・セッションBeanのみのサポート        ・ローカルインターフェースの追加
  ・ホームインターフェース/            ・エンティティBeanは
   リモートインターフェースが必要          ローカルインターフェース実装のみ
  ・デプロイメント記述子が必要           ・メッセージドリブンBeanが追加
  ・ベンダー固有の定義ファイルや          ・EJB 2.1でタイマーサービスや
   設定が必要                    Webサービス対応が追加
EJBの変遷
       EJB1.0/1.1を反省                       EJB離れに学ぶ
・EJBを分散配置することはアンチパターン ><            ・DIコンテナやO/Rマッパーの仕様を取り込んだ

・Web層からのローカル呼び出しかセッション              ・アノテーションやAOPの考えを仕様に取り込んだ
 ファサードパターンでまとめられる事が多かった ><




     EJB1.0/1.1              EJB2.0/2.1                EJB3.0




  ・エンティティBeanはオプション扱い                            ・セッションBean/メッセージドリブン
  ・セッションBeanのみのサポート        ・ローカルインターフェースの追加       BeanはEJB2.1から進化をさせた
  ・ホームインターフェース/            ・エンティティBeanは          ・エンティティBeanはHibernateや
   リモートインターフェースが必要          ローカルインターフェース実装のみ      TopLinkを参考にして
  ・デプロイメント記述子が必要           ・メッセージドリブンBeanが追加      Java Persistence API として実装
  ・ベンダー固有の定義ファイルや          ・EJB 2.1でタイマーサービスや    ・セッションBeanではホーム
   設定が必要                    Webサービス対応が追加          インターフェースも廃止
                                                 ・アノテーションで簡単な設定に
EJBの種類

      1               2                 3                  4
データベースの永続化を      クライアントの情報を      クライアントの情報を          JMSによって送信された
行う。JavaBeanと     保持しないビジネス       保持する必要がある           メッセージの到着を持って
同じようにクラス変数と      ロジックを記述する。      ビジネスロジックを           起動される非同期処理を
getter/setterで                   記述する。               記述する。
構成されるがJPAの元で     複数のクライアントから
DBにひも付けられる。      使用されるので、        クラス変数に値を
                 クラス変数に値を        保持する事が出来る。
                 保持すると、ビジネス
                 ロジックの挙動が
                 おかしくなる。



                    Stateless     Stateful Session    Message Driven
   Entity Bean
                  Session Bean         Bean               Bean
EJB3はよりEasyにとEoDを目指した

            設定少


  POJO



                           Easy Of Development

  アノテーション
                   コンテナに
                  難しい管理を
                    委譲
Session Beanのコンテナによるライフサイクル管理

                         Session Bean
                          種類に
                         の種類に応じて
                        管理方法が
                        管理方法が変わる

Stateful Session Bean                   Stateless Session Bean

JNDIから取得される度に                           EJBコンテナによってインス
newされてインスタンスが                           タンスがpoolされる。
生成される。                                  JNDIから取得される度に
                                        poolから取得される。
@Removeアノテーションが
付与されたメソッドが                              pool内のインスタンス数は
コールされたり、                                EJBコンテナによって
一定時間使用されない                              自動管理される。
場合にEJBコンテナに
よって破棄される。

※ここでは活性化につい
ての説明を省略している。
EJB3のトランザクション管理



EJBに対して
アノテーションの付加をして
トランザクションの種類を    EntityManagerを使うと
定義して、           宣言的トランザクションを
EJBコンテナに管理を     使用できるので
お願いしてしまう。       手動制御も可能。
開発者はトランザクション
管理をあまり意識しないで
開発可能。
EJBのコンテナ管理のトランザクション 1/2

               すでにトランザクションが開始されていたら、
   Required    そのトランザクションの中で処理をする。
               トランザクションが開始されていない場合、
               新規にトランザクションを開始して処理をする。


               すでにトランザクションが開始されていたら、
   Requires    そのトランザクションを一時停止して、
     New       新規にトランザクションを行う。処理が終わった
               ら停止していたトランザクションを復活させる。


               トランザクションが開始されていたら、
   Mandatory   そのトランザクションの中で処理をする。
               トランザクションが開始されていない場合、
               TransactionRequiredExceptionを発生。
EJBのコンテナ管理のトランザクション 2/2

               すでにトランザクションが開始されていたら、
      Not      そのトランザクションを一時停止して、トラン
   Supported   ザクションなしで処理を行う。処理が終わったら
               停止していたトランザクションを復活させる。


               呼び出し元のトランザクション属性で実行する。
   Supported




               すでにトランザクション開始されていたら、
    Title      RemoteExceptionを発生させる。
EJB3 エンティティBeanサンプル
@Entity
public class User {

         @Id
         @GeneratedValue
         public Integer id;

         public String userName;

}




テーブルとマッチングさせて記述するのが基本。
S2JDBCでもJPAの考えは入れているので同じようなEntityクラスになる。
EJB3 SessionBeanサンプル 1/2
@Local
public interface UserDao {

        public void userInsert();

        public List<User> findAll();

}




セッションBeanはLocalかRemoteのインターフェースが必要。
もちろん両方実装する事も可能。
EJB3 SessionBeanサンプル 2/2
@Stateless
public class UserDaoBean implements UserDao {                    EJBコンテナが
                                                                 フィールドインジェクション
          @PersistenceContext(unitName = quot;hsqldbEjb3quot;)
          private EntityManager entityManager;                   してくれる

          public void userInsert() {

                     // SessionBeanの中での処理なのでJTAトランザクション配下にある

                     // EntityBeanをNewする まだ永続化されていない
                     User user = new User();
                     user.userName = “hogehoge”;

                     // 永続化
                     entityManager.persist(user);
          }

          public List<User> findAll() {
                      Query query = entityManager.createQuery(quot;SELECT user FROM User AS userquot;);
                      return query.getResultList();
          }
}
EJB3を使うとおいしい所

  JBoss Seamが具現化している世界
  JBoss Seamが具現化している世界




                      ビジネス
           インスタンスの
           インスタンスの   ロジックに
                     ロジックに
トランザクション
           ライフサイクル   ステートを
                     ステートを
管理を簡単に
管理を簡単に
            管理が
            管理が容易    保持できる
                     保持できる
EJB3を使うとおいしい所

  JBoss Seamが具現化している世界
  JBoss Seamが具現化している世界



HttpSessionに対してステート管理を
HttpSessionに してステート管理を
               ステート管理
 煩雑に うのやめませんか
            やめませんか?
 煩雑に行うのやめませんか? etc.


                      ビジネス
           インスタンスの
           インスタンスの   ロジックに
                     ロジックに
トランザクション
           ライフサイクル   ステートを
                     ステートを
管理を簡単に
管理を簡単に
            管理が
            管理が容易    保持できる
                     保持できる
J2EEを学ぼう
武田正英

More Related Content

What's hot

【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介devsumi2009
 
張茂桂 再論公與私
張茂桂 再論公與私張茂桂 再論公與私
張茂桂 再論公與私科幻嘴泡
 
IE-012 工業工程進學程
IE-012 工業工程進學程IE-012 工業工程進學程
IE-012 工業工程進學程handbook
 
CEO-042-創業管理二部曲
CEO-042-創業管理二部曲CEO-042-創業管理二部曲
CEO-042-創業管理二部曲handbook
 
夜までラボ☆テレビ7月24日開催分
夜までラボ☆テレビ7月24日開催分夜までラボ☆テレビ7月24日開催分
夜までラボ☆テレビ7月24日開催分ikiikilab
 
Loftwork 20090416
Loftwork 20090416Loftwork 20090416
Loftwork 20090416武 河野
 
Fantasista Appendix1.0
Fantasista Appendix1.0Fantasista Appendix1.0
Fantasista Appendix1.0fantasistaVppr
 
Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.cydn.cybozu.co.jp
 
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)Kohei Otsuka
 
Kotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKent Ishizawa
 
Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12umekoumeda
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDtripodworks
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hiroshi Ono
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューションnishimizu
 
Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Katsumi TAZUKE
 
要件定義すれば要求が理解できる、なんてことはない
要件定義すれば要求が理解できる、なんてことはない要件定義すれば要求が理解できる、なんてことはない
要件定義すれば要求が理解できる、なんてことはないYusuke Suzuki
 

What's hot (19)

【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
【12-E-2】 SEC流品質作りこみESQR 組込みソフトウェア開発向け品質作り込みガイドの紹介
 
張茂桂 再論公與私
張茂桂 再論公與私張茂桂 再論公與私
張茂桂 再論公與私
 
IE-012 工業工程進學程
IE-012 工業工程進學程IE-012 工業工程進學程
IE-012 工業工程進學程
 
CEO-042-創業管理二部曲
CEO-042-創業管理二部曲CEO-042-創業管理二部曲
CEO-042-創業管理二部曲
 
夜までラボ☆テレビ7月24日開催分
夜までラボ☆テレビ7月24日開催分夜までラボ☆テレビ7月24日開催分
夜までラボ☆テレビ7月24日開催分
 
XS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti JapaneseXS Japan 2008 Ganeti Japanese
XS Japan 2008 Ganeti Japanese
 
Loftwork 20090416
Loftwork 20090416Loftwork 20090416
Loftwork 20090416
 
XS Japan 2008 App Data Japanese
XS Japan 2008 App Data JapaneseXS Japan 2008 App Data Japanese
XS Japan 2008 App Data Japanese
 
Fantasista Appendix1.0
Fantasista Appendix1.0Fantasista Appendix1.0
Fantasista Appendix1.0
 
Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.Cybozu Inc 10th anniversary event - developing section.
Cybozu Inc 10th anniversary event - developing section.
 
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
RF-ID技術2題(自律位置取得・あいまい知人判定プロトコル)
 
Kotatsu-Model in Openthology
Kotatsu-Model in OpenthologyKotatsu-Model in Openthology
Kotatsu-Model in Openthology
 
Jaws2008 Presen12
Jaws2008 Presen12Jaws2008 Presen12
Jaws2008 Presen12
 
GIGAPOD OFFICEHARD
GIGAPOD OFFICEHARDGIGAPOD OFFICEHARD
GIGAPOD OFFICEHARD
 
Hyper Estraierの設計と実装
Hyper Estraierの設計と実装Hyper Estraierの設計と実装
Hyper Estraierの設計と実装
 
25000社以上採用計測ソリューション
25000社以上採用計測ソリューション25000社以上採用計測ソリューション
25000社以上採用計測ソリューション
 
Persona design method / ペルソナ概論
Persona design method / ペルソナ概論Persona design method / ペルソナ概論
Persona design method / ペルソナ概論
 
要件定義すれば要求が理解できる、なんてことはない
要件定義すれば要求が理解できる、なんてことはない要件定義すれば要求が理解できる、なんてことはない
要件定義すれば要求が理解できる、なんてことはない
 
マニュアル
マニュアルマニュアル
マニュアル
 

Viewers also liked

Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Misaki Kajiura
 
Wicket + EJB3 on JBoss (Japanese)
Wicket + EJB3 on JBoss (Japanese)Wicket + EJB3 on JBoss (Japanese)
Wicket + EJB3 on JBoss (Japanese)bose999
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJBTsunenaga Hanyuda
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyToshiaki Maki
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFMasuji Katoda
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発Takakiyo Tanaka
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012Jagadish Prasath
 

Viewers also liked (7)

Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)Java女子部 Java EEハンズオン(応用編)
Java女子部 Java EEハンズオン(応用編)
 
Wicket + EJB3 on JBoss (Japanese)
Wicket + EJB3 on JBoss (Japanese)Wicket + EJB3 on JBoss (Japanese)
Wicket + EJB3 on JBoss (Japanese)
 
3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB3.Java EE7 徹底入門 CDI&EJB
3.Java EE7 徹底入門 CDI&EJB
 
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_studyBeginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
 
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSFJavaEE7徹底入門 プレゼンテーション層の開発 JSF
JavaEE7徹底入門 プレゼンテーション層の開発 JSF
 
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
 
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
EJB 3.2 - Java EE 7 - Java One Hyderabad 2012
 

More from bose999

PhoneGap de iOS develop
PhoneGap de iOS developPhoneGap de iOS develop
PhoneGap de iOS developbose999
 
Python hack-a-thon 2010-11 Enjoy survival !
Python hack-a-thon 2010-11 Enjoy survival !Python hack-a-thon 2010-11 Enjoy survival !
Python hack-a-thon 2010-11 Enjoy survival !bose999
 
コンサルティングと私 Lightning Talk
コンサルティングと私 Lightning Talkコンサルティングと私 Lightning Talk
コンサルティングと私 Lightning Talkbose999
 
GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門bose999
 
JBoss Application Server 入門 ~ Seasar2を動かして見よう!~ on Seasar Conference 2009 White
JBoss Application Server 入門~ Seasar2を動かして見よう!~ on Seasar Conference 2009 WhiteJBoss Application Server 入門~ Seasar2を動かして見よう!~ on Seasar Conference 2009 White
JBoss Application Server 入門 ~ Seasar2を動かして見よう!~ on Seasar Conference 2009 Whitebose999
 
something coin machine
something coin machinesomething coin machine
something coin machinebose999
 
Quickly function add by Eclipse Monkey
Quickly function add by Eclipse MonkeyQuickly function add by Eclipse Monkey
Quickly function add by Eclipse Monkeybose999
 
I leak the contents of my work.
I leak the contents of my work.I leak the contents of my work.
I leak the contents of my work.bose999
 
JRuby on Rails on JBoss
JRuby on Rails on JBossJRuby on Rails on JBoss
JRuby on Rails on JBossbose999
 

More from bose999 (9)

PhoneGap de iOS develop
PhoneGap de iOS developPhoneGap de iOS develop
PhoneGap de iOS develop
 
Python hack-a-thon 2010-11 Enjoy survival !
Python hack-a-thon 2010-11 Enjoy survival !Python hack-a-thon 2010-11 Enjoy survival !
Python hack-a-thon 2010-11 Enjoy survival !
 
コンサルティングと私 Lightning Talk
コンサルティングと私 Lightning Talkコンサルティングと私 Lightning Talk
コンサルティングと私 Lightning Talk
 
GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門GAE/J 開発環境でJDO入門
GAE/J 開発環境でJDO入門
 
JBoss Application Server 入門 ~ Seasar2を動かして見よう!~ on Seasar Conference 2009 White
JBoss Application Server 入門~ Seasar2を動かして見よう!~ on Seasar Conference 2009 WhiteJBoss Application Server 入門~ Seasar2を動かして見よう!~ on Seasar Conference 2009 White
JBoss Application Server 入門 ~ Seasar2を動かして見よう!~ on Seasar Conference 2009 White
 
something coin machine
something coin machinesomething coin machine
something coin machine
 
Quickly function add by Eclipse Monkey
Quickly function add by Eclipse MonkeyQuickly function add by Eclipse Monkey
Quickly function add by Eclipse Monkey
 
I leak the contents of my work.
I leak the contents of my work.I leak the contents of my work.
I leak the contents of my work.
 
JRuby on Rails on JBoss
JRuby on Rails on JBossJRuby on Rails on JBoss
JRuby on Rails on JBoss
 

EJB3 ABC

  • 2. Contents 1 概要 2 EJBの変遷 3 EJBのライフサイクル 4 EJBのトランザクション 5 EJB3はEoD目指した 6 EJBを使うとおいしい所
  • 4. EJBの変遷 EJB1.0/1.1 ・エンティティBeanはオプション扱い ・セッションBeanのみのサポート ・ホームインターフェース/ リモートインターフェースが必要 ・デプロイメント記述子が必要 ・ベンダー固有の定義ファイルや 設定が必要
  • 5. EJBの変遷 EJB1.0/1.1を反省 ・EJBを分散配置することはアンチパターン >< ・Web層からのローカル呼び出しかセッション ファサードパターンでまとめられる事が多かった >< EJB1.0/1.1 EJB2.0/2.1 ・エンティティBeanはオプション扱い ・セッションBeanのみのサポート ・ローカルインターフェースの追加 ・ホームインターフェース/ ・エンティティBeanは リモートインターフェースが必要 ローカルインターフェース実装のみ ・デプロイメント記述子が必要 ・メッセージドリブンBeanが追加 ・ベンダー固有の定義ファイルや ・EJB 2.1でタイマーサービスや 設定が必要 Webサービス対応が追加
  • 6. EJBの変遷 EJB1.0/1.1を反省 EJB離れに学ぶ ・EJBを分散配置することはアンチパターン >< ・DIコンテナやO/Rマッパーの仕様を取り込んだ ・Web層からのローカル呼び出しかセッション ・アノテーションやAOPの考えを仕様に取り込んだ ファサードパターンでまとめられる事が多かった >< EJB1.0/1.1 EJB2.0/2.1 EJB3.0 ・エンティティBeanはオプション扱い ・セッションBean/メッセージドリブン ・セッションBeanのみのサポート ・ローカルインターフェースの追加 BeanはEJB2.1から進化をさせた ・ホームインターフェース/ ・エンティティBeanは ・エンティティBeanはHibernateや リモートインターフェースが必要 ローカルインターフェース実装のみ TopLinkを参考にして ・デプロイメント記述子が必要 ・メッセージドリブンBeanが追加 Java Persistence API として実装 ・ベンダー固有の定義ファイルや ・EJB 2.1でタイマーサービスや ・セッションBeanではホーム 設定が必要 Webサービス対応が追加 インターフェースも廃止 ・アノテーションで簡単な設定に
  • 7. EJBの種類 1 2 3 4 データベースの永続化を クライアントの情報を クライアントの情報を JMSによって送信された 行う。JavaBeanと 保持しないビジネス 保持する必要がある メッセージの到着を持って 同じようにクラス変数と ロジックを記述する。 ビジネスロジックを 起動される非同期処理を getter/setterで 記述する。 記述する。 構成されるがJPAの元で 複数のクライアントから DBにひも付けられる。 使用されるので、 クラス変数に値を クラス変数に値を 保持する事が出来る。 保持すると、ビジネス ロジックの挙動が おかしくなる。 Stateless Stateful Session Message Driven Entity Bean Session Bean Bean Bean
  • 8. EJB3はよりEasyにとEoDを目指した 設定少 POJO Easy Of Development アノテーション コンテナに 難しい管理を 委譲
  • 9. Session Beanのコンテナによるライフサイクル管理 Session Bean 種類に の種類に応じて 管理方法が 管理方法が変わる Stateful Session Bean Stateless Session Bean JNDIから取得される度に EJBコンテナによってインス newされてインスタンスが タンスがpoolされる。 生成される。 JNDIから取得される度に poolから取得される。 @Removeアノテーションが 付与されたメソッドが pool内のインスタンス数は コールされたり、 EJBコンテナによって 一定時間使用されない 自動管理される。 場合にEJBコンテナに よって破棄される。 ※ここでは活性化につい ての説明を省略している。
  • 10. EJB3のトランザクション管理 EJBに対して アノテーションの付加をして トランザクションの種類を EntityManagerを使うと 定義して、 宣言的トランザクションを EJBコンテナに管理を 使用できるので お願いしてしまう。 手動制御も可能。 開発者はトランザクション 管理をあまり意識しないで 開発可能。
  • 11. EJBのコンテナ管理のトランザクション 1/2 すでにトランザクションが開始されていたら、 Required そのトランザクションの中で処理をする。 トランザクションが開始されていない場合、 新規にトランザクションを開始して処理をする。 すでにトランザクションが開始されていたら、 Requires そのトランザクションを一時停止して、 New 新規にトランザクションを行う。処理が終わった ら停止していたトランザクションを復活させる。 トランザクションが開始されていたら、 Mandatory そのトランザクションの中で処理をする。 トランザクションが開始されていない場合、 TransactionRequiredExceptionを発生。
  • 12. EJBのコンテナ管理のトランザクション 2/2 すでにトランザクションが開始されていたら、 Not そのトランザクションを一時停止して、トラン Supported ザクションなしで処理を行う。処理が終わったら 停止していたトランザクションを復活させる。 呼び出し元のトランザクション属性で実行する。 Supported すでにトランザクション開始されていたら、 Title RemoteExceptionを発生させる。
  • 13. EJB3 エンティティBeanサンプル @Entity public class User { @Id @GeneratedValue public Integer id; public String userName; } テーブルとマッチングさせて記述するのが基本。 S2JDBCでもJPAの考えは入れているので同じようなEntityクラスになる。
  • 14. EJB3 SessionBeanサンプル 1/2 @Local public interface UserDao { public void userInsert(); public List<User> findAll(); } セッションBeanはLocalかRemoteのインターフェースが必要。 もちろん両方実装する事も可能。
  • 15. EJB3 SessionBeanサンプル 2/2 @Stateless public class UserDaoBean implements UserDao { EJBコンテナが フィールドインジェクション @PersistenceContext(unitName = quot;hsqldbEjb3quot;) private EntityManager entityManager; してくれる public void userInsert() { // SessionBeanの中での処理なのでJTAトランザクション配下にある // EntityBeanをNewする まだ永続化されていない User user = new User(); user.userName = “hogehoge”; // 永続化 entityManager.persist(user); } public List<User> findAll() { Query query = entityManager.createQuery(quot;SELECT user FROM User AS userquot;); return query.getResultList(); } }
  • 16. EJB3を使うとおいしい所 JBoss Seamが具現化している世界 JBoss Seamが具現化している世界 ビジネス インスタンスの インスタンスの ロジックに ロジックに トランザクション ライフサイクル ステートを ステートを 管理を簡単に 管理を簡単に 管理が 管理が容易 保持できる 保持できる
  • 17. EJB3を使うとおいしい所 JBoss Seamが具現化している世界 JBoss Seamが具現化している世界 HttpSessionに対してステート管理を HttpSessionに してステート管理を ステート管理 煩雑に うのやめませんか やめませんか? 煩雑に行うのやめませんか? etc. ビジネス インスタンスの インスタンスの ロジックに ロジックに トランザクション ライフサイクル ステートを ステートを 管理を簡単に 管理を簡単に 管理が 管理が容易 保持できる 保持できる