いよいよアプリケーションを自動生成することにする。JBoss Seamのホームディレクトリ(筆者の環境では、C:\seam\jboss-seam-2.0.0.GA)まで移動し、次のコマンドを順番に実行するだけだ。

  1. seam setup
  2. seam create-project
  3. seam generate-entities
  4. seam explode

1のseam setupコマンドを実行することで、プロジェクトを生成するための設定項目(build.properties)が準備される。筆者の環境では、リスト1の内容を準備した。

リスト1 筆者の環境にて生成されたbuild.properties

workspace.home=C\:/workspace
jboss.home=C\:/Program Files/jboss-4.2.2.GA
icefaces.home=C\:/icefaces/ICEfaces-1.6.1-bin/icefaces
model.package=com.example.model
project.name=iceSeamGen
project.type=ear
action.package=com.example.action
test.package=com.example.test
richfaces.skin=DEFAULT
database.type=mysql
database.exists=y
database.drop=n
hibernate.default_catalog.null=
hibernate.default_schema.null=
hibernate.connection.username=user
hibernate.connection.password=password
hibernate.connection.driver_class=com.mysql.jdbc.Driver
hibernate.cache.provider_class=org.hibernate.cache.HashtableCacheProvider
hibernate.dialect=org.hibernate.dialect.MySQLDialect
hibernate.connection.url=jdbc\:mysql\://localhost\:3306/icefaces
driver.jar=C\:/Program Files/jboss-4.2.2.GA/server/default/lib/mysql-connector-java-5.1.5-bin.jar

2のseam create-projectコマンドを実行することで、このbiuld.propertiesに従って、プロジェクトが生成される。

3のseam generate-entitiesコマンドを実行することで、リスト2、リスト3、リスト4のソースコードが生成される。

リスト2は、テーブルICE_USERに対応するエンティティBeanである(firstNameフィールドに関する箇所以外を省略している)。前述した通り、アノテーション付きのPOJOになっており、アノテーションは、図8のテーブルの内容に対応している。

リスト2 エンティティBeanであるIceUserクラス

@Entity
@Table(name = "ice_user", catalog = "icefaces")
public class IceUser implements java.io.Serializable {
    private String firatName;

    @Column(name = "FIRAT_NAME", nullable = false, length = 45)
    @NotNull
    @Length(max = 45)
    public String getFiratName() {
        return this.firatName;
    }
    public void setFiratName(String firatName) {
        this.firatName = firatName;
    }
}

エンティティBeanのほかにも、リスト3のようなHomeクラス、およびリスト4のようなQueryクラスが生成される。これらのクラスは、データベースアクセスに関する基本的なプログラムを提供する「Seamアプリケーションフレームワーク」を用いるクラスであり、生成するアプリケーションにおける基本的な機能は、これらのクラスにより実装されている。Homeクラスは、エンティティBeanに対するCRUD機能を提供する。また、Queryクラスは、エンティティBeanのリストを取得するために用いられる(取得するためのクエリに条件句を追加可能)。

リスト3 HomeクラスであるIceUserHomeクラス

@Name("iceUserHome")
public class IceUserHome extends EntityHome { /* 省略 */ }

リスト4 QueryクラスであるIceUserListクラス

@Name("iceUserList")
public class IceUserList extends EntityQuery { /* 省略 */ }

※ Seamアプリケーションフレームワークの詳細については、JBoss Seamリファレンスマニュアルを参考にしてほしい。

さて、コマンドの実行に戻ろう。最後に、4のseam explodeコマンドを実行することで、生成されたEARアプリケーション(iceSeamGen.ear)が、JBoss AS上に、展開されたまま(exploded)デプロイされる。

この状態で、JBoss ASを起動し、(リスト1の設定内容であれば)次のURLにアクセスすると、アプリケーションが利用できる。

http://localhost:8080/iceSeamGen/