Seam3によるWebプログラミング

2011年3月28日(月)
皆本 房幸

Seam3によって変わるJava EEプログラミング

従来のJava EEプログラミングが難しかった理由の一つは、Java EEを構成する各仕様のプログラミング・モデルが統一されておらず、それらのギャップを開発者が埋める必要があったからです。CDIのプログラミング・モデルによって、Java EE全体が、同じモデルのもと統一した操作で扱えるようになります。

  • インジェクションによるJavaEEのオブジェクトの取得
    • EJB、データソース、UserTransaction(CDI)
    • HTTP リクエスト、HTTPセッション(Seam Servlet)
    • JSFメッセージ(Seam Faces)
    • ロケール、タイムゾーン(Seam International)
    • JPA永続コンテキスト(Seam Persistence)
  • アノテーションによる宣言的なプログラミング
    • 宣言的トランザクション(Seam Persistence)
    • 宣言的セキュリティ(Seam Security)
    • 宣言的状態管理(CDI)
  • リモートからのBeanのアクセス
    • Javaスクリプトベース(Seam Remoting)
    • BeanをRESTで公開(Seam REST)
  • 統一されたフレームワーク設定ファイルの記法(Seam Configurations)
  • CDIイベントによるJava EEの状態変化の通知
    • Servletライフサイクル(Seam Servlet)
    • JSFリクエストライフサイクル(Seam Faces)
    • Java例外をイベントとしてキャッチ(Seam Catch)
  • ロギングなどの共通ユーティリティの提供(Seam Solder)

Seam3モジュールを使ったインジェクションの例

まず最初に、Java EEのオブジェクトをインジェクションで取得する例を、いくつか紹介します。以下は、Seam Servletモジュールを使って、Servlet内においてHTTPリクエストとHTTPレスポンス、HTTPセッションを変数に設定しています。

以下は、Seam Internationalモジュールを使って、ロケール情報とタイムゾーンを変数に設定しています。

Seam Solderモジュールは、Seam3モジュールを開発する上で有益なユーティリティを提供します。以下は、Logのカテゴリの限定子を指定してloggerを取得しています。

これらの例から分かることは、アプリケーションが必要とするJava EEのオブジェクトが@Injectによって本当に簡単に手に入れられるということです。

Seam3モジュールを使ったイベントの例

次は、CDIのイベントの例です。JSF(JavaServer Faces)の仕様では、リクエストはJSFのライフサイクルによってフェーズごとに処理されます。この各フェーズの前後で何らかの処理をさせたい場合は、javax.faces.event.PhaseListenerを使ってリスナーを登録します。

Seam Facesモジュールを使うと、JSFライフサイクル・イベントをCDIイベントとしてキャッチできます。このため、従来のリスナーの処理を、もっと手軽に実現できます。

この例では、Render Responseフェーズのイベントをキャッチしています。@ObservesはCDIで定義されたイベントをキャッチするためのアノテーションで、メソッド引数にこれを付加すると、JSFのイベントがCDIのイベントとして引数で渡されます。@RenderResponseは、イベントの種別を指定するための限定子になります。

Java EEの仕様では、Servlet仕様のServletListenerやJMS(Java Messaging Service)仕様のMessageListenerなど、このようなリスナー定義を行う個所が多々ありますが、これらのリスナーのAPIは仕様ごとにバラバラです。Seam3モジュールは、これらのリスナー処理をCDIイベント化することによって統一化します。

Seam3 Bookingサンプル

もう少しまとまった大きさのSeam3のサンプル・プログラムとしては、Seam Bookingがあります。これは、ホテルの予約アプリケーションであり、ログイン、ホテル検索、予約登録が可能です。Seam Bookingは、Seamの初期のバージョンから提供されている代表的なサンプルです。

Seam3版のSeam Bookingは、Seam3のディストリビューションのexamples/seam-bookingに含まれます。これをビルドすると、ほぼSeam2のbookingと同様な画面が表示されます(図1、図2)。完成したSeamアプリケーションがどのようにSeam3のモジュールを使っているのかは、このサンプルを参考にしてください。

図1: Seam Bookingログイン画面

図1: Seam Bookingログイン画面(クリックで拡大)

図2: Seam Booking検索画面

図2: Seam Booking検索画面(クリックで拡大)

まとめ

Seam3正式リリースの直前というタイミングで、Seam3について4回の連載で説明してきました。Seam3を使ったWebアプリケーション開発のイメージが掴めたでしょうか。

筆者は、Seam3の登場によって、Java EEを使ったWebプログラミングが、従来の煩雑なAPIベースの開発から疎結合連携可能なBeanの集合体の開発へと質的に変化していくことを期待しています。Seam3のプログラミングは、従来のJava EEプログラミングよりもダイナミックでアジャイルです。Seam3のリリースを機に、Seamを使ったJava EEアプリケーション開発について評価・検討を開始していただけたら幸いです。

  • 編集部注: 本文中、Seam2の登場時期を1996年としていましたが、2006年の誤りです。お詫びして訂正いたします。本文は修正済みです。(2011/04/05)
レッドハット株式会社

JBoss コンサルタント。日本 JBoss ユーザ・グループ(www.jbug.jp)発起人、翻訳プロジェクトリーダ。 著書『JBoss入門』『JBoss徹底活用ガイド』(共著)他。

連載バックナンバー

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています