JBoss Seam BookingサンプルをPostgreSQLで試す。

 JBoss Seamのサンプルアプリケーション Bookingは付属のHSQLDBと言うDatabaseを使用していますが、これを以前セットアップしたPostgreSQL 8.1に換えてみました。

 環境は下記の通りです。

DB:VMWare上のFreeBSD 6.0へportsでインストールしたPostgreSQL 8.1
Client:Eclipse 3.1.1
JBoss-IDE 1.5RC1
TestNG for Eclipse 4.2.0

  • CVSから最新のjboss-seamを持ってくる。
  • build Pathにantlr-2.7.6rc1.jarを加え、antlr-2.7.5H3.jarを削除する。
  • examples/booking/resources/booking-ds.xmlを編集する。

        <datasources>
            <local-tx-datasource>
                <jndi-name>bookingDatasource</jndi-name>
                <connection-url>jdbc:postgresql://192.168.xx.xx:5432/ejbtest</connection-url>
                <driver-class>org.postgresql.Driver</driver-class>
                <user-name>tester1</user-name>
                <password>himitsu</password>
            </local-tx-datasource>
        </datasources>

  • examples/booking/resources/META-INF/jboss-beans.xmlを編集する。
    • driverClassを上記のようにorg.postgresql.Driverへ。
    • connectionURLを上記のようにjdbc:postgresql://192.168.xx.xx:5432/ejbtestへ。
    • userNameを上記のようにtester1へ。
    • himitsuを追加する。
  • examples/booking/resources/META-INF/persistence.xmlを編集する。
  • build.propertiesのjboss.homeをJBOSS_HOMEへ変更する。
  • build.xmlのproperty name="deploy.dir"のvaluevalue="${jboss.home}/server/postgres/deploy"へ変更する。
  • examples/booking/src/User.javaを編集する。PostgreSQLではuserは予約語なのでuserと言うテーブルは作成出来ない。
    • クラスに@Table(name="Users")を追加する。
  • buildする。

 
 以上でDeployまで終わっているので、JBossを-c postgresで起動します。JBoss自身が使用するテーブルの他にBookingアプリケーションのテーブルbooking, hotel,usersが作成されていますが、テーブルは空なので、examples/booking/resources/import.sqlの各行を実行します。最後にhttp://localhost:8080/seam-bookingへアクセスしてみます。



 上記でPostgreSQLで動作するのですが、SeamにはTestNGを使って簡単にテストを行うことが出来ます。せっかくですのでTestNGを使ってのテストもPostgreSQLを使って行えるようにします。TestNGで行うテストはJBoss本体を使用しないで、Embeddable EJB3を使っているようです。

  • embedded-ejb/conf/default.persistence.propertiesを編集します。
  • embedded-ejb/conf/embedded-jboss-beans.xmlを編集する。
    • bean name="DefaultDSBootstrap"のdriverClass, connectionURL, userNameを編集し、passwordプロパティを追加する。
  • examples/booking/src/Hotel.javaを編集する。
    • stateの@Length(min=2, max=2)をmax=20へ。Hibernateのhbm2ddlがテーブルを作成する際にstateフィールドがchar(2)で作成され、import.sqlが実行される際にUSA以外のホテルのstateのフィールドが国名となっているため2文字以上のstateフィールドを持つInsert文が失敗する為です。


後は、EclipseのDebugからTestNGを選択してテストを行えばOKです。