2009年8月7日金曜日

seam generate-entities

本質的にはあまり関係ないですが、PostgreSQLをリモートから接続できるようにします。

# echo "host all all 192.168.0.0/24 md5" >> /etc/postgresql/8.3/main/pg_hba.conf
# vi /etc/postgresql/8.3/main/postgresql.conf(下記の行を変更)
listen_addresses = '*'
# /etc/init.d/postgresql-8.3 restart

続いて、myprojectというテーブルを作成します。サンプルですので、カラムは2つしかありません。
# psql myproject -Useam -hlocalhost
Password for user seam:
myproject=> create table myproject (id serial primary key, val text not null);

pgAdminIIIなどで、PostgreSQLサーバーに対して接続できる状態であることを確認します。PostgreSQLサーバーがローカルにあるのであれば、それで特に何もしなくて良いでしょう。
PostgreSQLサーバーがリモートであれば、ローカルのseamからも見えるようにします。(今回からはseam setupの変更場所だけ書くようにします。)
> seam setup settings:
[echo] JDBC URL: jdbc:postgresql://192.168.0.7:5432/myproject
> seam update

これで、ローカルのseamでもリモートのseamでも同じPostgreSQLサーバーを見に行きます。(当たり前だけど)

続いて、C:\Projects\myproject\resources\META-INF\persistence-dev.xmlの設定がPostgreSQL用になってくれてないので

直しておきます。seam-genがやってほしいところ。変えるのは下記の行。
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQLDialect"/>

同様に、C:\Projects\myproject\resources\myproject-dev-ds.xmlの設定も甘いので、下記のようになるようにしましょう。
<datasources>
<local-tx-datasource>
............(snip)............
<metadata>
<type-mapping>PostgreSQL</type-mapping>
</metadata>
</local-tx-datasource>
</datasources>

で、今回は作成したテーブルに対して、自動的にJavaのO/Rマッピングクラスを生成し、CRUD出来るようにします。何するの?というと、下記一発!
> seam generate-entities

これだけで、myprojectテーブルに対してのCRUDができるようになります。
> seam deploy

して、リモートのJBossにデプロイしましょう。(ローカルのJBossでテストするなら seam deploy 時点でデプロイされています)
seamcrud

正しくデプロイされると、メニュー上に「Browse data」というリンクが出来ますので、「Myproject List」を選択します。遷移するとmyprojectテーブルに対しての検索画面が表示されます。簡単にCRUD出来る筈なので試してみてください。
seamcrud2

次回は、generate-entitiesで作られたクラスを追いかけてみましょう。

2009年8月1日土曜日

Seam on PostgreSQL

JBoss/SeamのデフォルトデータベースのデータソースはHSQLDBというJavaで実装されたものなのですが、PostgreSQLに変えたいのでやっておきます。

【インストール】
# apt-get install postgresql libpg-java

【ユーザ作成&パスワード設定】
# su - postgres
$ createuser seam
$ createuser seam

Shall the new role be a superuser? (y/n) n
Shall the new role be allowed to create databases? (y/n) y
Shall the new role be allowed to create more new roles? (y/n) n

$ createdb myproject
$ psql -l
$ psql template1
template1=# alter user seam password 'seamseamseam';
ALTER ROLE
template1=# \q

【接続確認】
$ psql myproject -Useam -hlocalhost
$ exit

【JDBCの設定】
# cd /usr/local/jboss/jboss-5.1.0.GA/server/default/lib
# ln -s /usr/share/java/postgresql.jar

また、/usr/share/java/postgresql.jar をローカルにも
C:\usr\local\jboss\jboss-5.1.0.GA\server\default\lib\postgresql.jar
として保存しておきます。

【seam-genの再実行】
HSQLDBからPostgreSQLに向き先を変更します。
C:\Projects\myproject\resources\myproject-dev-ds.xml
を削除してからseam-genを実行します。
あるいは、C:\Projects\myproject自体を削除してやり直しても構いません。

