Upload
norito-agetsuma
View
1.293
Download
0
Embed Size (px)
DESCRIPTION
JavaOne報告会2012 LT
Citation preview
拡大するCDIJavaOne報告会2012
上妻 宜人 (あげつま のりと)
自己紹介
● とあるシステムインテグレータに勤務● 仕事内容
● 動かないstruts-config.xmlを紐解く作業● Strutsのタグライブラリに溺れた人を助ける● 社内のJava開発サポート
CDIって何だ?
http://blog.taigacompany.com/blog/sustainability-business-life-environment/can-you-spot-these-common-characteristics-of-sustainable-innovation-cultures
好きなクラスを書いて
public class GreetingService { public void hello() { System.out.println(“JavaOne報告会2012”); }}
インジェクション (コンテナ管理クラスが対象)
@WebServlet(/hello)public class HelloServlet extends HttpServlet {
@Inject GreetingService greetingService;
public class GreetingService { public void hello() { System.out.println(“JavaOne報告会2012”); }}
CDIは色々と多機能
● DIのサポート - @Inject● インターセプタのサポート - @InterceptorBinding● スコープのサポート - @RequestScoped など● EL式(JSP/JSF)からの参照 - @Named
アノテーションを付けるだけで、様々な機能が使える!
あれ?どこかで見たような...
http://communicatalyst.blogspot.jp/2012/04/questions-upon-questions.html
● DIのサポート● インターセプタのサポート
● スコープのサポート● EL式(JSP/JSF)からの参照 @javax.faces.bean
パッケージ@ManagedBeanなど
@EJB/(@Interceptor)
CDIの機能自体は他の既存仕様にもある
CDIの目的
今までの技術には一丁一端があった
DI インターセプタ スコープ EL式参照
EJB3.1 ○ ○ × ○JSF2.x
Managed Bean △ × ○ ○CDI1.0
DI インターセプタ スコープ EL式参照
EJB3.1 ○ ○ × ○JSF2.x
Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○
色んな技術の良いところを組み合わせた
万能で便利なCDIですが
Java EE 仕様のなかで機能に重複が生じてきたのも事実
Java EE 7で始まる重複機能の整理
@javax.faces.bean.ManagedBean
orCDI @javax.inject.Named
JSF
Java EE 6の同じような機能
stackoverflowでも多くの質問がある
JSF2.2 (Java EE 7)
JSF ManagedBeanの仕様書に注記が付いている
JSF2.2 (Java EE 7)
(意訳)これらのアノテーションはJava EEに含まれる他仕様と機能が重複しているため、将来的に非推奨になる可能性があります。
CDIがない環境ではJSFは使えなくなるの?
JSFのJIRAで議論を確認。
http://java.net/jira/browse/JAVASERVERFACES_SPEC_PUBLIC-976
強調されていたこと
Jacob Korherrさん@JSF Expert GroupMember
● JSFのマネージドBeanを完全に削除するわけじゃない● もちろんこれからもサポートを続けていく● 今後追加される新機能を使いたい人はCDIを使って欲しい
(意訳)
これからも使い続けられる
DI インターセプタ スコープ EL式参照
EJB3.x ○ ○ × ○JSF2.x
Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○
将来的に非推奨になる予定
JSFのManaged Beanは縮小傾向へ
DI インターセプタ スコープ EL式参照
EJB3.x ○ ○ × ○JSF2.x
Managed Bean △ × ○ ○CDI1.0 ○ ○ ○ ○
次なるターゲット。伝統のEJB。
将来的に非推奨になる予定
http://www.mod.go.jp/gsdf/mae/13b/bomb.html
EJBだって?あのXMLメンテナンスは
不発弾処理みたいなものだ。
今のEJBはそんなに難しくない
@Stalesspublic class BankService { public void 振り込み() { // Aさんの口座から100円引き Aさん.debit(100);
// Bさんの口座に100円足す Bさん.receive(100); }}
これ付けるだけでEJBになるトランザクション管理に便利
CDIにない、便利な機能がEJBにはある。
CMT DI インターセプタ スコープ EL式参照
EJB3.x ◎ ○ ○ × ○
JSF2.xManaged Bean × △ × ○ ○
CDI1.0 × ○ ○ ○ ○
コンテナ管理トランザクション(Container Managedment Transaction)
そんなEJBに危機が訪れた
写真 http://jaxconf.com/2011/keynotes/
Linda DeMichielさん@Java EE7 Spec Lead
● Java EEの色んなBean機能は広く使える方が便利● CDIインターセプタの機構を使って、もっとコンテナ管理 トランザクションが広く使えるようにしようと思う。
(意訳)
@Transactional( rollbackOn={SQLException.class}, dontRollbackOn={SQLWarning.class}) public class ShoppingCart {...}
@TransactionalでEJBいらず
● rollbackOn : ロールバックする例外● dontRollBackOn : ロールバックしない例外
この機能が盛り込まれると
CMT DI インターセプタ スコープ EL式参照
EJB3.x ◎ ○ ○ × ○
JSF2.xManaged Bean × △ × ○ ○
CDI1.1(+JTA1.2) ◎ ○ ○ ○ ○
基本的な機能はCDIでだいぶ網羅
将来的に非推奨になる予定
Java EEの主要コンポーネント
EJB CDI Bean
ご清聴ありがとうございました