36
拡大するCDI JavaOne報告会2012 上妻 宜人 (あげつま のりと)

Lt agetsuma 拡大するcdi

Embed Size (px)

DESCRIPTION

JavaOne報告会2012 LT

Citation preview

Page 1: Lt agetsuma 拡大するcdi

拡大するCDIJavaOne報告会2012

上妻 宜人 (あげつま のりと)

Page 2: Lt agetsuma 拡大するcdi

自己紹介

● とあるシステムインテグレータに勤務● 仕事内容

● 動かないstruts-config.xmlを紐解く作業● Strutsのタグライブラリに溺れた人を助ける● 社内のJava開発サポート

Page 3: Lt agetsuma 拡大するcdi

CDIって何だ?

http://blog.taigacompany.com/blog/sustainability-business-life-environment/can-you-spot-these-common-characteristics-of-sustainable-innovation-cultures

Page 4: Lt agetsuma 拡大するcdi

好きなクラスを書いて

public class GreetingService { public void hello() { System.out.println(“JavaOne報告会2012”); }}

Page 5: Lt agetsuma 拡大するcdi

インジェクション (コンテナ管理クラスが対象)

@WebServlet(/hello)public class HelloServlet extends HttpServlet {

@Inject GreetingService greetingService;

public class GreetingService { public void hello() { System.out.println(“JavaOne報告会2012”); }}

Page 6: Lt agetsuma 拡大するcdi

CDIは色々と多機能

● DIのサポート - @Inject● インターセプタのサポート - @InterceptorBinding● スコープのサポート - @RequestScoped など● EL式(JSP/JSF)からの参照 - @Named

アノテーションを付けるだけで、様々な機能が使える!

Page 7: Lt agetsuma 拡大するcdi

あれ?どこかで見たような...

http://communicatalyst.blogspot.jp/2012/04/questions-upon-questions.html

Page 8: Lt agetsuma 拡大するcdi

● DIのサポート● インターセプタのサポート

● スコープのサポート● EL式(JSP/JSF)からの参照 @javax.faces.bean

パッケージ@ManagedBeanなど

@EJB/(@Interceptor)

CDIの機能自体は他の既存仕様にもある

Page 9: Lt agetsuma 拡大するcdi

CDIの目的

Page 10: Lt agetsuma 拡大するcdi

今までの技術には一丁一端があった

DI インターセプタ スコープ EL式参照

EJB3.1 ○ ○ × ○JSF2.x

Managed Bean △ × ○ ○CDI1.0

Page 11: Lt agetsuma 拡大するcdi

DI インターセプタ スコープ EL式参照

EJB3.1 ○ ○ × ○JSF2.x

Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○

色んな技術の良いところを組み合わせた

Page 12: Lt agetsuma 拡大するcdi

万能で便利なCDIですが

Page 13: Lt agetsuma 拡大するcdi

Java EE 仕様のなかで機能に重複が生じてきたのも事実

Page 14: Lt agetsuma 拡大するcdi

Java EE 7で始まる重複機能の整理

Page 15: Lt agetsuma 拡大するcdi

@javax.faces.bean.ManagedBean

orCDI @javax.inject.Named

JSF

Java EE 6の同じような機能

Page 16: Lt agetsuma 拡大するcdi

stackoverflowでも多くの質問がある

Page 17: Lt agetsuma 拡大するcdi

JSF2.2 (Java EE 7)

JSF ManagedBeanの仕様書に注記が付いている

Page 18: Lt agetsuma 拡大するcdi

JSF2.2 (Java EE 7)

(意訳)これらのアノテーションはJava EEに含まれる他仕様と機能が重複しているため、将来的に非推奨になる可能性があります。

Page 19: Lt agetsuma 拡大するcdi

CDIがない環境ではJSFは使えなくなるの?

Page 20: Lt agetsuma 拡大するcdi

JSFのJIRAで議論を確認。

http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-976

Page 21: Lt agetsuma 拡大するcdi

強調されていたこと

Page 22: Lt agetsuma 拡大するcdi

Jacob Korherrさん@JSF Expert GroupMember

● JSFのマネージドBeanを完全に削除するわけじゃない● もちろんこれからもサポートを続けていく● 今後追加される新機能を使いたい人はCDIを使って欲しい

(意訳)

Page 23: Lt agetsuma 拡大するcdi

これからも使い続けられる

Page 24: Lt agetsuma 拡大するcdi

DI インターセプタ スコープ EL式参照

EJB3.x ○ ○ × ○JSF2.x

Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○

将来的に非推奨になる予定

JSFのManaged Beanは縮小傾向へ

Page 25: Lt agetsuma 拡大するcdi

DI インターセプタ スコープ EL式参照

EJB3.x ○ ○ × ○JSF2.x

Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○

次なるターゲット。伝統のEJB。

将来的に非推奨になる予定

Page 26: Lt agetsuma 拡大するcdi

http://www.mod.go.jp/gsdf/mae/13b/bomb.html

EJBだって?あのXMLメンテナンスは

不発弾処理みたいなものだ。

Page 27: Lt agetsuma 拡大するcdi

今のEJBはそんなに難しくない

@Stalesspublic class BankService { public void 振り込み() { // Aさんの口座から100円引き Aさん.debit(100);

// Bさんの口座に100円足す Bさん.receive(100); }}

これ付けるだけでEJBになるトランザクション管理に便利

Page 28: Lt agetsuma 拡大するcdi

CDIにない、便利な機能がEJBにはある。

Page 29: Lt agetsuma 拡大するcdi

CMT DI インターセプタ スコープ EL式参照

EJB3.x ◎ ○ ○ × ○

JSF2.xManaged Bean × △ × ○ ○

CDI1.0 × ○ ○ ○ ○

コンテナ管理トランザクション(Container Managedment Transaction)

Page 30: Lt agetsuma 拡大するcdi

そんなEJBに危機が訪れた

Page 31: Lt agetsuma 拡大するcdi

写真 http://jaxconf.com/2011/keynotes/

Linda DeMichielさん@Java EE7 Spec Lead

● Java EEの色んなBean機能は広く使える方が便利● CDIインターセプタの機構を使って、もっとコンテナ管理 トランザクションが広く使えるようにしようと思う。

(意訳)

Page 32: Lt agetsuma 拡大するcdi

@Transactional( rollbackOn={SQLException.class}, dontRollbackOn={SQLWarning.class}) public class ShoppingCart {...}

@TransactionalでEJBいらず

● rollbackOn : ロールバックする例外● dontRollBackOn : ロールバックしない例外

Page 33: Lt agetsuma 拡大するcdi

この機能が盛り込まれると

Page 34: Lt agetsuma 拡大するcdi

CMT DI インターセプタ スコープ EL式参照

EJB3.x ◎ ○ ○ × ○

JSF2.xManaged Bean × △ × ○ ○

CDI1.1(+JTA1.2) ◎ ○ ○ ○ ○

基本的な機能はCDIでだいぶ網羅

将来的に非推奨になる予定

Page 35: Lt agetsuma 拡大するcdi

Java EEの主要コンポーネント

EJB CDI Bean

Page 36: Lt agetsuma 拡大するcdi

ご清聴ありがとうございました