SeamFramework.orgCommunity Documentation

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

41.1. GlassFish 環境とデプロイメント情報
41.1.1. インストール
41.2. jee5/booking サンプル
41.2.1. jee5/booking サンプルのビルド
41.2.2. GlassFish へのアプリケーションのデプロイ
41.3. jpa booking サンプル
41.3.1. jpa サンプルのビルド
41.3.2. jpa サンプルのデプロイ
41.3.3. GlassFish v2 UR2 での変更点
41.4. seam-gen により生成されたアプリケーションの GlassFish v2 UR2 へのデプロイ
41.4.1. seam-gen セットアップの実行
41.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 も含めた多くのコンテナ用の構成とビルドスクリプトが既に用意されています。

これは ear でなく war であることを除けば、 項41.2.2. 「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 上で動作させるために必要なステップを示します。

第一ステップは、雛形となるプロジェクトを生成できるように 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} に修正します

resources/WEB-INF/web.xml

jee5/booking サンプルと同様に、web.xml に EJB 参照を加える必要があります。厳密にはこの参照は必要でありませんが、良い標準となるよう明示します。これらの EJB 参照には、 JBoss AS 4.x との互換性を保持するために空の local-home を設定することが必要となります。


<ejb-local-ref
>              
    <ejb-ref-name
>seamgen_example/AuthenticatorAction</ejb-ref-name
>                
    <ejb-ref-type
>Session</ejb-ref-type
>     
    <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
>org.jboss.seam.transaction.LocalEjbSynchronizations</local>
  </ejb-local-ref
>

上述のような EJB 参照が含まれる web.xml を JBoss AS 4.x にデプロイする場合、これらそれぞれに関するローカル JNDI 名も以下で示すように jboss-web.xml に定義する必要があります。この行程は GlassFish へのデプロイでは必須ではりませんが、 JBoss AS 4.x にアプリケーションをデプロイする場合を考慮し言及しておきます。 ( JBoss AS 5 では必要ありません)


<ejb-local-ref
>              
    <ejb-ref-name
>seamgen_example/AuthenticatorAction</ejb-ref-name
>                
    <local-jndi-name
>AuthenticatorAction</local-jndi-name
>  
  </ejb-local-ref>
   
  <ejb-local-ref>
    <ejb-ref-name
>seamgen_example/EjbSynchronizations</ejb-ref-name
>  
    <local-jndi-name
>EjbSynchronizations</local-jndi-name>
  </ejb-local-ref
>

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