JBoss ToolsでSeamアプリを開発してみよう

前回はオールインワンインストーラによるJBoss Tools導入方法を紹介した。今回は引き続き、JBossが提供するWebアプリケーションフレームワーク「JBoss Seam」の開発環境としてのJBoss Toolsの機能を紹介する。

JBoss SeamはJSF、EJB3といったJava EE5標準をベースとしている。JSFとEJB3を単純に組み合わせて使う場合と比較すると、JSFからEJBに直接アクセスすることが可能であったり、設定ファイルの記述量が大幅に削減されるといったメリットがある。また、Seam独自の機能としてカンバセーションスコープ、複数ウィンドウ対応、コンテキストを使用した値の受け渡しなど多くの便利な機能を備えている。

XHTMLエディタ

Seamではビュー技術としてJSF/Faceletsを採用している。Faceletsとは、JSF上で動作するビュー技術で、JSPの代わりにXHTMLでJSFアプリケーションのビューを記述できるようにするものだ。

JBoss ToolsではFaceletsのXHTMLを編集するためのエディタが用意されており、XHTMLの直接編集はもちろんのこと、画面のWYSIWYG編集機能も提供されている。また、パレットからドラッグ&ドロップでコンポーネントを配置することもできる。パレットにはJSFやFaceletsで提供されているカスタムタグに加えてJBoss RichFaces/JBoss Ajax4jsfのタグも用意されている。

図1 XHTMLエディタ

とはいえ、複雑な画面を作成する際にはWYSIWYG編集機能だけでは荷が重いかもしれない。そのような場合にはXHTMLを直接編集しつつ、ビジュアルタブで表示イメージを確認するといった使い方になるだろう。

ソースタブでXHTMLを編集する場合はコード補完や即時バリデーション、ハイパーリンクといった機能が利用可能だ。カスタムタグやFacelets固有の属性、Seamコンポーネントやプロパティ、メソッドなど様々なコンテキストで補完ができるようになっており、ELで存在しないメソッドやプロパティを指定した場合、即座にエラーとして表示される。また、ELでメソッドやプロパティを指定している場合、F3キーまたはCTRL+クリックでJavaコードにジャンプすることが可能だ。

各種ウィザード

JBoss Toolsでは以下のように様々なSeam関連のウィザードが提供されている。Seamではseam-gen(コマンドラインからseamコマンドで呼び出すことができる)でソースコードの雛形等を生成することができるが、これらのウィザードを使用することでEclipse上からseam-genの自動生成機能を利用することができる。

図2 Seam関連のウィザード

これらのウィザードの中には入力フォームやCRUDアプリケーションといった粒度の大きいものもあるのでSeamを学習するためのサンプルとして参照するのもいいだろう。また、「Seam Generate Entities」は既存のデータベーススキーマもしくはエンティティからCRUDアプリケーションを自動生成することができる。Railsのscaffoldのようにアプリケーションのベースとして利用することができるだろう。

図3 自動生成されたアプリケーション

アノテーションのバリデーション

SeamではJavaBeanにさまざまなアノテーションを付与するが、これらのアノテーションの記述内容をリアルタイムにバリデーションし、誤りを検出することができる。バリデーションの設定はEclipseの設定ダイアログで行うことができる。

図4 バリデータの設定

アノテーションの記述に誤りがある場合、図5のようにエラーマーカが表示される。コンポーネント名の重複など、コンパイラでは検出できないアノテーションの記述ミスを防止することができる。

図5 アノテーションのエラー

まとめ

このほかにもjBPM(JBossが提供しているワークフロー管理システム)のワークフローをビジュアルに定義するためのエディタが提供されている。SeamではjBPMを組み合わせて利用することもでき、jBPMのワークフローで画面遷移を制御したり、コンポーネントのライフサイクルをjBPMで管理することができる。

このように、JBoss ToolsではSeamのサポートに非常に力が入れられている。前回紹介した日本JBossユーザグループ提供のオールインワンインストーラを利用することでSeamを動作させるための環境を手軽に構築することができるので、Seamに興味のある方はぜひ試してみてほしい。JBoss ToolsのWebサイトには更新サイトも用意されているのでインストール済みのEclipseにプラグインとして導入することもできる。必要に応じて使い分けるといいだろう。