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

第1回でも説明したように、Seam3はCDI仕様の上に構築された新しいJava EEのフレームワークです。連載の最終回となる今回は、CDIプログラミング・モデルとSeam3の具体的なモジュールについて紹介します。Seam3とはSeamのミッションは「リッチで標準ベースのインターネット・アプリケーシ

皆本 房幸

2011年3月28日 20:00

第1回でも説明したように、Seam3はCDI仕様の上に構築された新しいJava EEのフレームワークです。連載の最終回となる今回は、CDIプログラミング・モデルとSeam3の具体的なモジュールについて紹介します。

Seam3とは

Seamのミッションは「リッチで標準ベースのインターネット・アプリケーションを構築するための統合開発プラットフォームを提供すること」です。SeamFramework.orgでは現在、Seam2とSeam3を並行して開発しています。Seam2は2006年に登場したバージョン1.0と同じコンポーネント・モデルを引き継いだフレームワークですが、Seam3はアーキテクチャを刷新した久しぶりのメジャー・バージョン・アップとなります。

Seam2のプログラミング・モデルはJSR-299(CDI: Contexts and Dependency Injection)として提案され、仕様化されました。Seam3は、この標準仕様であるCDIをベースにした、拡張可能なJava EEアプリケーション開発のためのモジュール群です。

本稿執筆時、Seam3はリリースに向けた作業の真っ最中で、最終バージョンはまだ配布されていません。この記事で、現時点での最新版であるSeam 3.0.0.CR3をもとに説明を行います。Seam 3.0.0.CR3は、SeamFramework.orgのこのページからダウンロード可能です。

CDIプログラミング・モデル

Seam3のモジュールは、CDI仕様が定義するプログラミング・モデルの上に開発されています。これまでの連載記事では、CDIがコンテキストに基づいてBeanインスタンスを管理することと、タイプセーフなインジェクションについて説明してきました。実は、CDIはBean同士が連携できるような仕組みとして、インジェクションのほかにインタセプタやイベントという仕組みを持っています。

インタセプタとは、Beanのメソッド呼び出しに割り込んで実行される処理をモジュール化したものです。これを使うことにより、ロギングやセキュリティの検査など、さまざまな非機能要件の処理をBean定義に付加することが可能になります。デコレータは、メソッドの割り込みという意味ではインターセプタと同じですが、通常のビジネス・ロジックのメソッド定義と同じようなタイプセーフな定義ができます。

イベントとは、アプリケーションが定義したイベントを一斉同報的に送信し、それに興味があるBeanが受信するというものです(デザイン・パターンでのObserverパターンです)。CDIのイベントは、指定した型のイベントだけを受信できるのでタイプセーフです。CDIは、コンテキストによって積極的に状態を管理する仕様です。アプリケーション内部での状態変化を、それに関連するBeanに伝達するための手段をイベントという形で提供しています。

以上をまとめると、CDIのプログラミング・モデルは、次のように整理できます。

  • コンテキストによるライフサイクル管理
  • タイプセーフなインジェクション
  • インタセプタ、デコレータ
  • タイプセーフなイベント

上記のいずれも、型やアノテーションによってBean間で簡単に連携できる仕組みを提供しています。このプログラミング・モデルを使うことで、CDI上で連携できるBeanの集合体としてアプリケーションを定義できます。

CDI Portable Extensions

CDIは、Portable Extensionsと呼ばれる、CDI自身を拡張できるSPIを提供しています。これは、例えば、CDIコンテナの起動時に適用可能な、以下のような機能を提供します。

  • コンテキストの追加
  • Beanの登録
  • Beanメタデータの操作
  • アノテーション追加
  • インタセプタ、デコレータの登録
  • イベントの追加

これらの機能を使うことで、CDI仕様にはもともと存在しない新機能を提供する拡張モジュールを開発できます。それゆえ、CDIという仕様は、新しいフレームワークを作るためのフレームワークとも言えます。

拡張モジュールは、JARアーカイブの形式で提供します。アプリケーションが必要とする拡張モジュールをクラスパスに通しておくと、Webアーカイブのデプロイ時にCDIコンテナが認識します。

この記事のキーワード :

人気記事トップ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