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

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独自のコンポーネント・モデルについて解説します。

人気記事トップ10

人気記事ランキングをもっと見る

企画広告も役立つ情報バッチリ! Sponsored

ClickHouse Cloudが実現した広告運用SaaS「ATOM」のデータ基盤革新、パフォーマンスを向上しながら、運用負荷とコストを削減 11月11日 6:20 AIで開発が加速する時代、品質保証はどう変わる? Tricentisが示すAIエージェント活用の実像 11月9日 6:45 悪用までの猶予が「1分」に迫るフロンティアAI時代に開発と本番を貫く脆弱性管理が必要 10月29日 8:30 欧州CRA対応とSBOM運用。AI生成コードのOSS混入問題の対策とは ――スニペット単位で検出する「FossID」「Insignary Clarity」によるSBOM運用 9月16日 6:40 PostgreSQLからTiDBへ、稼働中SaaSで進める段階的DB移行の実践と再設計への展望 9月7日 6:30 機能安全開発におけるGoogleTestの活用を支援!「Parasoft C/C++test CT」で実現する効率化&AI連携 4月14日 6:30 【CNDW2025】Grafanaが明かす「オブザーバビリティの哲学」ー最小限の労力で実用的なインサイトを得るには 1月23日 6:30 【CNDW2025】プロダクト急増に備える基盤刷新 ーウェルスナビがECSからEKSへの移行で得た知見とは 1月15日 6:30 【CNDW2025】250環境を5人で運用、構築時間は30分に ーKINTOテクノロジーズが語るインフラ基盤組織の作り方 2025年12月18日 6:30 新たな自動化で熱視線! AIエージェントの「推論能力」を支える2つのコンポーネントとは? 2025年11月28日 6:30