Webの上のポジョ
をステートフルにつなぐJBoss Seam
【特集】Java EE 6のWeb Beansを先取りするオープンソース
株式会社 クロノス
大石宏一
2008/8/28
利点【2】O/Rマッピング・DIによるXML地獄からの解放
JBoss Seamでは、JSFとEJB 3.0の統合以外にもDBテーブルへのO/RマッピングやコンポーネントのDIなどにアノテーションが使えます。
リスト1 アノテーションを使ったPOJOの例 |
@Entity |
初期のDIコンテナなどは、あまりにもXMLへの設定が多過ぎたために、XMLが複雑になり過ぎるという「XML hell(XML地獄)」と呼ばれる状態に陥っていました。一方、JBoss Seamはアノテーションをうまく使うことによって、開発者を「XML hell」から解放しています。
利点【3】双方向のDI「バイジェクション」が可能
JBoss Seamを使うことのメリットの1つとして挙げられるのは、DI/インジェクションをサポートするための「@In」(インジェクション)や「@Out」(アウトジェクション)といったアノテーションが用意されていることです。
リスト2 @Inアノテーションの記述例 |
@Name("login") |
以下のように、EL(Expression Language)を使って、式の値をインジェクトすることもできます。
リスト3 ELを使ったインジェクションの例 |
@Name("login") |
@Inアノテーションはコンポーネントの任意のメソッドを実行する直前に、スコープからオブジェクトを検索し、フィールドにインジェクションします。
■ 双方向DI、「バイジェクション」とは?
これに対し、@Outアノテーションはメソッド実行後にオブジェクトをスコープに設定します。これはコンポーネントへの依存性の注入とは逆方向であるため、「アウトジェクション」と呼びます。さらに同じフィールドに対し@In、@Outを付加でき、これを「バイジェクション(bijection)」と呼びます。
リスト4 バイジェクションの例 |
@Name("login") |
利点【4】ステートフルなWebアプリケーションに最適
JBoss Seamは状態を管理する以下のような7つのスコープを用意しています。
表 JBoss Seamが持つ7つのスコープ | ||||||||||||||||
|
■ ステートフルなConversationスコープ
上記の中でもConversationスコープは、JBoss Seamの特徴的なスコープです。このConversationスコープはデフォルトでは、あるページからのリクエスト&レスポンスが完了した段階でConversationは破棄されます。
これはEventスコープと同じ動作ですが、Conversationスコープとともに@Begin、@Endアノテーションを用いると、@Beginを付与したメソッドから@Endを付与したメソッドまでの状態を管理できます。@Beginを付与したメソッドを実行すると、@Endを付与したメソッドを実行するまで複数のリクエストをまたがって状態を管理します。
@Begin |
このConversationスコープのおかげで、Webブラウザの[戻る]ボタンや[リフレッシュ]ボタン、[F5]キーの2度押しへの対策を開発者が施す必要がなくなりました。例えば、Webブラウザの[戻る]ボタンを使うと、登録や更新といった2度以上実行してはならない処理を複数回実行できてしまうので、通常Webブラウザの[戻る]ボタンを無効にするなどの対策をしなければなりません。
しかし、Conversationスコープの場合、@Endを付与したメソッドを1度実行すると、@Beginを付与したメソッドで開始したConversationスコープが終了するため、@Endを付与したメソッドを2度以上実行しないようにできます。
■ Conversationスコープでマルチウィンドウに対応
また、Conversationスコープを使うと、マルチウィンドウに対応したアプリケーションを作成できます。
同一PCから複数のWebブラウザを起動し同じWebアプリケーションにアクセスするとき、HTTPセッションでは同じセッションにアクセスしてしまいますが、Conversationスコープを使うと、それぞれのWebブラウザの状態を別々に管理できます。
編集部注:ステートフルなWebアプリケーションについて詳しく知りたい読者は、「“ステートフル”なら不要なWebプログラミングを減らせる」をご覧ください。
次ページでは、Tomcatにもデプロイできるなど、いかにJBoss Seamが導入しやすいかについてや、まもなくリリースされる「JBoss Seam 2.0」などについて説明します。
コラム 「ポジョだとテストが容易になる?」 |
筆者が考える「POJOであることの最大の利点」は、テストが容易になるということです。 少なくともEJB 2までは、コンポーネントはEJBコンテナにデプロイしないと、ユニット・テスト(単体テスト)ができませんでした。そもそもテスト用の環境構築が非常に複雑で面倒で、さらには、ほんの少しの修正を確認するだけでも長いデプロイ時間を待たなくてはならないという問題がありました。 SeamコンポーネントはPOJOであるため、JUnitやTestNGなどのテスティング・フレームワークを使って容易にユニット・テストができます。 編集部注:JUnitなどのテスティング・フレームワークについて詳しく知りたい読者は、「EclipseとJUnitによるテスティング」をご覧ください。 |
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に関する基礎知識を解説する。
|
|