狠狠撸
Submit Search
3.Java EE7 徹底入門 CDI&EJB
?
Download as PPTX, PDF
?
8 likes
?
2,993 views
Tsunenaga Hanyuda
2016/02/15 JJUG の発表資料です
Read less
Read more
1 of 44
Download now
Downloaded 43 times
More Related Content
3.Java EE7 徹底入門 CDI&EJB
1.
ビジネスロジック層の開発 CDI & EJB 2016/02/15
JJUG ナイトセミナー #JJUG 2016/02/15 JJUG Night Seminar #JJUG 1 羽生田 恒永
2.
自己紹介 ? 羽生田 恒永(はにゅうだ?つねなが) ?
SIでの開発業を経て、ミドルウェアコンサルタントを してます ? 白猫本 5-6章を担当 2016/02/15 JJUG Night Seminar #JJUG 2
3.
Safe Harbor Statement ?
本資料は私個人の見解であり所属会社の見解を反映したもの ではありません。 ? 本資料の作成にあたっては正確な記述につとめましたが、内容に 対してなんら保証をするものではなく、内容に基づくいかなる運用 結果に関してもいっさいの責任を負いません。 32016/02/15 JJUG Night Seminar #JJUG
4.
排他的な関係ではない ? 本書でCDI or
EJB とか選択とか書いているので排 他的であるような印象を残してしまった部分が あったようです ? 「で、どっちが良いの?」と聞かれることもあり ? 実際には組み合わせで解決するのが良いのかな と思っています 42016/02/15 JJUG Night Seminar #JJUG
5.
言い訳はここまで No Excuse, No
Life. but 52016/02/15 JJUG Night Seminar #JJUG
6.
今日の発表 ? 本の内容をまとめて発表しようかと思ったもののそ こは読んで頂くとして ? 今日は書いてないことを中心に発表しようかと思 います 62016/02/15
JJUG Night Seminar #JJUG
7.
白猫本に書いてあること ? CDI の使い方 –
インジェクションと型解決、定義方法 – イベント処理、ステレオタイプ、プロデューサ/ディスポーザ ? EJB の使い方 – 各種EJB解説 – この先EJBまだ使って…良いんだよね?という行間 ? 今日の話にEJBは出てこないです 72016/02/15 JJUG Night Seminar #JJUG
8.
白猫本に書いてないこと ? CDI コンテナの取り扱い ?
@ConversationScoped ちゃんと書け ? CDI におけるトランザクションの取り扱い ? EJB のテストのところはもうちょっと書けただろ! 82016/02/15 JJUG Night Seminar #JJUG
9.
おさらい Let’s Get Started 92016/02/15
JJUG Night Seminar #JJUG
10.
おさらい::CDIとは何か ? CDI とは何か –
Contexts and Dependency Injection – そもそもDIは「層」をくっつける接着剤 – 必要なオブジェクトを必要なタイミングで提供 2016/02/15 JJUG Night Seminar #JJUG 10
11.
おさらい::スコープ定義 ? POJOにスコープ定義さえあれば@Inject で好きな 箇所でインジェクションできる –
@RequestScoped – @ViewScoped – @SessionScoped – @ApplicationScoped – @ConversationScoped 2016/02/15 JJUG Night Seminar #JJUG 11
12.
おさらい::例 2016/02/15 JJUG Night
Seminar #JJUG 12 @Inject MyBean bean; @RequestScoped public class MyBean { … } サーブレット他 CDIビーン CDI コンテナによるインスタンス化と代入
13.
おさらい::便利 ? CDIは簡単便利 ? 極論するとスコープ定義さえ覚えれば使える ?
EJBと比較すると実装が簡単かつリソースメリットが ありそう ? 使いたい箇所でぱっと使ってさっとお掃除 – これが理想??? 2016/02/15 JJUG Night Seminar #JJUG 13
14.
おさらい::層 ? 層って何 2016/02/15 JJUG
Night Seminar #JJUG 14 アプリケーションサーバ DB Servlet JSP EJB Entity プレゼンテーション層 ?画面処理 業務ロジック層 ?業務処理判断 永続化層 ?データ処理 Web ブラウザ Web サービス 外部メッセージングサービスなど JSF CDI
15.
おさらい::層 ? 実際 2016/02/15 JJUG
Night Seminar #JJUG 15 アプリケーションサーバ DB Servlet JSP EJB Entity プレゼンテーション層 ?画面処理 業務ロジック層 ?業務処理判断 永続化層 ?データ処理 Web ブラウザ Web サービス 外部メッセージングサービスなど JSF CDI
16.
はじめましょう Let’s Get Started,
again 162016/02/15 JJUG Night Seminar #JJUG
17.
白猫本に書いてないこと ? CDI コンテナの取り扱い ?
@ConversationScoped ? トランザクションの取り扱い ? EJB のテスト 172016/02/15 JJUG Night Seminar #JJUG
18.
CDIコンテナ 182016/02/15 JJUG Night
Seminar #JJUG
19.
CDIコンテナ ? よくも悪くも Weld。猫も杓子も
Weld。 ? 自分が開発/運用するアプリケーションサーバで採用 しているWeldのバージョンがどのバージョンなのか、くら いは抑えておかないと死ねます ? 開発Glassfish ? 運用は商用サーバとか ? (感覚ですが)APサーバのバグ当たる前にWeldの バグ当たった方が良いかもしれない、位に思っていた 方が良いと思われます 192016/02/15 JJUG Night Seminar #JJUG
20.
CDIコンテナ ? ちなみに Glassfish
と Oracle WebLogic Serverの Weld採用バージョンはこんな感じ Glassfish/Weld Oralce WebLogic Server/Weld Java EE 6 3.1.2.2 / 1.1.8 12.1.2 / 1.1.10 12.1.3 / 1.1.18 Java EE 7 4.1 / 2.2.2 12.2.1 / 2.2.13 ※羽生田の独自調査による 202016/02/15 JJUG Night Seminar #JJUG
21.
CDIコンテナ ? CDIコンテナへのアクセス用API – CDI –
CDIProvider – BeanManager – Extension 212016/02/15 JJUG Night Seminar #JJUG
22.
CDI ? 取得:CDI.current(); ? BeanManager
の取得元として利用 – CDI.getBeanManager(); – BeanManager は @Inject で取得可能ではある ? CDI.select(MyBean.class).get(); とか – programatic lookup! ? Since: 1.1 222016/02/15 JJUG Night Seminar #JJUG
23.
CDI::小ネタ ? CDI.current().toString(); ? “Weld”
とだけ返ってきた… (glassfish 4.1 / Weld2.2.2) 232016/02/15 JJUG Night Seminar #JJUG
24.
CDIProvider ? CDI.current(); の裏で呼び出されるやつ ?
アプリケーションサーバ側は叩かれたら CDIProviderのインスタンスを返す必要がある ? Since: 1.1 242016/02/15 JJUG Night Seminar #JJUG
25.
BeanManager ? Portable Extension
(chapter#11)で定義されて いる機能の担い手 ? @Inject BeanManager manager; ? CDIビーンに関する拡張操作について実行可能 252016/02/15 JJUG Night Seminar #JJUG
26.
BeanManager::例 ? 特定のCDI限定子を持つCDIビーンについての情報取得例 @Inject BeanManager manager; … Set<Bean<?>>
beans = manager.getBeans( Object.class, new AnnotationLiteral<OreQualifier>(){} ); beans.forEach( b -> log("bean:{name=" + b.getBeanClass().getCanonicalName() + "}") ); 262016/02/15 JJUG Night Seminar #JJUG
27.
BeanManager ? 以下が可能 – コンテナ管理のCDIビーンに関する情報取得 –
CDIビーンの操作(インジェクションポイント、イベント発火、コン テキスト…etc) ? ちょこっと便利に使うのは良いけど、業務アプリケーションで 使い過ぎには注意が必要なのでは、とか思ったり – 過度の使いすぎ ? フレームワーク化 ? 障害時に追えないと か辛すぎる 272016/02/15 JJUG Night Seminar #JJUG
28.
CDIコンテナ::LifeCycleEvents ? CDIコンテナ拡張機能のひとつ ? コンテナ周りの各種イベント(後述)をフックできる ?
作り方 1. javax.enterprise.inject.spi.Extension を実装するクラスを作 成する ? イベントを受け取るにはオブザーバーを使う 2. META-INF/services/javax.enterprise.inject.spi.Extension ファイルに上記クラス名を記載 282016/02/15 JJUG Night Seminar #JJUG
29.
CDIコンテナ::LifeCycleEvents ? 例 public class
ContainerEventsExtension implements Extension { public ContainerEventsExtension(){ log("start container extension..."); } public void beforeBeanDiscovery(@Observes BeforeBeanDiscovery event){ log(“***EVENT***" + event.toString()); } … } 292016/02/15 JJUG Night Seminar #JJUG
30.
CDIコンテナ::LifeCycleEvents ? ライフサイクルイベント – BeforeBeanDiscovery –
AfterTypeDiscovery – AfterBeanDiscovery – AfterDeploymentValidation – BeforeShutdown – ProcessAnnotatedType – ProcessInjectionPoint – ProcessInjectionTarget – ProcessProducer – ProcessBeanAttributes – ProcessBean – ProcessObserverMethod ? 多いよ!!! 302016/02/15 JJUG Night Seminar #JJUG
31.
CDIコンテナ::LifeCycleEvents ? 拡張機能は楽しい ? 以下の人向け –
APサーバや生コンテナに任せて居られない人 – 業務アプリで攻めたい人 ? デザパタとか上に載せたくなる病の人は注意 ? すみませんコンサバなもんでつい 312016/02/15 JJUG Night Seminar #JJUG
32.
CDIコンテナ::雑感 ? CDIコンテナの動き(と言うよりもCDIビーンの管理 状態遷移)は手に取るようには分からない事が 多い気がしてます ? 特に大規模開発してると勝手インジェクションとか 死ぬほどあって制御できないパターンのやつとか ?
なのでCDIビーンの生き様/死に様を手に取るよう にわかるような拡張を考えようかなと思ったり 322016/02/15 JJUG Night Seminar #JJUG
33.
@ConversationScoped 332016/02/15 JJUG Night
Seminar #JJUG
34.
@ConversationScoped ? 自分でスコープ長を定義できる ? begin()
? end() やタイムアウトで指定 ? JSFとは勝手に紐づくけどそれ以外の操作(リダイ レクトとか)には明示的にcidを用いた上で戻って 来ないと、新規のconversationとして扱われてし まう 342016/02/15 JJUG Night Seminar #JJUG
35.
(CDIと)トランザクション 352016/02/15 JJUG Night
Seminar #JJUG
36.
(CDIと)トランザクション ? 言い訳が思いつかない – JTA
1.2 までやり始めると書いてて死ねる ? ので、ここで補足 362016/02/15 JJUG Night Seminar #JJUG
37.
(CDIと)トランザクション ? JTA 1.2
(JSR-907) ? 目指せ EJB CMT からの脱却 ? みんなそんなにEJBが嫌なのか! – と思いつつもUserTransactionなんか書きたくないので、 EJBに依存することさえ無ければこいつ良いヤツなの にって思ってるでしょ 372016/02/15 JJUG Night Seminar #JJUG
38.
(CDIと)トランザクション::これだけ ? javax.transaction パッケージ ?
@Transactional – トランザクション境界の設定 – クラスとメソッドどちらでも – JTA なのでCDIビーンじゃなくてもいける ? Transactional.TxType – トランザクション属性を決める – TransactionAttributeType と同様 382016/02/15 JJUG Night Seminar #JJUG
39.
(CDIと)トランザクション::これだけ ? @TransactionScoped – “現在有効なJTAトランザクション”の実行に合わせたラ イフサイクルを持つもの @Transactional
CDI/EJB DBCDI/EJB tx.begin(); tx.end(); @Transaction Scoped どちらに呼び出されてもインスタンスは同じ ※トランザクションごとに新たに作成される 392016/02/15 JJUG Night Seminar #JJUG
40.
まとめ wrap it up 402016/02/15
JJUG Night Seminar #JJUG
41.
とはいえ ? EJBは時代的にアレだがCDIで何でもかんでもって設 計もどうかなって思う – 密結合させることも必要だし悪くないのだ –
スコープ制御しきれない悪寒。というか実感。 – EJBみたいにプールが欲しい時があって本末転倒感 ? EJBに任せてもいい処理があるのではないか – でも@TransactionScopedはちょっと良いな 412016/02/15 JJUG Night Seminar #JJUG
42.
最近はこう考えている ? CDIが本格進出してきたことでフリーダムになってしまっ た印象 – アイツが来るまでは村は平和だったんじゃ!的な ?
CDI + EJB でいいよね? – 実際案件に触れているとそうしているお客様が増えてきて いる気がする – 悩んでいるところには悩まないように簡素に実装できるとい う意味で推し 422016/02/15 JJUG Night Seminar #JJUG
43.
この領域の残念なところ ? フリーダム ? アンチパターンが多くない(ので集めたい) –
使いすぎ良くない、程度 ? 本編で少し触れましたが多量のインジェクションは止めましょう – 2回ほど見かけました。Oracle WebLogic Server が死にかけてた – 大規模開発現場での設計者が意図しないインジェクション数 – かといってフレームワークで制御ってのも – 設計でカバー?うーん… 432016/02/15 JJUG Night Seminar #JJUG
44.
感想など ? 書けていないこと沢山ありました ? ちょくちょくどこかで追撃できればと思います ?
振り返れば楽しかったです 442016/02/15 JJUG Night Seminar #JJUG
Download