SeamFramework.orgCommunity Documentation

第39章 GlassFish アプリケーションサーバ上の Seam

39.1. GlassFish 環境とデプロイメント情報
39.1.1. インストール
39.2. jee5/booking サンプル
39.2.1. GlassFish へのアプリケーションのデプロイ
39.3. jpa booking サンプル
39.3.1. jpa サンプルのビルド
39.3.2. jpa サンプルのデプロイ
39.3.3. GlassFish v2 UR2 での変更点
39.4. seam-gen により生成されたアプリケーションの GlassFish v2 UR2 へのデプロイ
39.4.1. seam-gen セットアップの実行
39.4.2. GlassFish へのデプロイに必要な変更点

GlassFish は、Java EE 5 を完全に実装したオープンソースのアプリケーションサーバです。最新の安定リリースは v2 UR2 です。

まず最初に GlassFish 環境について述べて、どのように jee5 サンプルをデプロイするのかを詳しく説明します。次に、jpa サンプルアプリケーションをデプロイします。最後に、seam-gen により生成されたアプリケーションをどのようにして GlassFish 上で動作させるのかを示します。

この章のサンプルと情報は、すべて執筆時の GlassFish の最新バージョンに基づいています。

GlassFish をダウンロードして、インストールしてください:

$ java -Xmx256m -jar glassfish-installer-v2ur2-b04-linux.jar

インストールした後に、GlassFish をセットアップしてください:

$ cd glassfish; ant -f setup.xml

作成されたドメインの名前はdomain1 です。

次に、組み込み JavaDB サーバを起動します:

$ bin/asadmin start-database

注意

JavaDB は、HSQLDB が JBoss AS に含まれているのと同様に、GlassFish の組み込みデータベースです。

最後に、GlassFish サーバを起動してください:

$ bin/asadmin start-domain domain1

Web 管理コンソールは、http://localhost:4848/ からアクセス可能です。Web 管理コンソールには、デフォルトユーザ名 (admin) とパスワード (adminadmin) でアクセスすることができます。 別の方法としては、EAR / WAR ファイルを glassfish/domains/domain1/autodeploy にコピーしてデプロイすることもできます。

サーバとデータベースを停止するには、以下のようにしてください:

$ bin/asadmin stop-domain domain1; bin/asadmin stop-database

jee5/booking サンプルは、(JBoss AS 上で動作する) ホテル予約サンプルに基づいています。そのままで GlassFish 上で動作するように設計されています。このサンプルは $SEAM_DIST/examples/jee5/booking にあります。

これは、Hibernate JPA と JPA トランザクションを利用して Seam POJO で実装されたホテル予約サンプルです。アプリケーションサーバで動作させるのに、EJB3 サポートを必要としません。

サンプルには、GlassFish も含めた多くのコンテナ用のコンフィグレーションとビルドスクリプトが既に用意されています。

これは 項39.2.1. 「GlassFish へのアプリケーションのデプロイ」jee5 サンプルと非常に類似しています。

  • 管理コンソールへログインしてください:

    http://localhost:4848
  • 左側のサイドメニュー Applications (アプリケーション) の下にあるメニューオプションで Web Applications (Web アプリケーション) にアクセスしてください。

    • アプリケーションのインストール準備

      • ブラウザで examples/jpa/dist-glassfish/jboss-seam-jpa.war を指定してください。

      • OK ボタンを選択してください。

    • http://localhost:8081/jboss-seam-jpa/ からアプリケーションにアクセスすることができます。

Hypersonic SQL DB の代わりに Derby を使用

GlassFish でアプリケーションをそのまま動かすために、Derby (別名 JavaDB) データベースを GlassFish と一緒に使用しました。しかし、別のデータベース(例えば Hypersonic SQL) を使用することを強く推奨します。 examples/jpa/resources-glassfish/WEB-INF/classes/GlassFishDerbyDialect.class は、GlassFish サーバにおける Derby のバグを避けるハックです。もし GlassFish で Derby を使用するのであれば、これを Hibernate ダイアレクトとして使用しなければなりません。

seam-gen は、開発者が素早くアプリケーションを準備して動作させるのにとても役に立つツールで、独自の機能を追加するための雛形を用意します。seam-gen はそのままで JBoss AS で動作するようにコンフィグレーションされたアプリケーションを生成します。以下の手順では、GlassFish 上で動作させるために必要なステップを示します。項39.2. 「jee5/booking サンプル」 で述べたように、EJB3 や Seam POJO アプリケーションを GlassFish にデプロイすることは簡単です。

第一ステップは、雛形となるプロジェクトを生成できるように seam-gen をセットアップすることです。以下に実行したように、設定すべき項目がいくつかあります。特に、データソースと Hibernate の設定値は、プロジェクトを生成する環境に合わせて設定します。

$ ./seam setup
Buildfile: build.xml

init:

