Webの上のポジョ
をステートフルにつなぐJBoss Seam
【特集】Java EE 6のWeb Beansを先取りするオープンソース
株式会社 クロノス
大石宏一
2008/8/28
EJB 2.1って使えましたか?
JBoss.orgが開発した次世代Web2.0アプリケーションを構築するためのオープンソースフレームワーク「JBoss Seam」を皆さんはもうご存じでしょうか。
最近のJavaシステム開発の現場では、POJO(ポジョ、Plain Old Java Object)をベースとした「軽量コンテナ(※注意)」(Spring FrameworkやSeasar2など)を用いた開発が主流となっています。
※注意:本稿で使用する「軽量コンテナ」という用語はコンポーネントがコンテナに依存せず、テストや実行が容易なコンテナを意味することとします。
そもそもこの流れは、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アプリケーションは、柔軟性を持たせるためにレイヤ(層)構造を用いるのが一般的です。一般的なアプリケーションでは、MVC(Model・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に渡す場合、以下のような実装や設定が必要となります。
- フォームの入力項目に対応した「Managed Bean」と呼ばれるJava Beansを作成する
- Managed Beanをfaces-config.xmlに登録する
- DTO(Data Transfer Object)を作成する
- EJBコンポーネントをルックアップするコードを記述する
- JSFからEJBコンテナにデータを受け渡すコードを記述する
JBoss Seamを使うと、上記の実装や設定は不要でありながら、以下のようなことが実現できます。
- Managed BeanとしてEJBコンポーネントを扱える(Seamコンポーネント)
- 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全記事一覧 |
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|