JBoss Seam ~Java EEは統合フレームワークへ~

2010年1月15日(金)
佐野 大輔

seam-genを使ってアプリケーションのひな型を作成する

本記事の読者の中には、Ruby on RailsというRuby言語で開発されたWeb開発フレームワークのことをご存じの方も多いかと思います。Ruby on Railsがscaffoldという機能を使ってアプリケーションのひな型をコーディングレスに作成できるように、Seamでもseam-genを使ってアプリケーションのひな型をコーディングレスに作成できます。

まず、解凍されたSeamのディレクトリ直下に、seamあるいは、seam.batというコマンドが用意されていますので、コマンド・プロンプトから、
--------------------------------------------------------------------------------
$ ./seam setup
--------------------------------------------------------------------------------
を実行すると、対話形式で環境セットアップを行うことができます。プロジェクトのホーム・ディレクトリ(以降、「${PROJECT_HOME}」)とJBossのホーム・ディレクトリ(「以降、${JBOSS_HOME}」)を適切に指定し、デプロイ形式はEJBを使用するので「ear」を選択し、それ以外はデフォルトのままで構いません。

セットアップが完了した後、
--------------------------------------------------------------------------------
$ ./seam create-project
--------------------------------------------------------------------------------
を実行すると、ひな型アプリケーションの含まれたプロジェクト・ディレクトリが「${PROJECT_HOME}/myproject」に作成されます。

--------------------------------------------------------------------------------
$ ./seam deploy
--------------------------------------------------------------------------------
を実行すると、プロジェクトのビルド、およびアプリケーション・サーバーへのデプロイが実行されますので、アプリケーション・サーバーを起動し「http://localhost:8080/myproject/」にアクセスしてみてください。「Welcome to Seam!」という画面が表示されれば成功です。

これだけでは味気ないので、フォーム・アプリケーションのひな型も作成してみましょう。アプリケーション・サーバーを停止して、先ほどと同じプロンプトから、
--------------------------------------------------------------------------------
$ ./seam new-form
--------------------------------------------------------------------------------
を実行します。Seamコンポーネント(次項で説明します)の名前を聞いてくるので、ここでは「hello」としましょう。あとはデフォルトのままで構いません。コマンドが完了すると、先ほどのプロジェクト・ディレクトリに、リソースが追加されます。

先ほどと同じ手順で、ビルド、デプロイを行い、アプリケーション・サーバーを起動して「http://localhost:8080/myproject/hello.seam」にアクセスしてみてください。表示された画面のフォームに文字列を入力し、「hello」ボタンをクリック、入力した文字列が上部のステータス・メッセージに表示されれば成功です(図2-1)。

ここでは割愛しますが、scaffoldと同様に、CRUD(Create, Read, Update, Delete)アプリケーションのひな型をseam-genを使って作成することもできます。このようにして作成されたアプリケーションのひな型は、これらを基にして開発を始めることで、開発効率を上げることができるとともに、Seamの機能を把握するためにも大いに役に立つことと思います。

次項からは、seam-genによって作成されたアプリケーションのひな型を参考にして、Seam本体の機能について紹介します。

JSFとEJBをシームレスにつなぐ

Seamの名の通り、JSFとEJBをシームレスにつなぐことができるということが、Seamの大きな特徴であると言えます。この点について、Seamが果たす役割について説明する前に、まずはSeamを用いない場合の開発について整理してみます。

JSFでは、Managed Beanと呼ばれるJava Beansを媒介にして、ビジネス層へのデータの受け渡しを行います。もちろん、Managed Bean自体がビジネス・ロジックを持っても構わないのですが、ここで注意しなければならないのは、Managed Beanとして登録できるのは、あくまでJava Beansであり、EJBではないということです。ビジネス・ロジックをEJBとして実装する場合には、やはり、パラメータの受け渡しのみを目的としたManaged Beanを作成せざるを得ないということになります。また、Managed Beanの作成には、faces-config.xmlの記述という煩わしい作業がつきまといます。

Seamを使用した場合、これらの作業はどう変わってくるのでしょうか。先ほど作成したフォーム・アプリケーションのひな型を見てみましょう。

まず、「${PROJECT_HOME}/myproject/resources/WEB-INF/faces-config.xml」のどこを見ても、Managed Beanに関する記述は見当たりません。次に、「${PROJECT_HOME}/myproject/src/hot/com/mydomain/myproject/action/HelloBean.java」を開くと、ソースの13行目に「@Name("hello")」というアノテーションが付加されているのが分かります。

結論から言いますと、Seamを使用した場合、Managed Beanを登録するためのfaces-config.xmlの編集作業は必要ありません。@Nameアノテーションが付加されたクラスは、Seamコンポーネントと呼ばれ、Managed Beanの役割を果たすようになります。要するに、@Nameアノテーションはと同じ意味を持つというわけです。

また、このソースでは省略されていますが、「@Scope(SESSION)」というようなアノテーションを付加することによって、若干意味合いは異なりますが(次項で説明します)、と同様の設定を行うことも可能です(クラスのソース自体に記述を行うわけですから、当然の設定は必要ありません)。

もう1つ、このソースで注目すべき個所は、12行目の@Statefulアノテーションです。そう、このクラスはEJBなのです。Seamでは、EJBもJava Beansと同様にSeamコンポーネントとして登録することができ、JSFからのパラメータを直接受け取ることができるのです(図2-2、2-3)。

このように、Seamはアノテーションを活用することによって、faces-config.xmlを記述する手間を減らし、さらにはEJB呼び出しを隠ぺいし、Managed BeanとEJBの役割をSeamコンポーネントとして統合することで、冗長なManaged Beanを作成する手間を省いてくれるのです。これが、JSFとEJBをシームレスにつなぐSeamの果たす大きな役割です。

次ページでは、ステートフルなWebアプリケーション開発を効率化するSeam独自のコンポーネント・モデルについて解説します。

野村総合研究所(NRI)
基盤ソリューション事業本部 副主任システムコンサルタント。前職での大企業向けWeb型グループウエアの開発経験を経て、2008年8月より現職。NRIのSIフレームワーク「ObjectWorks+」関連製品の導入コンサルティングを行っている。ObjectWorks+ :http://works.nri.co.jp/

Think ITメルマガ会員登録受付中

Think ITでは、技術情報が詰まったメールマガジン「Think IT Weekly」の配信サービスを提供しています。メルマガ会員登録を済ませれば、メルマガだけでなく、さまざまな限定特典を入手できるようになります。

Think ITメルマガ会員のサービス内容を見る

他にもこの記事が読まれています