SeamFramework.orgCommunity Documentation
Seam ディストリビューションはコマンドラインユーティリティを含んでおり、 Eclipse プロジェクトのセットアップ、 Seam のスケルトンコードの生成、 既存データベースからアプリケーションのリバースエンジニアリングをとても簡単にします。
これは、Seam 入門として良い方法です。 そして、状態をデータベースに保管するとてもつまらないアプリケーションを構築するために、 新しいおもちゃがどれほどすばらしいかを大げさに話す退屈な Ruby 野郎の一人に次にエレベータの中で捕まったとわかった時のために、 攻撃材料を与えてくれます。
このリリースでは、seam-gen は JBoss AS で使用するのが最良です。 プロジェクト設定をマニュアルで少し変更するだけで、生成されたプロジェクトを他の J2EE や Java 5 アプリケーションサーバー用にも使用可能です。
Eclipse がなくても seam-gen は使用可能ですが、このチュートリアルでは Eclipse を使用してデバッグや統合テストを行う方法を示したいと思います。 Eclipse をインストールしたくない方も、 このチュートリアルを続けることができます — コマンドラインからすべてのステップは実行可能です。
seam-gen is basically just an intricate Ant script wrapped around Hibernate Tools, together with some templates. That makes it easy to customize if you need to.
Make sure you have JDK 5 or JDK 6 (see 項42.1. 「JDK の依存性」 for details), JBoss AS 4.2 or 5.0 and Ant 1.7.0, along with recent versions of Eclipse, the JBoss IDE plugin for Eclipse and the TestNG plugin for Eclipse correctly installed before starting. Add your JBoss installation to the JBoss Server View in Eclipse. Start JBoss in debug mode. Finally, start a command prompt in the directory where you unzipped the Seam distribution.
JBoss は WAR や EAR の優れたホット再デプロイメントをサポートします。 残念ながら、 JVM にバグがあるため、 — 開発段階では一般的な — EAR の再デプロイメントを繰り返すと最終的には JVM が perm gen スペースを使い果たしてしまうことになります。 この理由により、デプロイメント時に perm gen space を大きく確保した JVM で JBoss を稼動させることを推奨します。 JBoss IDE から JBoss を稼動させる場合は、 「VM 引数」の下にあるサーバ起動設定でこれを設定することができます。 以下のような値を推奨します。
-Xms512m -Xmx1024m -XX:PermSize=256m -XX:MaxPermSize=512m
十分なメモリがない場合には、以下が最小の推奨値です。
-Xms256m -Xmx512m -XX:PermSize=128m -XX:MaxPermSize=256m
コマンドラインから JBoss を起動しているならば、 bin/run.conf
の JVM オプション設定が可能です。
今すぐに変更を行いたくない場合は特に行う必要はありません — OutOfMemoryException
が発生した時点で対処してください。
The first thing we need to do is configure seam-gen for your environment: JBoss AS installation directory, project workspace, and database connection. It's easy, just type:
cd jboss-seam-2.1.x seam setup
以下のように必要な情報の入力を要求されるでしょう。
~/workspace/jboss-seam$ ./seam setup Buildfile: build.xml init: setup: [echo] Welcome to seam-gen :-) [input] Enter your project workspace (the directory that contains your Seam projects) [C:/Projects] [C:/Projects] /Users/pmuir/workspace [input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.3.GA] [C:/Program Files/jboss-4.2.3.GA] /Applications/jboss-4.2.3.GA [input] Enter the project name [myproject] [myproject] helloworld [echo] Accepted project name as: helloworld [input] Select a RichFaces skin (not applicable if using ICEFaces) [blueSky] ([blueSky], classic, ruby, wine, deepMarine, emeraldTown, sakura, DEFAULT) [input] Is this project deployed as an EAR (with EJB components) or a WAR (with no EJB support) [ear] ([ear], war, ) [input] Enter the Java package name for your session beans [com.mydomain.helloworld] [com.mydomain.helloworld] org.jboss.helloworld [input] Enter the Java package name for your entity beans [org.jboss.helloworld] [org.jboss.helloworld] [input] Enter the Java package name for your test cases [org.jboss.helloworld.test] [org.jboss.helloworld.test] [input] What kind of database are you using? [hsql] ([hsql], mysql, oracle, postgres, mssql, db2, sybase, enterprisedb, h2) mysql [input] Enter the Hibernate dialect for your database [org.hibernate.dialect.MySQLDialect] [org.hibernate.dialect.MySQLDialect] [input] Enter the filesystem path to the JDBC driver jar [lib/hsqldb.jar] [lib/hsqldb.jar] /Users/pmuir/java/mysql.jar [input] Enter JDBC driver class for your database [com.mysql.jdbc.Driver] [com.mysql.jdbc.Driver] [input] Enter the JDBC URL for your database [jdbc:mysql:///test] [jdbc:mysql:///test] jdbc:mysql:///helloworld [input] Enter database username [sa] [sa] pmuir [input] Enter database password [] [] [input] skipping input as property hibernate.default_schema.new has already been set. [input] Enter the database catalog name (it is OK to leave this blank) [] [] [input] Are you working with tables that already exist in the database? [n] (y, [n], ) y [input] Do you want to drop and recreate the database tables and data in import.sql each time you deploy? [n] (y, [n], ) n [input] Enter your ICEfaces home directory (leave blank to omit ICEfaces) [] [] [propertyfile] Creating new property file: /Users/pmuir/workspace/jboss-seam/seam-gen/build.properties [echo] Installing JDBC driver jar to JBoss server [echo] Type 'seam create-project' to create the new project BUILD SUCCESSFUL Total time: 1 minute 32 seconds ~/workspace/jboss-seam $
このツールは気の利いたデフォルト値を提供します。 プロンプトに対して単に enter を押すだけで大丈夫です。
決める必要がある重要な選択は、プロジェクトとして EAR 形式デプロイと WAR 形式デプロイのどちらにするかです。 EAR プロジェクトは EJB 3.0 に対応し Java EE 5 が必要です。 WAR プロジェクトは EJB 3.0 には対応しませんが J2EE 環境にデプロイ可能になります。 WAR は EAR に比べシンプルで理解しやすいパッケージです。 JBoss のような EJB3 が実行可能なアプリケーションサーバーにインストールする場合は ear
を選択してください。 これ以外は war
を選択してください。 以降、 このチュートリアルでは EAR デプロイメントが選択されたと仮定しますが、 WAR デプロイメントの場合もまったく同じステップで進むことができます。
既存のデータモデルで作業をしている場合、 データベースに既にテーブルが存在していることを seam-gen に必ず知らせてください。
設定は seam-gen/build.properties
に格納されていますが、 二度目に seam setup
を実行することで変更することも可能です。
以下のようにタイプすることで、Eclipse ワークスペースディレクトリに、 新規プロジェクトの生成が可能です。
seam new-project
C:\Projects\jboss-seam>seam new-project Buildfile: build.xml ... new-project: [echo] A new Seam project named 'helloworld' was created in the C:\Projects directory [echo] Type 'seam explode' and go to http://localhost:8080/helloworld [echo] Eclipse Users: Add the project into Eclipse using File > New > Project and select General > Project (not Java Project) [echo] NetBeans Users: Open the project in NetBeans BUILD SUCCESSFUL Total time: 7 seconds C:\Projects\jboss-seam>
Seam jar、依存する jar そして JDBC ドライバ jar を新しい Eclipse プロジェクトにコピーし、 Eclipse メタデータおよび Ant ビルドスクリプトに従って必要となるすべてのリソースと設定ファイル群、 facelets テンプレートファイル、 スタイルシートを生成します。 新規 -> プロジェクト... -> 一般 -> プロジェクト -> 次へ
の手順でプロジェクトを追加し、 プロジェクト名
(この場合、 helloworld
) を入力して、 完了
をクリックすれば、 Eclipse プロジェクトは自動的に展開された JBoss AS ディレクトリ構造にデプロイされます。 新規プロジェクトウィザードから Java プロジェクト
は選択しないでください。
Eclipse のデフォルト JDK が Java SE 5 あるいは Java SE 6 の JDK でなければ、 プロジェクト -> プロパティ -> Java コンパイラ
の手順で、Java SE 5 互換の JDK を選ぶ必要があります。
別の方法として、Eclise の外部から seam explode
とタイプすることでプロジェクトのデプロイが可能です。
Go to http://localhost:8080/helloworld
to see a welcome page. This is a facelets page, view/home.xhtml
, using the template view/layout/template.xhtml
. You can edit this page, or the template, in Eclipse, and see the results immediately, by clicking refresh in your browser.
プロジェクトディレクトリに XML 設定ドキュメントが生成されますがびっくりしないでください。 これらのほとんどが標準 Java EE に関するもので、 一度生成したら 二度と見る必要のないものです。 全 Seam プロジェクトで 90% は同じものです。 (seam-gen ができるほどですから記述が非常に簡単なドキュメントです。)
生成されたプロジェクトは三つのデータベースと永続性設定を含んでいます。 HSQLDB に対して TestNG ユニットテストを実行するときに persistence-test.xml
と import-test.sql
ファイルが使用されます。 import-test.sql
中のデータベーススキーマとテストデータは常にテストが実行される前にデータベースにエキスポートされます。 myproject-dev-ds.xml
、persistence-dev.xml
と import-dev.sql
はアプリケーションを開発データベースにデプロイするときに使用します。 seam-gen に既存データベースで作業しているかを伝えるかどうかによってスキーマはデプロイ時に自動的にエキスポートされる場合があります。 myproject-prod-ds.xml
、 persistence-prod.xml
と import-prod.sql
ファイルは、 本番環境データベースにアプリケーションをデプロイするときに使用します。 デプロイ時にスキーマは自動的にエキスポートされません。
従来のアクションスタイルの Web フレームワークに慣れている場合、 おそらくどのように Java のステートレスアクションメソッドを持つ簡単な Web ページが生成されるのだろうかと思われるでしょう。 以下のようにタイプしてください。
seam new-action
Seam は情報のために質問をしてきます。そして、プロジェクトのための新しい facelets page や Seam コンポーネントを生成します。
C:\Projects\jboss-seam>seam new-action Buildfile: build.xml validate-workspace: validate-project: action-input: [input] Enter the Seam component name ping [input] Enter the local interface name [Ping] [input] Enter the bean class name [PingBean] [input] Enter the action method name [ping] [input] Enter the page name [ping] setup-filters: new-action: [echo] Creating a new stateless session bean component with an action method [copy] Copying 1 file to C:\Projects\helloworld\src\hot\org\jboss\helloworld [copy] Copying 1 file to C:\Projects\helloworld\src\hot\org\jboss\helloworld [copy] Copying 1 file to C:\Projects\helloworld\src\hot\org\jboss\helloworld\test [copy] Copying 1 file to C:\Projects\helloworld\src\hot\org\jboss\helloworld\test [copy] Copying 1 file to C:\Projects\helloworld\view [echo] Type 'seam restart' and go to http://localhost:8080/helloworld/ping.seam BUILD SUCCESSFUL Total time: 13 seconds C:\Projects\jboss-seam>
新しい Seam コンポーネントを追加したので、 展開したディレクトリのデプロイを再起動する必要があります。 seam restart
と入力するか、 Eclipse 内から生成されたプロジェクト build.xml ファイル の restart
ターゲットを実行することで行うことができます。 再起動を強制する別の方法は Eclipse の resources/META-INF/application.xml
ファイルを編集することです。 アプリケーションを変更するたびに JBoss を再起動する必要はないことに留意してください。
さあ、http://localhost:8080/helloworld/ping.seam
に進んで、クリックボタンを押してください。 プロジェクトの src
directory ディレクトリを見れば、このアクションに隠されたコードを見ることができます。 ping()
メソッドにブレークポイントを置いて、 クリックボタンを押してください。
最後に、PingTest.xml
ファイルを test パッケージに配置し、 Eclipse の TestNG プラグインを使用して統合テストを実行します。 別な方法として、 seam test
を使用してテストを起動するか、 生成されたビルドから test
ターゲットを起動します。
次のステップは、以下のようにフォームを生成することです。
seam new-form
C:\Projects\jboss-seam>seam new-form Buildfile: C:\Projects\jboss-seam\seam-gen\build.xml validate-workspace: validate-project: action-input: [input] Enter the Seam component name hello [input] Enter the local interface name [Hello] [input] Enter the bean class name [HelloBean] [input] Enter the action method name [hello] [input] Enter the page name [hello] setup-filters: new-form: [echo] Creating a new stateful session bean component with an action method [copy] Copying 1 file to C:\Projects\hello\src\hot\com\hello [copy] Copying 1 file to C:\Projects\hello\src\hot\com\hello [copy] Copying 1 file to C:\Projects\hello\src\hot\com\hello\test [copy] Copying 1 file to C:\Projects\hello\view [copy] Copying 1 file to C:\Projects\hello\src\hot\com\hello\test [echo] Type 'seam restart' and go to http://localhost:8080/hello/hello.seam BUILD SUCCESSFUL Total time: 5 seconds C:\Projects\jboss-seam>
再びアプリケーションを再起動させ、 http://localhost:8080/helloworld/hello.seam
に進みます。 生成されたコードを見てみましょう。 テストを実行します。 何か新しいフィールドをフォームと Seam コンポーネントに追加してみましょう。 (Java コードを変更したら常にデプロイを再起動することを忘れないようにしてください。)
手動でデータベースの中にテーブルを生成します。 (別のデータベースに切り替える必要がある場合はもう一度 seam setup
を実行します。) ここで次のように入力します。
seam generate-entities
デプロイを再起動して、 http://localhost:8080/helloworld
に進んでください。 データベースの参照、 既存オブジェクトの編集、 新しいオブジェクトの生成が可能です。 生成されたコードを見ると、おそらくあまりに簡単なのに驚かれたと思います。 Seam はデータアクセスコードが手作業で簡単に記述できるように設計されているからです。 また seam-gen を使用したずるをしたくない人でも大丈夫です。
既存の有効なエンティティクラスを src/main
に置いて、以下をタイプしてください。
seam generate-ui
デプロイメントをリスタートして、http://localhost:8080/helloworld
に進んでください。
最後に、 標準の Java EE 5 パッケージングを使用してアプリケーションをデプロイできるようにしたいと思います。 まず、 seam unexplode
を実行して展開したディレクトリを削除する必要があります。 EAR をデプロイするには、 コマンドプロンプトで seam deploy
を入力するか、 あるいは生成されたプロジェクトの build スクリプトの deploy
ターゲットを実行します。 seam undeploy
または undeploy
ターゲットを使うとアンデプロイができます。
デフォルトでは、アプリケーションは dev profile でデプロイされます。 EAR は persistence-dev.xml
ファイルと import-dev.sql
ファイルを含み、 myproject-dev-ds.xml
ファイルがデプロイされます。 プロファイルは変更可能で、 以下のように入力して prod profile を使用します。
seam -Dprofile=prod deploy
アプリケーション用に新しいデプロイメントプロファイルを定義することもできます。 プロジェクトに適切な名前が付いたファイルを追加します — 例えば、persistence-staging.xml
、import-staging.sql
と myproject-staging-ds.xml
などです。 -Dprofile=staging
を使ってプロファイルの名前を選択します。
展開形式のディレクトリで Seam アプリケーションをデプロイする場合、 開発時に増分ホットデプロイのサポートを受けるでしょう。 components.xml
に以下の行を追加することで、 Seam と Facelets の両方でデバッグモードを有効にする必要があります。
<core:init debug="true"
>
以下のファイルは、 Webアプリケーションを完全に再起動することなく置き換えがされるかもしれません。
facelets ページ
pages.xml
ファイル
ただし、 いずれかの Java コードを変更する必要がある場合は、 アプリケーションを完全に再起動する必要があります。 (JBoss ではトップレベルのデプロイメント記述子を更新することでこれを行えます。 EAR デプロイメントなら application.xml
、 WAR デプロイメントなら web.xml
です。)
しかし、 早いペースの編集/コンパイル/テストのサイクルを望むならば、 Seam は JavaBean コンポーネントの増分再デプロイメントをサポートしています。 この機能を有効にするためには、 JavaBean コンポーネントを WEB-INF/dev
ディレクトリにデプロイする必要があります。 その結果、コンポーネントは WAR あるいは EAR クラスローダではなく、 特殊な Seam クラスローダによってロードされるようになります。
以下の制約を知っている必要があります。
コンポーネントは JavaBean コンポーネントでなければならず、 EJB3 Bean は不可です。 (この制約は修正中です。)
エンティティはホットデプロイされることはありません。
components.xml
でデプロイされたコンポーネントはホットデプロイできない場合があります。
ホットデプロイ可能なコンポーネントは、 WEB-INF/dev
の外部にデプロイされたクラスからは見えません。
Seam デバッグモードは有効で jboss-seam-debug.jar
は WEB-INF/lib
になければなりません。
web.xml に Seam フィルタをインストールしなければなりません。
ロードとデバッグが有効な環境のシステムであればエラーが発生するかもしれません。
seam-gen を使用して WAR プロジェクトを生成する場合、 増分ホットデプロイメントは、src/hot
ソースディレクトリにあるクラスにそのまま使用可能です。 しかしながら、 seam-gen は EAR プロジェクトに対する増分ホットデプロイに対応していません。
Seam 2.0 was developed for JavaServer Faces 1.2. When using JBoss AS, we recommend using JBoss 4.2 or JBoss 5.0, both of which bundle the JSF 1.2 reference implementation. However, it is still possible to use Seam 2.0 on the JBoss 4.0 platform. There are two basic steps required to do this: install an EJB3-enabled version of JBoss 4.0 and replace MyFaces with the JSF 1.2 reference implementation. Once you complete these steps, Seam 2.0 applications can be deployed to JBoss 4.0.
JBoss 4.0 は Seam 互換のデフォルト設定で出荷されていません。 Seam を実行するために EJB3 プロファイルを選択して JEMS 1.2 インストーラ を使用してインストールしなければなりません。 Seam は EJB3 サポートを含まないインストールでは動作しません。 JEMS インストーラは http://labs.jboss.com/jemsinstaller/downloads からダウンロード可能です。
JBoss 4.0 の Web 設定は server/default/deploy/jbossweb-tomcat55.sar
にあります。 jsf-libs
ディレクトリから myfaces-api.jar
と myfaces-impl.jar
を削除する必要があります。 そして、ディレクトリに jsf-api.jar
、jsf-impl.jar
、el-api.jar
と el-ri.jar
をコピーする必要があります。 JSF の JAR は Seam lib
ディレクトリにあります。 el の JAR は Seam 1.2 リリースから取得可能です。
さらに conf/web.xml
を編集する必要があります。 myfaces-impl.jar
を jsf-impl.jar
に交換してください。