PR

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のWebサイトにログインすることでさまざまな限定特典を入手できるようになります。

Think IT会員サービスの概要とメリットをチェック

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