Submit Search
Upload
Beginning Java EE 6 勉強会(3) #bje_study
•
Download as PPTX, PDF
•
12 likes
•
3,592 views
I
inatus
Follow
JavaEE 6のEJB (Enterprise JavaBean) についての説明
Read less
Read more
Slideshow view
Report
Share
Slideshow view
Report
Share
1 of 57
Download now
Recommended
Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_study
George Okada
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Masato Kawamura
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Java EEの話(仮)
Java EEの話(仮)
Satoshi Kubo
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
Recommended
Beginning Java EE 6 勉強会(4) #bje_study
Beginning Java EE 6 勉強会(4) #bje_study
George Okada
Beginning Java EE 6 勉強会(1) #bje_study
Beginning Java EE 6 勉強会(1) #bje_study
Toshiaki Maki
Beginning Java EE 6 勉強会(6) #bje_study
Beginning Java EE 6 勉強会(6) #bje_study
Masato Kawamura
Java Batch 仕様 (Public Review時点)
Java Batch 仕様 (Public Review時点)
Norito Agetsuma
Java EE8 Report
Java EE8 Report
Norito Agetsuma
Java EEの話(仮)
Java EEの話(仮)
Satoshi Kubo
Java EE パフォーマンスTips #glassfish_jp
Java EE パフォーマンスTips #glassfish_jp
Norito Agetsuma
Spring3.1概要 データアクセスとトランザクション処理
Spring3.1概要 データアクセスとトランザクション処理
土岐 孝平
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
賢 秋穂
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
Nobuhiro Sue
JPA説明会
JPA説明会
Ryo Asai
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Norito Agetsuma
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Mikiya Okuno
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
はじめてのJPA
はじめてのJPA
kawaba
Java EE 再入門
Java EE 再入門
minazou67
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2
Hirofumi Iwasaki
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
Java SE 再入門
Java SE 再入門
minazou67
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
Makoto Haruyama
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_study
Kinji Akemine
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
ikeyat
More Related Content
What's hot
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
Jun Inose
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
賢 秋穂
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
Nobuhiro Sue
JPA説明会
JPA説明会
Ryo Asai
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
Hiroyuki Ohnaka
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
Norito Agetsuma
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Mikiya Okuno
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
Masatoshi Tada
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
Norito Agetsuma
はじめてのJPA
はじめてのJPA
kawaba
Java EE 再入門
Java EE 再入門
minazou67
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
Ryusuke Kajiyama
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Y Watanabe
Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2
Hirofumi Iwasaki
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Mitsuru Katoh
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Norito Agetsuma
Java SE 再入門
Java SE 再入門
minazou67
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
Makoto Haruyama
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Hiroaki NAKADA
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Chihiro Ito
What's hot
(20)
20160215 04 java ee7徹底入門 jbatch
20160215 04 java ee7徹底入門 jbatch
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
20160521 大規模映像配信サービスの Java8による全面リニューアルの裏側
ぽんぽこバレー勉強会 20120427
ぽんぽこバレー勉強会 20120427
JPA説明会
JPA説明会
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne 2015 報告会 @ 東京 「About MVC 1.0 & JSON-P」
JavaOne2015報告会 Java EE アップデート #j1jp
JavaOne2015報告会 Java EE アップデート #j1jp
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
What's New in MySQL 5.7 Optimizer @MySQL User Conference Tokyo 2015
Java EEハンズオン資料 JJUG CCC 2015 Fall
Java EEハンズオン資料 JJUG CCC 2015 Fall
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
CDI2.0アップデート&クックブック #JavaDayTokyo #jdt2016_4c
はじめてのJPA
はじめてのJPA
Java EE 再入門
Java EE 再入門
20140518 JJUG MySQL Clsuter as NoSQL
20140518 JJUG MySQL Clsuter as NoSQL
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
SpringMVCとmixer2で作るWebアプリのキホン 2013-01-24 Spring勉強会 #jsug
Java EE 7技術アップデート & 逆引き JSF 2.2
Java EE 7技術アップデート & 逆引き JSF 2.2
XPages 開発 Tips 百連発
XPages 開発 Tips 百連発
Jbatch実践入門 #jdt2015
Jbatch実践入門 #jdt2015
Java SE 再入門
Java SE 再入門
初心者エンジニアの システム構築 失敗談
初心者エンジニアの システム構築 失敗談
WildFly Swarmではじめる「パーツとしてのJavaEE」
WildFly Swarmではじめる「パーツとしてのJavaEE」
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Javaはどのように動くのか~スライドでわかるJVMの仕組み
Viewers also liked
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_study
Kinji Akemine
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
ikeyat
Legend of Java Concurrency/Parallelism
Legend of Java Concurrency/Parallelism
Yuichi Sakuraba
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_study
zuisener .
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
kimulla
ストリーミングのげんざい
ストリーミングのげんざい
Tetsuya Morimoto
Viewers also liked
(6)
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(2) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
Beginning Java EE 6 勉強会(7) #bje_study
Legend of Java Concurrency/Parallelism
Legend of Java Concurrency/Parallelism
Beginning Java EE 6 勉強会(5) #bje_study
Beginning Java EE 6 勉強会(5) #bje_study
Spring Framework ふりかえりと4.3新機能
Spring Framework ふりかえりと4.3新機能
ストリーミングのげんざい
ストリーミングのげんざい
Similar to Beginning Java EE 6 勉強会(3) #bje_study
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
Norito Agetsuma
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
zuisener .
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
zuisener .
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIA
kyon mm
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
Tsutomu Chikuba
Maven2 plugin
Maven2 plugin
Funato Takashi
Java仮想マシンの実装技術
Java仮想マシンの実装技術
Kiyokuni Kawachiya
R5 3 type annotation
R5 3 type annotation
EIICHI KIMURA
Jsug 20160422 slides
Jsug 20160422 slides
Yuichi Hasegawa
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
normalian
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Tokuhiro Matsuno
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Akira Shimosako
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
Yuji Kubota
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Masanori Oobayashi
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Yu Nobuoka
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Takayuki Konishi
Cve 2013-0422
Cve 2013-0422
abend_cve_9999_0001
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
tamtam180
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
Takakiyo Tanaka
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Masatoshi Tada
Similar to Beginning Java EE 6 勉強会(3) #bje_study
(20)
JJUG 11月ナイトセミナー CDIをはじめよう
JJUG 11月ナイトセミナー CDIをはじめよう
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信up
Beginning java ee 6 13章メッセージ通信
Beginning java ee 6 13章メッセージ通信
Functional Testing in #YAPCASIA
Functional Testing in #YAPCASIA
ビジネス的に高価値なアジャイルテスト
ビジネス的に高価値なアジャイルテスト
Maven2 plugin
Maven2 plugin
Java仮想マシンの実装技術
Java仮想マシンの実装技術
R5 3 type annotation
R5 3 type annotation
Jsug 20160422 slides
Jsug 20160422 slides
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
基礎から見直す ASP.NET MVC の単体テスト自動化方法 ~ Windows Azure 関連もあるかも~
Javaで1から10まで書いた話(sanitized)
Javaで1から10まで書いた話(sanitized)
Groovyで楽にSQLを実行してみよう
Groovyで楽にSQLを実行してみよう
Head toward Java 16 (Night Seminar Edition)
Head toward Java 16 (Night Seminar Edition)
WTM53 phpフレームワーク いまさらcodeigniter
WTM53 phpフレームワーク いまさらcodeigniter
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Java による Web アプリケーションのプロトタイプのために最近使っている構成
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Javaone2012 BoF2-02 コンテナでテストをまわせ!Java EEへの自動テストの導入
Cve 2013-0422
Cve 2013-0422
jjugccc2018 app review postmortem
jjugccc2018 app review postmortem
ついに始まるJava EE 7時代のアプリケーション開発
ついに始まるJava EE 7時代のアプリケーション開発
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Java EE 8先取り!MVC 1.0入門 [EDR2対応版] 2015-10-10更新
Beginning Java EE 6 勉強会(3) #bje_study
1.
Beginning JavaEE6 勉強会(3)
-Enterprise JavaBean- Hiroki Inagaki @inatus http://github.com/inatus
2.
目次 6.
Enterprise JavaBeans 7. セッションBeanとタイマーサービス 8. コールバックとインターセプタ 9. トランザクションとセキュリティ 5/16/2012 Beginning JavaEE6 勉強会(1) 2
3.
第6章
Enterprise JavaBeans 5/16/2012 Beginning JavaEE6 勉強会(3) 3
4.
EJBとは トランザクションとセキュリティを扱うサーバ
サイドのコンポーネント ビジネスロジックをカプセル化 メッセージング、スケジューリング、リモート アクセス、SOAP/REST、DI、AOPを扱う JDBC、JavaMail、JPA、JTA、JMS、JAAS、 JNDI、RMIと統合 5/16/2012 Beginning JavaEE6 勉強会(1) 4
5.
第7章
セッションBeanとタ イマーサービス 5/16/2012 Beginning JavaEE6 勉強会(3) 5
6.
セッションBean EJBの核 ビシネスロジックをカプセル化する
以下の種類がある ステートレス 対話状態を保持しない 1つのメソッドで完結 ステートフル 対話状態を保持する 複数のメソッドにまたがって利用 シングルトン 複数のクライアントが同時にアクセス 5/16/2012 Beginning JavaEE6 勉強会(1) 6
7.
ステートレスBean 最も良く使用される 単一のメソッド呼び出しでタスクが完了するビ
ジネスプロセスを実行する 一定の数のインスタンスがプール内に格納され る 複数のクライアント間で再利用できるため、最も効 率が良い EJBコンテナ インスタンスプール インスタン ス インスタン ス クライアント インスタン クライアント ス 5/16/2012 Beginning JavaEE6 勉強会(3) 7
8.
ステートレスBean @Stateless public
class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; public Member findMemberById(Long id) { return em.find(Member.class, id); } public Member createMember(Member member) { em.persist(member); return member; } } 5/16/2012 Beginning JavaEE6 勉強会(3) 8
9.
ステートフルBean 前のステップの状態に依存する複数ステップを
含むタスクに使用できる 例えば、ショッピングサイトのように、商品を 選択してから決済が完了するまでショッピング カートの中身が保持されなければならないと いった場合に使用する Beanインスタンスとクライアントは一対一で紐 付けられる EJBコンテナ ①要求 ②生成 ③呼出し インスタン ス インスタン クライアント ス クライアント 5/16/2012 Beginning JavaEE6 勉強会(3) 9
10.
ステートフルBean @Stateful @StatefulTimeout(value = 15,
unit = TimeUnit.MINUTES) public class CartEJB { private Set<Item> cart = new LinkedHashSet<Item>(); public void addItem(Item item) { cart.add(item); } public void removeItem(Item item) { cart.remove(item); } } 5/16/2012 Beginning JavaEE6 勉強会(3) 10
11.
シングルトンBean アプリケーションごとに1つのインスタンスが
生成される 各クライアントは1つのインスタンスを共有す る 同時実行の制御を行う必要がある 初期化の次期や、複数のシングルトンBeanを初 期化する順序を考慮する必要がある EJBコンテナ インスタン クライアント ス クライアント クライアント 5/16/2012 Beginning JavaEE6 勉強会(3) 11
12.
シングルトンBean @Singleton public class CacheEJB
{ private Map<Long, Object> cache = new HashMap<Long, Object>(); public void addToCache(Long id, Object target) { if (!cache.containsKey(id)) { cache.put(id, target); } } public void removeFromCache(Long id) { cache.remove(id); } } 5/16/2012 Beginning JavaEE6 勉強会(3) 12
13.
セッションBeanモデル
Beanクラスの定義にインタフェースを用いる方 法と用いない方法がある リモート・インタフェース EJBコンテナが動作しているJVMインスタンスの外部にクラ イアントが存在する場合に使用 RMIを利用する ローカル・インタフェース 同じJVM内の別のEJBやWebコンポーネントを呼び出す インタフェースのないビュー ローカルビューの一種 すべてのパブリックメソッドをローカルに公開する 5/16/2012 Beginning JavaEE6 勉強会(3) 13
14.
セッションBeanモデル
クライアント アプリケーションサーバ1 アプリケーションサーバ2 EJBコンテナ EJBコンテナ Bea Bea Bea Bea n n リモート n n ローカル EJBコンテナ EJBコンテナ コンポーネント コンポーネント 5/16/2012 Beginning JavaEE6 勉強会(3) 14
15.
ローカル&リモート・インタフェース @Local public interface MemberEJBLocal
{ Member findMemberById(Long id); } @Remote public interface MemberEJBRemote { Member createMember(Member member); } @Stateless public class MemberEJB implements MemberEJBLocal, MemberEJBRemote { ... } 5/9/2012 Beginning JavaEE6 勉強会(3) 15
16.
インタフェースのないビュー @Stateless @LocalBean public class MemberEJB
{ ... } 5/9/2012 Beginning JavaEE6 勉強会(3) 16
17.
クライアントからのBean呼び出し
リモート&ローカル・インタフェースの場合 インタフェースオブジェクトに@EJBでDIする @EJB MemberEJBRemote memberEJBRemote; @EJB MemberEJBLocal memberEJBLocal; インタフェースのないビューの場合 クラスのオブジェクトに@EJBでDIする @EJB MemberEJB memberEJB; 5/9/2012 Beginning JavaEE6 勉強会(3) 17
18.
DI(依存性注入) 以下のような方法がある @EJB
EJBのリモート&ローカル・インタフェース、イン タフェースのないビューの参照を注入 @PersistenceContext, @PersistenceUnit EntityManager, EntityManagerFactoryの依存関係 を表す @WebServiceRef Webサービスへの参照を注入 @Resource JDBCデータソース、セッション・コンテキスト、 ユーザ・トランザクション等の参照を注入 5/9/2012 Beginning JavaEE6 勉強会(3) 18
19.
非同期呼び出し 印刷やメール送信などの処理が終了するまで待
たずに、続く処理を続行する セッションBeanのメソッドまたはクラスに @Asynchronousを付加する 非同期呼び出しからの戻り値を用いる場合は戻 り値の型にFuture<V>を使用する 5/9/2012 Beginning JavaEE6 勉強会(3) 19
20.
非同期呼び出し @Stateless @Asynchronous public class OrderEJB
{ public void sendEmailConfirmation(Order order) { // Emailの送信処理 } public void printOrder(Order order) { // 注文書の印刷処理 } public Future<Integer> CalcShippingCost( Order order) { int shippingCost = 0; // 送料計算処理 return AsyncResult<Integer>(shippingCost); } 5/9/2012 Beginning JavaEE6 勉強会(3) 20
21.
タイマサービス
特定の時間に特定の処理を起動する 毎晩在庫レポートを出力 毎月売上を集計 毎年ユーザの誕生日にメールを送信 起動対象のメソッドに@Scheduleアノテーショ ンとタイマを設定 5/9/2012 Beginning JavaEE6 勉強会(3) 21
22.
タイマサービス @Stateless public class TimerEJB
{ // 毎日0時0分0秒に実行 @Schedule(second = "0", minute = "0", hour = "0") public void outputReport() { // 日次レポート出力処理 } // 毎月の最終日の22時に実行 @Schedule(hour = "22", dayOfMonth = "Last") public void addUpSales() { // 月次の売上を集計 } } 5/9/2012 Beginning JavaEE6 勉強会(3) 22
23.
タイマサービス @Stateless public class MemberEJB
{ @Resource TimerService timerService; // Memberの誕生日にタイマを設定 public Member createMember(Member member) { em.persist(member); ScheduleExpression membersBirthday = new ScheduleExpression() .dayOfMonth(member.getBirthDay()) .month(member.getBirthMonth()); timerService.createCalendarTimer (membersBirthday, new TimerConfig(member, true)); return member; } // 次頁へ続く 5/9/2012 Beginning JavaEE6 勉強会(3) 23
24.
タイマサービス // 前頁から続き
// タイマが切れたときにEメールを送信 @Timeout public void sendBirthdayEmail(Timer timer) { Member member = (Member) timer.getInfo(); // Eメール送信処理 } } 5/9/2012 Beginning JavaEE6 勉強会(3) 24
25.
第8章
コールバックと インターセプタ 5/9/2012 Beginning JavaEE6 勉強会(3) 25
26.
コールバックとインターセプタ
コールバック Beanの状態遷移が起きる際に任意のメソッドを呼び 出すこと Beanごとに設定する インターセプタ AOPと同様の機能 Beanのメソッドを呼び出す際に、別のメソッドを呼 び出し割り込み処理を行う 複数のBeanに対して横断的に設定できる 5/9/2012 Beginning JavaEE6 勉強会(3) 26
27.
コールバック
ステートレスBean、シングルトンBeanのライフ サイクル 存在しない状態 1.インスタンス生成 5.@PreDestroy呼出し 2.依存性注入 3.@PostConstruct呼出し 準備状態 4.メソッド呼出し 5/9/2012 Beginning JavaEE6 勉強会(3) 27
28.
コールバック
ステートフルBeanのライフサイクル 7.タイムアウト 存在しない状態 8.@Removeおよび 1.インスタンス生成 @PreDestroy呼出し 2.依存性注入 3.@PostConstruct 呼出し 6.@PostActive呼出し 準備状態 非活性化状態 5.@PrePassive呼出し 4.メソッド呼出し 5/9/2012 Beginning JavaEE6 勉強会(3) 28
29.
コールバック @Stateful public class CartEJB
{ @Resource private DataSource ds; private Connection conn; @PostConstruct @PostActivate private void init() throws SQLException { conn = ds.getConnection(); } @PreDestroy @PrePassivate private void close() throws SQLException { conn.close(); } 5/9/2012 Beginning JavaEE6 勉強会(3) 29
30.
コールバックメソッド
引数なしのvoidメソッドであること チェック例外のスロー不可、実行時例外は可 アクセス修飾子はすべて使用可 static、finalは不可 1メソッドに複数のアノテーションを指定可 同じアノテーションを2度以上指定不可 5/9/2012 Beginning JavaEE6 勉強会(3) 30
31.
インターセプタ
AroundInvokeインターセプタ Beanごとに適用 Bean内のすべてのメソッドに対して適用される クラス・インターセプタ 複数のBeanに横断的に適用 インターセプト用のクラスを定義 ライフサイクル・インターセプタ コールバックの機能を複数のBeanに横断的に適用 5/9/2012 Beginning JavaEE6 勉強会(3) 31
32.
AroundInvokeインターセプタ @Stateless public class MemberEJB
{ public Member findMemberById(Long id) { ... } public Member createMember(Member member) { ... } @AroundInvoke private Object recordLog(InvocationContext ic) throws Exception { // メソッド呼び出し前ログ書き込み処理 try { return ic.proceed(); finally { // メソッド呼び出しログ書き込み処理 { 5/9/2012 Beginning JavaEE6 勉強会(3) 32
33.
AroundInvokeインターセプタの定義 @AroudInvoke @AroudInvoke Object <メソッド名>(InvocationContext ic)
ic) Object <メソッド名>(InvocationContext throws Exception; throws Exception; 引数はjavax.interceptor.InvocationContext型 戻り値はObject型 チェック例外をスロー可 アクセス修飾子はすべて使用可 static、finalは不可 proceedメソッドでビジネスメソッドを呼び出 し、結果を返す ただしチェーン内に次のインターセプタメソッドが ある場合はそのインターセプタメソッドを呼び出す 5/9/2012 Beginning JavaEE6 勉強会(3) 33
34.
クラス・インターセプタ public class LoggingInterceptor
{ @AroundInvoke private Object recordLog(InvocationContext ic) throws Exception { // メソッド呼び出し前ログ書き込み処理 try { return ic.proceed(); finally { // メソッド呼び出しログ書き込み処理 { { 5/9/2012 Beginning JavaEE6 勉強会(3) 34
35.
クラス・インターセプタ @Stateless public class MemberEJB
{ @Interceptors(LoggingInterceptor.class) public Member findMemberById(Long id) { ... } public Member createMember(Member member) { ... } } 5/9/2012 Beginning JavaEE6 勉強会(3) 35
36.
クラス・インターセプタ インターセプタとする任意のクラスのメソッド
に@AroundInvokeアノテーションを使用 インターセプタを適用したいメソッドまたはク ラスに@Interceptorsアノテーションを使用 メソッドに指定すると指定したメソッドのみイン ターセプタを適用する クラスに指定するとクラス内のすべてのメソッドに インターセプタを適用する 特定のメソッドのみをインターセプタ適用外とする場合は @ExcludeClassInterceptorsアノテーションを用いる 5/9/2012 Beginning JavaEE6 勉強会(3) 36
37.
ライフサイクル・インターセプタ public class LoggingInterceptor
{ @PostConstruct private void init() { // 初期化処理 { { 5/9/2012 Beginning JavaEE6 勉強会(3) 37
38.
ライフサイクル・インターセプタ @Stateless @Interceptors(LoggingInterceptor.class) public class MemberEJB
{ public Member findMemberById(Long id) { ... } public Member createMember(Member member) { ... } } 5/9/2012 Beginning JavaEE6 勉強会(3) 38
39.
ライフサイクル・インターセプタ Beanのライフサイクルに応じたコールバックを
複数のBeanを横断的に適用可能 @PostConstruct, @PrePassivate, @PostActiva te, @PreDestroyが指定可能 インターセプタを適用したいクラスに @Interceptorsアノテーションを使用 5/9/2012 Beginning JavaEE6 勉強会(3) 39
40.
第9章
トランザクションと セキュリティ 5/9/2012 Beginning JavaEE6 勉強会(3) 40
41.
EJBでのトランザクションサポート
コンテナ管理トランザクション(CMT) トランザクションの開始、コミット、ロールバック をコンテナが自動的に管理 なにも設定しない時のデフォルトの動作 Bean管理トランザクション(BMT) トランザクションの開始、コミット、ロールバック をBean内に明示的に記述 2012/5/16 Beginning JavaEE6 勉強会(3) 41
42.
コンテナ管理トランザクション(CMT) @Stateless public
class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; public Member createMember(Member member) { em.persist(member); return member; } } 5/9/2012 Beginning JavaEE6 勉強会(3) 42
43.
CMTの属性
クライアントがトランザクション対応のメソッ ドを呼び出すときに、そのメソッドがトランザ クション内で呼び出されているか否かによっ て、以下の4つうちどの動作をするかを設定で きる コンテナがクライアントのトランザクションを利用 する 新しいトランザクションを開始してメソッドを実行 する トランザクションを使用しないでメソッドを実行す る 例外をスローする クラスやメソッドに@TransactionAttributeを 5/9/2012 Beginning JavaEE6 勉強会(3) 43
44.
CMTの属性 CMT属性
トランザクション内でない トランザクション内 REQUIRED 新しいトランザクション 呼出し元のトランザクション REQUIRED_NEW 新しいトランザクション 新しいトランザクション SUPPORTS トランザクションを使用し 呼出し元のトランザクション ない MANDATORY 例外 呼出し元のトランザクション NOT_SUPPORTED トランザクションを使用し トランザクションを使用しな ない い NEVER トランザクションを使用し 例外 ない 5/9/2012 Beginning JavaEE6 勉強会(3) 44
45.
CMTの属性 @Stateless @TransactionAttribute
(TransactionAttributeType.SUPPORTS) public class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; public Member createMember(Member member) { em.persist(member); return member; } } 5/9/2012 Beginning JavaEE6 勉強会(3) 45
46.
CMTのロールバック デフォルトでは非チェック例外が発生した場合
のみトランザクションがロールバックされる 明示的にトランザクションをロールバックする にはDIによりSessionContextを取得し setRollBackOnly()メソッドを呼び出す 5/9/2012 Beginning JavaEE6 勉強会(3) 46
47.
CMTのロールバック @Stateless public
class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; @Resource private SessionContext ctx; public Member createMember(Member member) { if (member.isValidMember) { ctx.setRollBackOnly(); } em.persist(member); return member; } } 5/9/2012 Beginning JavaEE6 勉強会(3) 47
48.
例外処理 デフォルトでは非チェック例外が発生した場合
のみトランザクションがロールバックする ユーザ例外クラスに@ApplicationExceptionを 付加することでチェック例外/非チェック例外 に関わらず、ロールバックの有無を設定可能 5/9/2012 Beginning JavaEE6 勉強会(3) 48
49.
例外処理 @Stateless public
class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; @Resource private SessionContext ctx; public Member createMember(Member member) throws MemberInvalidException { if (member.isValidMember) { throw new MemberInvalidException(); } em.persist(member); return member; } } 5/9/2012 Beginning JavaEE6 勉強会(3) 49
50.
例外処理 @ApplicationException(rollback =
true) public class MemberInvalidException extends Exception { public MemberInvalidException() { } public MemberInvalidException(String message) { super(message); } } 5/9/2012 Beginning JavaEE6 勉強会(3) 50
51.
Bean管理トランザクション(BMT) Beanのメソッド内に明示的にトランザクション
の開始・コミット・ロールバックを記述 @TransactionManagementアノテーションをBean クラスに付加するとBean管理のトランザクショ ンとなる DIによりUserTransactionのインスタンスを生 成し、begin(), commit(), rollback()メソッ ドによりトランザクションの操作を行う 5/9/2012 Beginning JavaEE6 勉強会(3) 51
52.
Bean管理トランザクション(BMT) @Stateless @TransactionManagement(
TransactionManagementType.BEAN) public class MemberEJB { @PersistenceContext(unitName = "sample") private EntityManager em; @Resource private UserTransaction ut; public Member createMember(Member member) { ut.begin(); em.persist(member); if (member.isValidMember) { ut.rollback(); } ut.commit(); return member; } 5/9/2012 Beginning JavaEE6 勉強会(3) 52
53.
セキュリティ プリンシパルのロールごとにBean全体または一
部メソッドのアクセスを制御することができる プリンシパル 認証を行ったユーザのユーザ名 making kjstylepp inatus など ロール プリンシパルごとに割り当てられるグループ名 Employee Admin User など 5/9/2012 Beginning JavaEE6 勉強会(3) 53
54.
宣言型のセキュリティ アノテーションをBeanクラスまたはメソッドに
付加し、アクセスを制御する @PermitAll すべてのロールにアクセス許可を与える @DenyAll すべてのロールからのアクセスを拒否する 特定の環境でメソッドへのアクセスを拒否する場合 などに利用する @RollsAllowed リストに指定されているロールにアクセス許可を与 える 5/9/2012 Beginning JavaEE6 勉強会(3) 54
55.
宣言型のセキュリティ @Stateless @RolesAllowed({“user”,
“employee”, “admin”}) public class MemberEJB { @PermitAll public Member findMemberById(Long id) { ... } public Member createMember(Member member) { ... } @RolesAllowed(“admin”) public void deleteMember(Member member) { ... } @DenyAll public Member findConfidentialMember(Long id) { ... } 5/9/2012 Beginning JavaEE6 勉強会(3) 55
56.
プログラムによるセキュリティ
以下の場合に用いる メソッド内のコードのブロックにアクセスを許可ま たは拒否をする場合 個人へのアクセス許可または拒否をする場合 DIでSessionContextのインスタンスを生成し、 以下のメソッドを用いる isCallerInRole():指定したロールであるかを判定 しboolean値を返す getCallerPrincipal():Principalオブジェクト返 す Principal.getName()でプリンシパルの名前を取得可能 5/9/2012 Beginning JavaEE6 勉強会(3) 56
57.
宣言型のセキュリティ @Stateless @RolesAllowed({“user”,
“employee”, “admin”}) public class MemberEJB { @resource SessionContext ctx; public Member findMemberById(Long id) { if (ctx.isCallerInRole(“user”) { // 本の検索処理 } if (ctx.getCallerPrincipal().getName() .equals(“inatus”) { return findConfidentialMember(id); } ... } 5/9/2012 Beginning JavaEE6 勉強会(3) 57
Download now