• Save
EJB3 ABC
Upcoming SlideShare
Loading in...5
×
 

EJB3 ABC

on

  • 5,514 views

EJB3 ABC

EJB3 ABC
Japanese

Statistics

Views

Total Views
5,514
Views on SlideShare
5,398
Embed Views
116

Actions

Likes
0
Downloads
0
Comments
0

3 Embeds 116

http://d.hatena.ne.jp 68
http://bose.techie.jp 40
http://www.slideshare.net 8

Accessibility

Categories

Upload Details

Uploaded via as Adobe PDF

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

EJB3 ABC EJB3 ABC Presentation Transcript

  • 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を学ぼう
  • 武田正英