SeamFramework.org Community Documentation

- 前のページ
- 次のページ

## 第2章 seam-gen を使って Seam を始めよう

Seam ディストリビューションはコマンドラインユーティリティを含んでおり、 Eclipse プロジェクトのセットアップ、 Seam のスケルトンコードの生成、 既存データベースからアプリケーションのリバースエンジニアリングをとても簡単にします。

これは、Seam 入門として良い方法です。 そして、状態をデータベースに保管するとてもつまらないアプリケーションを構築するために、 新しいおもちゃがどれほどすばらしいかを大げさに話す退屈な Ruby 野郎の一人に次にエレベータの中で捕まったとわかった時のために、 攻撃材料を与えてくれます。

このリリースでは、seam-gen は JBoss AS で使用するのが最良です。 プロジェクト設定をマニュアルで少し変更するだけで、生成されたプロジェクトを他の J2EE や Java 5 アプリケーションサーバー用にも使用可能です。

Eclipse がなくても seam-gen は使用可能ですが、このチュートリアルでは Eclipse を使用してデバッグや統合テストを行う方法を示したいと思います。 Eclipse をインストールしたくない方も、 このチュートリアルを続けることができます — コマンドラインからすべてのステップは実行可能です。

Seam-gen は簡単に言ってしまえば、テンプレートと共に提供される Hibernate Tools をラッピングした複雑な Ant スクリプトです。 これは必要であれば簡単にカスタマイズできることを意味します。

## 2.1. 始める前に

始める前に、JDK 5 または JDK 6 ( 詳細は 項42.1. 「JDK の依存性」 参照 ) と JBoss AS 4.2 または 5.0 と Ant 1.7.0 そして、それに合う Eclipse 用の JBoss Tools プラグイン と TestNG プラグインがインストールされていることを確認してください。 Eclipse の JBoss サーバビューに JBoss 設定を追加してください。 デバッグモードで JBoss を起動してください。 最後に、Seam ディストリビューションを展開したディレクトリでコマンドプロンプト起動してください。

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` が発生した時点で対処してください。

## 2.2. 新しいプロジェクトのセットアップ

最初にすべきことはあなたの環境用に seam-gen を設定することです。 ( JBoss AS インストールディレクトリ、プロジェクトワークスペース、データベースコネクション ) それは簡単です。以下のようにタイプしてください。

    cd jboss-seam-2.2.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` とタイプすることでプロジェクトのデプロイが可能です。

welcome page を見るには、`http://localhost:8080/helloworld` に進んでください。 これは、テンプレート `view/layout/template.xhtml` を使用した facelets page, `view/home.xhtml` です。 Eclipse からこのページやテンプレートの編集が可能です。 そしてブラウザを更新することで 即座に 結果を見ることが可能です。

プロジェクトディレクトリに 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` ファイルは、 本番環境データベースにアプリケーションをデプロイするときに使用します。 デプロイ時にスキーマは自動的にエキスポートされません。

## 2.3. 新規のアクションを生成する

従来のアクションスタイルの 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` ターゲットを起動します。

## 2.4. アクションのあるフォームを生成する

次のステップは、以下のようにフォームを生成することです。

    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 コードを変更したら常にデプロイを再起動することを忘れないようにしてください。)

## 2.5. 既存のデータベースからアプリケーションを自動生成する

手動でデータベースの中にテーブルを生成します。 (別のデータベースに切り替える必要がある場合はもう一度 `seam setup` を実行します。) ここで次のように入力します。

    seam generate-entities

デプロイを再起動して、 `http://localhost:8080/helloworld` に進んでください。 データベースの参照、 既存オブジェクトの編集、 新しいオブジェクトの生成が可能です。 生成されたコードを見ると、おそらくあまりに簡単なのに驚かれたと思います。 Seam はデータアクセスコードが手作業で簡単に記述できるように設計されているからです。 また seam-gen を使用したずるをしたくない人でも大丈夫です。

## 2.6. 既存の JPA/EJB3 エンティティからアプリケーションを自動生成する

既存の有効なエンティティクラスを `src/main` に置いて、以下をタイプしてください。

    seam generate-ui

デプロイメントをリスタートして、`http://localhost:8080/helloworld` に進んでください。

## 2.7. EAR 形式でアプリケーションをデプロイする

最後に、 標準の 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` を使ってプロファイルの名前を選択します。

## 2.8. Seam と増分ホットデプロイメント

展開形式のディレクトリで 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 プロジェクトに対する増分ホットデプロイに対応していません。

## 2.9. JBoss 4.0 で Seam を使用する

Seam 2 は JavaServer Faces 1.2 にデプロイされます。 JBoss AS を使用するならば、JBoss 4.2 または JBoss 5.0を使用することを推奨します。 これらの両方に JSF 1.2 リファレンス実装がバンドルされています。 でも、まだ JBoss 4.0 プラットフォームで Seam 2 を使用することも可能です。 これを行うには 2 つの基本的なステップが必要です。 EJB3 が有効なバージョンの JBoss 4.0 のインストール、 MyFaces を JSF 1.2 リファレンス実装に交換。 これらのステップを行えば、Seam 2 アプリケーションは JBoss 4.0 にデプロイ可能になります。

### 2.9.1. JBoss 4.0 のインストール

JBoss 4.0 は Seam 互換のデフォルト設定で出荷されていません。 Seam を実行するために EJB3 プロファイルを選択して JEMS 1.2 インストーラ を使用してインストールしなければなりません。 Seam は EJB3 サポートを含まないインストールでは動作しません。 JEMS インストーラは http://labs.jboss.com/jemsinstaller/downloads からダウンロード可能です。

### 2.9.2. JSF 1.2 RI のインストール

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` に交換してください。

- 前のページ第1章 Seam チュートリアル
- 上に戻る
- ホーム
- 次のページ第3章 JBoss Tools を使って Seam を始めよう