Upload
nekop
View
2.310
Download
2
Embed Size (px)
DESCRIPTION
A slide used for Okayama OpenLab Vol.19 http://openlab.okaya.ma/wiki.cgi?page=%CA%D9%B6%AF%B2%F1%2F%C2%E8019%B2%F3
Citation preview
CDI を乗りこなせ!JBoss Seam 3 と Seam Forge
Red HatSenior Software Maintenance Engineer
Takayoshi Kimura
CDI
• JSR-299 Contexts and Depenency Injection
• CDI の概要とか基本的な利用方法などについてはこのスライドでは触れません– 皆本さんが CDI や Seam 3 の記事を書い
ているのでそちらを参照してください– http://thinkit.co.jp/book/2011/03/03/2031
Weld
• JSR-299 CDI Reference Implementation– 参照実装
Portable Extension
• CDI の目玉機能の一つ• この機能を利用して Java EE の拡張を
実装可能• Seam 3 もいくつかの Portable
Extension の集まり• 簡単に作れる
簡単に作れる?
• Java クラスを作る• Extension を登録する• jar にしてデプロイする
Java クラスを作るpackage com.acme;
import javax.enterprise.inject.spi.Extension;
public class MyExtension implements Extension {}
Extension を登録する
• jar の META-INF/services というディレクトリに以下のファイルを作成– javax.enterprise.inject.spi.Extension– 中身は先ほど作ったクラス名– 複数ある場合は複数行記述すれば良い
org.acme.MyExtension
Seam 3
History
• Seam 3.0.0.Final– 2011 年 3 月
• Seam 2.0.0.GA– 2007 年 12 月
• Seam 1.0.0.GA– 2006 年 6 月
• Seam 1.0.0.Beta1– 2005 年 9 月
Seam Catch
• 例外ハンドリングを提供
@HandlesExceptionspublic class MyHandler { void printExceptions( @Handles CaughtException<Throwable> ev) {
ev.getException().printStackTrace(); ev.markHandled();
}}
Seam Catch
• Extension のソースを見てみよう
Seam Faces
• JSF オブジェクトの提供– FacesContext– ExternalContext,– NavigationHandler– Flash
public class Bean { @Inject FacesContext context;}
Seam Faces
• JSF のフェーズコールバック
public void observeRenderResponse( @Observes @Before @RenderResponse PhaseEvent e) { // Do something with the event object}
Seam International
• ロカールやタイムゾーンの提供
@Injectjava.util.Locale defaultLocale;
@[email protected] userLocale;
Seam International
• 国際化されたメッセージ
@InjectMessages messages;
public void addLoginMessage() { messages.info("Welcome {0}!", user.getName());}public void addLoginMessageFromResourceBundle() { messages.info( new BundleKey("myapp", "login.welcome"), user.getName());}
Seam Solder
• Solder = ソルダー = はんだづけ• 汎用性の高いコンポーネントやアノテ
ーションの提供
Seam Solder
• EL の実行
@Inject Expressions expressions;
public void run() { String fruitName = expressions.evaluateValueExpression( "#{fruitBowl.fruitName}", String.class); Apple fruit = expressions.evaluateMethodExpression( "#{fruitBowl.getFruit}", Apple.class);}
Seam Solder
• リソース読み込み
@Inject@Resource("WEB-INF/web.xml")InputStream webXml;
@Inject@Resource("META-INF/aws.properties")Properties awsProperties;
Seam Solder
• Logger
@Inject Logger log;
他にもいっぱい
• Seam Security
• Seam Remoting
• Seam REST• Seam Persistence and Transactions
• Seam Validation• Seam Wicket
• Seam Servlet
Seam 3.1
• Seam Social
• Seam Flex
• Seam Compatibility Module• Seam JMS
• Seam Mail• Seam Cron
• Seam Reports
Seam Forge
Seam Forge
• forge– 鍛冶場
• ラピッドデベロップメント環境• シェル• テクノロジインテグレーション• スクリプティング
テクノロジの選択
• maven-archetype-plugin– 最初の一発のみ– A と C と D と X を使いたい
• ダイアモンド継承問題と同じ状態に
• 継続テクノロジインテグレーション– いつでも追加– git との連携– 追加したもののロールバック ( 実装予定 )
テクノロジの選択
• デモ– プロジェクト作成– テクノロジ追加– プラグイン追加
• 時間があれば– scaffold による Web アプリ生成
Seam Forge
• まだアルファ版です– 本当にアルファ版です– 開発が活発すぎて整合性の取れていない状
態のものがあり、かなり多くのものが動かないです
– JBoss AS7 版が本命ですがまだちゃんと動きません