setup:
[echo] Welcome to seam-gen :-)
[input] Enter your Java project workspace (the directory that contains your
Seam projects) [C:/Projects] [C:/Projects]
/projects
[input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.3.GA]
[C:/Program Files/jboss-4.2.3.GA]

[input] Enter the project name [myproject] [myproject]
seamgen_example
[echo] Accepted project name as: seamgen_example
[input] Do you want to use ICEfaces instead of RichFaces [n] (y, [n])

[input] skipping input as property icefaces.home.new has already
been set.
[input] Select a RichFaces skin [blueSky] ([blueSky], classic, ruby, wine,
deepMarine, emeraldTown, japanCherry, 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.seamgen_example] [com.mydomain.seamgen_example]
org.jboss.seam.tutorial.glassfish.action
[input] Enter the Java package name for your entity beans
[org.jboss.seam.tutorial.glassfish.action]
[org.jboss.seam.tutorial.glassfish.action]
org.jboss.seam.tutorial.glassfish.model
[input] Enter the Java package name for your test cases
[org.jboss.seam.tutorial.glassfish.action.test]
[org.jboss.seam.tutorial.glassfish.action.test]
org.jboss.seam.tutorial.glassfish.test
[input] What kind of database are you using? [hsql] ([hsql], mysql, oracle,
postgres, mssql, db2, sybase, enterprisedb, h2)

[input] Enter the Hibernate dialect for your database
[org.hibernate.dialect.HSQLDialect]
[org.hibernate.dialect.HSQLDialect]

[input] Enter the filesystem path to the JDBC driver jar
[/tmp/seam/lib/hsqldb.jar] [/tmp/seam/lib/hsqldb.jar]

[input] Enter JDBC driver class for your database [org.hsqldb.jdbcDriver]
[org.hsqldb.jdbcDriver]

[input] Enter the JDBC URL for your database [jdbc:hsqldb:.]
[jdbc:hsqldb:.]

[input] Enter database username [sa] [sa]

[input] Enter database password [] []

[input] Enter the database schema name (it is OK to leave this blank) [] []

[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])

[input] Do you want to drop and recreate the database tables and data in
import.sql each time you deploy? [n] (y, [n])

[propertyfile] Creating new property file:
/home/mnovotny/workspaces/jboss/jboss-seam/seam-gen/build.properties
[echo] Installing JDBC driver jar to JBoss server
[copy] Copying 1 file to
/home/mnovotny/workspaces/jboss/jboss-seam/seam-gen/C:/Program
Files/jboss-4.2.3.GA/server/default/lib
[echo] Type 'seam create-project' to create the new project

BUILD SUCCESSFUL
Total time: 4 minutes 5 seconds

プロジェクトを作成するためには、$ ./seam new-project と入力してください。そして cd /projects/seamgen_example と入力して新しく作成されたディレクトリへ移動してください。

生成されたプロジェクトに変更を行う必要があります。

resources/META-INF/persistence-dev.xml
resources/GlassFishDerbyDialect.class

他のサンプルと同様に、データベースサポートのためのこのクラスを含める必要があります。jpa サンプルから seamgen_example/resources ディレクトリへコピーしてください。

$ cp \ 
$SEAM_DIST/examples/jpa/resources-glassfish/WEB-INF/classes/GlassFishDerbyDialect.class \ 
./resources
                     
resources/META-INF/jboss-app.xml

JBoss AS にはデプロイしないのでこのファイルを削除することができます (JBoss AS では jboss-app.xml を使用して、クラスローディングの分離を有効にします)

resources/*-ds.xml

JBoss AS にはデプロイしないのでこのファイルを削除することができます (これらのファイルは、JBoss AS ではデータソースを定義していますが、GlassFish ではデフォルトのデータソースを使用しています)

resources/WEB-INF/components.xml
  • コンテナ管理トランザクション統合を有効にします - <transaction:ejb-transaction/> コンポーネントと、そのネームスペース宣言 xmlns:transaction="http://jboss.com/products/seam/transaction" を追記してください

  • jndi-patternjava:comp/env/seamgen_example/#{ejbName}/local に修正します

resources/WEB-INF/web.xml

jee5/booking サンプルと同様に、web.xml に EJB 参照を加える必要があります。これらの EJB 参照には、GlassFish が適切なバインディングを実行するために空の local-home を設定することが必要となります。


<ejb-local-ref>
    <ejb-ref-name
>seamgen_example/AuthenticatorAction</ejb-ref-name>
    <ejb-ref-type
>Session</ejb-ref-type>
    <local-home
></local-home>
    <local
>org.jboss.seam.tutorial.glassfish.action.Authenticator</local>
  </ejb-local-ref>
   
  <ejb-local-ref>
    <ejb-ref-name
>seamgen_example/EjbSynchronizations</ejb-ref-name>
    <ejb-ref-type
>Session</ejb-ref-type>
    <local-home
></local-home>
    <local
>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
  </ejb-local-ref>

このアプリケーションは、jee5/booking サンプルと同様の変更が必要となります。