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

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)
この記事のキーワード :

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30