Your SlideShare is downloading. ×
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....
EJBの変遷
       EJB1.0/1.1を反省                       EJB離れに学ぶ
・EJBを分散配置することはアンチパターン ><            ・DIコンテナやO/Rマッパーの仕様を取り込んだ

・...
EJBの種類

      1               2                 3                  4
データベースの永続化を      クライアントの情報を      クライアントの情報を          ...
EJB3はよりEasyにとEoDを目指した

            設定少


  POJO



                           Easy Of Development

  アノテーション
             ...
Session Beanのコンテナによるライフサイクル管理

                         Session Bean
                          種類に
                       ...
EJB3のトランザクション管理



EJBに対して
アノテーションの付加をして
トランザクションの種類を    EntityManagerを使うと
定義して、           宣言的トランザクションを
EJBコンテナに管理を     使用...
EJBのコンテナ管理のトランザクション 1/2

               すでにトランザクションが開始されていたら、
   Required    そのトランザクションの中で処理をする。
               トランザクションが開...
EJBのコンテナ管理のトランザクション 2/2

               すでにトランザクションが開始されていたら、
      Not      そのトランザクションを一時停止して、トラン
   Supported   ザクションなしで...
EJB3 エンティティBeanサンプル
@Entity
public class User {

         @Id
         @GeneratedValue
         public Integer id;

      ...
EJB3 SessionBeanサンプル 1/2
@Local
public interface UserDao {

        public void userInsert();

        public List<User> f...
EJB3 SessionBeanサンプル 2/2
@Stateless
public class UserDaoBean implements UserDao {                    EJBコンテナが
            ...
EJB3を使うとおいしい所

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




                      ビジネス
           インスタンスの
           ...
EJB3を使うとおいしい所

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



HttpSessionに対してステート管理を
HttpSessionに してステート管理を
            ...
J2EEを学ぼう
武田正英
Upcoming SlideShare
Loading in...5
×

EJB3 ABC

3,417

Published on

EJB3 ABC
Japanese

Published in: Technology
0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
3,417
On Slideshare
0
From Embeds
0
Number of Embeds
3
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

No notes for slide

Transcript of "EJB3 ABC"

  1. 1. EJB3入門 ~ EJB3は怖くない ~ 武田正英
  2. 2. Contents 1 概要 2 EJBの変遷 3 EJBのライフサイクル 4 EJBのトランザクション 5 EJB3はEoD目指した 6 EJBを使うとおいしい所
  3. 3. 概要 EJBというとネガティブなイメージが 思い浮かぶと思います。 でも本当にEJB3を知って言ってますか? 本日はEJB3の概要をお話し、EJB3の世界に 触れてもらえればと思います。
  4. 4. EJBの変遷 EJB1.0/1.1 ・エンティティBeanはオプション扱い ・セッションBeanのみのサポート ・ホームインターフェース/ リモートインターフェースが必要 ・デプロイメント記述子が必要 ・ベンダー固有の定義ファイルや 設定が必要
  5. 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. 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. 7. EJBの種類 1 2 3 4 データベースの永続化を クライアントの情報を クライアントの情報を JMSによって送信された 行う。JavaBeanと 保持しないビジネス 保持する必要がある メッセージの到着を持って 同じようにクラス変数と ロジックを記述する。 ビジネスロジックを 起動される非同期処理を getter/setterで 記述する。 記述する。 構成されるがJPAの元で 複数のクライアントから DBにひも付けられる。 使用されるので、 クラス変数に値を クラス変数に値を 保持する事が出来る。 保持すると、ビジネス ロジックの挙動が おかしくなる。 Stateless Stateful Session Message Driven Entity Bean Session Bean Bean Bean
  8. 8. EJB3はよりEasyにとEoDを目指した 設定少 POJO Easy Of Development アノテーション コンテナに 難しい管理を 委譲
  9. 9. Session Beanのコンテナによるライフサイクル管理 Session Bean 種類に の種類に応じて 管理方法が 管理方法が変わる Stateful Session Bean Stateless Session Bean JNDIから取得される度に EJBコンテナによってインス newされてインスタンスが タンスがpoolされる。 生成される。 JNDIから取得される度に poolから取得される。 @Removeアノテーションが 付与されたメソッドが pool内のインスタンス数は コールされたり、 EJBコンテナによって 一定時間使用されない 自動管理される。 場合にEJBコンテナに よって破棄される。 ※ここでは活性化につい ての説明を省略している。
  10. 10. EJB3のトランザクション管理 EJBに対して アノテーションの付加をして トランザクションの種類を EntityManagerを使うと 定義して、 宣言的トランザクションを EJBコンテナに管理を 使用できるので お願いしてしまう。 手動制御も可能。 開発者はトランザクション 管理をあまり意識しないで 開発可能。
  11. 11. EJBのコンテナ管理のトランザクション 1/2 すでにトランザクションが開始されていたら、 Required そのトランザクションの中で処理をする。 トランザクションが開始されていない場合、 新規にトランザクションを開始して処理をする。 すでにトランザクションが開始されていたら、 Requires そのトランザクションを一時停止して、 New 新規にトランザクションを行う。処理が終わった ら停止していたトランザクションを復活させる。 トランザクションが開始されていたら、 Mandatory そのトランザクションの中で処理をする。 トランザクションが開始されていない場合、 TransactionRequiredExceptionを発生。
  12. 12. EJBのコンテナ管理のトランザクション 2/2 すでにトランザクションが開始されていたら、 Not そのトランザクションを一時停止して、トラン Supported ザクションなしで処理を行う。処理が終わったら 停止していたトランザクションを復活させる。 呼び出し元のトランザクション属性で実行する。 Supported すでにトランザクション開始されていたら、 Title RemoteExceptionを発生させる。
  13. 13. EJB3 エンティティBeanサンプル @Entity public class User { @Id @GeneratedValue public Integer id; public String userName; } テーブルとマッチングさせて記述するのが基本。 S2JDBCでもJPAの考えは入れているので同じようなEntityクラスになる。
  14. 14. EJB3 SessionBeanサンプル 1/2 @Local public interface UserDao { public void userInsert(); public List<User> findAll(); } セッションBeanはLocalかRemoteのインターフェースが必要。 もちろん両方実装する事も可能。
  15. 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. 16. EJB3を使うとおいしい所 JBoss Seamが具現化している世界 JBoss Seamが具現化している世界 ビジネス インスタンスの インスタンスの ロジックに ロジックに トランザクション ライフサイクル ステートを ステートを 管理を簡単に 管理を簡単に 管理が 管理が容易 保持できる 保持できる
  17. 17. EJB3を使うとおいしい所 JBoss Seamが具現化している世界 JBoss Seamが具現化している世界 HttpSessionに対してステート管理を HttpSessionに してステート管理を ステート管理 煩雑に うのやめませんか やめませんか? 煩雑に行うのやめませんか? etc. ビジネス インスタンスの インスタンスの ロジックに ロジックに トランザクション ライフサイクル ステートを ステートを 管理を簡単に 管理を簡単に 管理が 管理が容易 保持できる 保持できる
  18. 18. J2EEを学ぼう
  19. 19. 武田正英

×