Webポジョ
をステートフルにつなぐJBoss Seam


【特集】Java EE 6のWeb Beansを先取りするオープンソース

株式会社 クロノス
大石宏一
2008/8/28


EJB 2.1って使えましたか?

今回の主な内容

EJB 2.1って使えましたか?
次期Java EEを先取りする「JBoss Seam」の利点

利点【1】アノテーションでJSFとEJBの統合が簡単に

利点【2】O/Rマッピング・DIによるXML地獄からの解放
利点【3】双方向のDI「バイジェクション」が可能
利点【4】ステートフルなWebアプリケーションに最適
コラム 「ポジョだとテストが容易になる?」
利点【5】サンプルやツールの充実による導入のしやすさ
間もなく「JBoss Seam 2.0」がリリース!
今後、JBoss SeamによってEJB 3.0は普及するのか?

 JBoss.orgが開発した次世代Web2.0アプリケーションを構築するためのオープンソースフレームワークJBoss Seam」を皆さんはもうご存じでしょうか。

 最近のJavaシステム開発の現場では、POJO(ポジョ、Plain Old Java Object)をベースとした「軽量コンテナ※注意」(Spring FrameworkSeasar2など)を用いた開発が主流となっています。

※注意:本稿で使用する「軽量コンテナ」という用語はコンポーネントがコンテナに依存せず、テストや実行が容易なコンテナを意味することとします。

 そもそもこの流れは、EJB(Enterprise JavaBeans) 2.1に対する反省が根本となっています。EJB 2.1が利用されていた当時、フレームワークの必要性は認知されていながら、EJB 2.1については重量に対する批判やエンティティBeanの使い勝手の悪さなどが議論されていて、事実、システム開発の現場では普及が滞っていました。そこで、開発しやすく実行しやすい軽量コンテナが、EJB 2.1に代わるものと位置付けられて登場しました。

 しかしEJBもバージョン3.0となったいまでは、EJB 2.1時代の無駄を省き、さらに軽量コンテナの機能も踏襲するものとなっています。そのEJB 3.0を使った開発を容易にするフレームワークが「JBoss Seam」です。本稿では、そのJBoss Seamの機能を紹介します。

次期Java EEを先取りする「JBoss Seam」の利点

 JBoss Seamとはまず、以下のようなフレームワークを統合するWebアプリケーション・フレームワークです。

  • JSF(Java Server Faces)
  • EJB 3.0
  • SOA(サービス指向アーキテクチャ)技術
  • Ajax(Asynchronous JavaScript and XML
  • Java Portlets
  • ワークフロー
  • BPM(Business Process Management

 中でもJava EE 5の中核を担うJSF、EJBそれぞれのコンポーネントモデル間の「Seam(継ぎ目)」としての役割は、最も注目が集まる機能です。また、JBoss Seamが提供するPOJOベースの統合コンポーネントモデルは、「Web Beans」としてJava EEの次期メジャーアップデートであるJava EE 6に含まれる予定です(JSR(Java Specification Requests) 299)。

 ほかにもJBoss Seamには、アノテーションを使って簡単な双方向DI(Dependency Injection、依存性の注入)やステートフルなWebアプリケーションを実現する7つのスコープ、サンプルやツールが充実した導入のしやすさなどなど、便利な利点がたくさんあります(参考:Ajax、EJB、JSF、O/Rマッピングを縫い合わす)が、この記事では、まずはJSFとEJBの統合方法から見ていくことにしましょう。

利点【1】アノテーションでJSFとEJBの統合が簡単に

 2008年8月現在のWebアプリケーションは、柔軟性を持たせるためにレイヤ(層)構造を用いるのが一般的です。一般的なアプリケーションでは、MVCModel・View・Control)に代表される以下の3層構造を取ります。

  • プレゼンテーション層(View):ユーザーインターフェイスと画面遷移を扱う層
  • ビジネス・ロジック層(Control):業務ロジックを扱う層
  • インテグレーション層(Model):データの永続化を扱う層

 JSFとは、上記のようなレイヤ構造のWebアプリケーションを構築する際に、JSPと同じくプレゼンテーション層(View)で用いるフレームワークです。また、EJBはビジネス・ロジック層(Model)を作成するための仕様です。JSF、EJBはどちらもJava EE 5の標準APIですがそれぞれが独自に設計されています。

 そのうえ、Java EE 5ではJSFとEJBを連携する方法を提示していないため、JSFとEJBを連携するにはコーディングが必要でした。JBoss Seamは、このJSFとEJBの連携を容易にします。

JSFとEJBの統合方法

 それでは、JBoss Seamを使ったJSFとEJBの連携の容易さについて詳しく見ていきましょう。

 例として、JBoss Seamを使わずに、JSFのカスタムタグライブラリを用いたJSPの画面を作ったとします。その画面のテキストボックスに入力した値をEJB 3.0に渡す場合、以下のような実装や設定が必要となります。

  1. フォームの入力項目に対応した「Managed Bean」と呼ばれるJava Beansを作成する
  2. Managed Beanをfaces-config.xmlに登録する
  3. DTO(Data Transfer Object)を作成する
  4. EJBコンポーネントをルックアップするコードを記述する
  5. JSFからEJBコンテナにデータを受け渡すコードを記述する

 JBoss Seamを使うと、上記の実装や設定は不要でありながら、以下のようなことが実現できます。

  1. Managed BeanとしてEJBコンポーネントを扱える(Seamコンポーネント
  2. XMLへの登録ではなく、Seamコンポーネントにアノテーションを記述できる

 上記のようにJBoss Seamを使うと、JSFのフォームのデータやイベントから、EJBのコンポーネント(Seamコンポーネント)を直接使用できます。これにより、JavaのコーディングやXMLの記述が大幅に減ります。

 また、Seamコンポーネントに記述するアノテーションも簡単なので、容易に開発ができるようになります。そのほか、Java Portletsやワークフロー、JBoss jBPMも上記と同様の仕組みで統合します。

 JBoss Seamで使用するコンポーネントは、アノテーションを利用することで特定のミドルウェアへの依存を排除しています。JSFとEJB 3.0の統合に際しても、アノテーションを利用することでXMLへの記述を大幅に削減できます。

 次ページでは、JBoss Seamの特徴であるXML地獄からの解放や双方向DI、ステートフルなWebアプリケーションなどを解説します。

  1-2-3

 INDEX
Page1
  EJB 2.1って使えましたか?
次期Java EEを先取りする「JBoss Seam」の利点
利点【1】アノテーションでJSFとEJBの統合が簡単に
  Page2
  利点【2】O/Rマッピング・DIによるXML地獄からの解放
利点【3】双方向のDI「バイジェクション」が可能
利点【4】ステートフルなWebアプリケーションに最適
コラム 「ポジョだとテストが容易になる?」
  Page3
  利点【5】サンプルやツールの充実による導入のしやすさ
間もなく「JBoss Seam 2.0」がリリース!
今後、JBoss SeamによってEJB 3.0は普及するのか?


Java Solution全記事一覧



Java Agile フォーラム 新着記事
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Java Agile 記事ランキング

本日 月間