>seam setup
settings:
[echo] JBoss AS home: C:/usr/local/jboss/jboss-5.1.0.GA
[echo] GlassFish home: C:/Program Files/glassfish-v2.1
[echo] Project name: myproject
[echo] Project location: C:/Projects/myproject
[echo] Project type: ear
[echo] IceFaces: n
[echo] Action package: jp.vyw.myproject.action
[echo] Model package: jp.vyw.myproject.model
[echo] Test package: jp.vyw.myproject.test
[echo] JDBC driver class: org.postgresql.Driver
[echo] JDBC DataSource class: org.postgresql.jdbc3.Jdbc3ConnectionPool
[echo] Hibernate dialect: org.hibernate.dialect.PostgreSQLDialect
[echo] JDBC URL:ツꀀjdbc:postgresql://localhost:5432/myproject
[echo] Database username: seam
[echo] Database password: seamseamseam

>seam create-project
>seam undeploy
>seam deploy

新しいmyproject.earとmyproject-ds.xmlをLinuxサーバーにデプロイします。
デプロイ後 、再度動作を確認してください。

次回は、実際のPostgreSQLのテーブルとORMします。

seam-gen on Seam 2.2.0.GA

Seam 2.2.0.GAがリリースされてしまったので、seam-genやり直し。苦笑
JBoss 5.1.0.GAは省略するので、前回に沿って導入してください。

Seam 2.2.0.GAをダウンロード


C:\usr\local\jboss\jboss-seam-2.2.0.GA
として展開します。

で、Seamのセットアップ。

コマンドプロンプトを起動して、seam-genを実行。今回は単に動かすだけなので、ほとんど変更しなくて構いませんが、JBossは正しく指定するようにしましょう。また、今後EJBを使うので、Project typeをearにします。

>cd C:\usr\local\jboss\jboss-seam-2.2.0.GA
>seam setup

[echo] JBoss AS home: C:/usr/local/jboss/jboss-5.1.0.GA
[echo] GlassFish home: C:/Program Files/glassfish-v2.1
settings:
[echo] JBoss AS home: C:/usr/local/jboss/jboss-5.1.0.GA
[echo] GlassFish home: C:/Program Files/glassfish-v2.1
[echo] Project name: myproject
[echo] Project location: C:/Projects/myproject
[echo] Project type: ear
[echo] IceFaces: n
[echo] Action package: com.mydomain.myproject.action
[echo] Model package: com.mydomain.myproject.model
[echo] Test package: jp.vyw.myproject.test
[echo] JDBC driver class: org.hsqldb.jdbcDriver
[echo] JDBC DataSource class: org.hsqldb.jdbc.jdbcDataSource
[echo] Hibernate dialect: org.hibernate.dialect.HSQLDialect
[echo] JDBC URL: jdbc:hsqldb:.
[echo] Database username: sa
[echo] Database password:

>seam create-project
>seam deploy

とすると、JBossのdeployディレクトリにSeamの空プロジェクトがデプロイされます。 JBossが起きていれば、オートデプロイされますし、起きていなければ起こしてやると動作確認可能な状態となります。
http://localhost:8080/myproject

ブラウザで表示されればオーケーです。
手元のWindowsノートのスペックが厳しすぎなので、今回からはLinuxサーバー上のJBoss 5.1.0.GAにdeployします。 Linuxサーバー側の以下のディレクトリが一般ユーザで書き込み可能な状態となっていることを確認して、
ローカル(C:\usr\local\jboss\jboss-5.1.0.GA\server\default\deploy)
からLinux側(/usr/local/jboss/jboss-5.1.0.GA/server/default/deploy)
にEARファイル(myproject.ear)とデータソース(myproject-ds.xml)ををコピーします。転送クライアントは何でも良いですが、今回はWinSCPを使いました。

JBossが起動していなければ下記のようにして起動します。
JAVA_HOME=/usr/lib/jvm/java-1.5.0-sun \
JBOSS_HOME=/usr/local/jboss/jboss-5.1.0.GA \
/usr/local/jboss/jboss-5.1.0.GA/bin/run.sh -b 0.0.0.0

以下のアドレスで動作確認できることを確認します。
http://(サーバーのIP):8080/myproject

Welcome to Seam!

Seam 2.2.0.GA

Seam 2.2.0.GAがリリースされました。
https://jira.jboss.org/jira/secure/ReleaseNote.jspa?version=12312739&styleName=Text&projectId=10071&Create=Create

JBossのデフォルトターゲットが5になりました。