SeamFramework.org Community Documentation

- 前のページ
- 次のページ

## 第40章 IBM Websphere AS 上の Seam

Websphere AS V7 は IBMの提供するアプリケーションサーバーです。このリリースは、完全な Java EE 5 認定プロダクトです。

最初に、サンプルのために使用する WebSphere AS 環境に関しての基礎的な情報を詳しく述べます。JEE5 booking サンプルでそれらのステップの詳細を説明します。 JPA サンプルアプリケーションもデプロイします。

## 40.1. Websphere AS 環境とデプロイメント情報

WebSphere AS は商用製品なので、特定のインストールタイプやライセンスについて提供される手順などのインストールの詳細については説明しません。ここでは、すべてのサンプルを動作させるのに必要となる使用したサーバの正確なバージョンと、インストールのヒント、カスタムプロパティについて詳しく述べます。

### 40.1.1. インストールするバージョン

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

- Websphere Application Server V7

もし、インストールプロセスでプロファイルを作成しない場合は、WebSphere AS をインストールした後で、Profile Management Tool でサーバープロファイルを作成してください。

## 40.2. `jee5/booking` サンプル

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

### 40.2.1. 構成ファイルの変更

雛形のサンプルに対して必要となる構成ファイルの変更点は以下の通りです。

`resources/WEB-INF/components.xml`

  WAS では EJB をルックアップする際の名前を変更する必要があります。`jndi-pattern` 属性の最後から `/local` を取り除く必要があります。以下のように変更します。

      <core:init jndi-pattern="java:comp/env/jboss-seam-jee5/#{ejbName}" debug="true"/>

`resources/META-INF/ejb-jar.xml`

  `ejb-ref-name` から、/local 文字列を置き換える必要があります。次の最終コードを見てください。

         <enterprise-beans>

            <!-- EJB reference required when one Seam EJB component references another Seam EJB component using @In -->

            <!-- Not required if you inject using @EJB, but then you lose state management and client-side interceptors (e.g., security) -->

            <session>

               <ejb-name

      >RegisterAction</ejb-name>

               <ejb-local-ref>

                  <ejb-ref-name

      >jboss-seam-jee5/AuthenticatorAction</ejb-ref-name>

                  <ejb-ref-type

      >Session</ejb-ref-type>

                  <local

      >org.jboss.seam.example.booking.Authenticator</local>

               </ejb-local-ref>

            </session>

         </enterprise-beans

      >

`resources/WEB-INF/web.xml`

  次に、`web.xml` の EJB 参照について変更を行う必要があります。これらは、WAS が EAR モジュール内の EJB3 参照を、実際には EAR モジュール内にある EJB3 の Bean にバインドすることを可能にするための変更です。`ejb-local-refs` のすべての /local 文字列を以下の値で置き換えてください。

        <!-- JEE5 EJB3 names -->

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/AuthenticatorAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.Authenticator</local>

        </ejb-local-ref

      >

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/BookingListAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.BookingList</local>

        </ejb-local-ref>

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/RegisterAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.Register</local>

        </ejb-local-ref>

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/ChangePasswordAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.ChangePassword</local>

        </ejb-local-ref>

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/HotelBookingAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.HotelBooking</local>

        </ejb-local-ref>

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/HotelSearchingAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.example.booking.HotelSearching</local>

        </ejb-local-ref>

        <ejb-local-ref>

          <ejb-ref-name

      >jboss-seam-jee5/EjbSynchronizations</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.transaction.LocalEjbSynchronizations</local>

        </ejb-local-ref

      >

  `EjbSynchronizations` は Seam の組み込みEJB であって、ホテル予約サンプルの一部ではないことにも注意してください。このことにより、アプリケーションの `components.xml` の中で `transaction:ejb-transaction` を指定すれば、web.xml の中に以下の設定を含めなければならないことになります。

        <ejb-local-ref>

          <ejb-ref-name

      >myapp/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>

  web.xml の中で上記の設定を行わなければ、以下のエラーが発生します。

      Name comp/env/myapp/EjbSynchronizations not found in context java:

`resources/META-INF/persistence.xml`

  このサンプルでは、WAS のデフォルトのデータソースを使用します。そのため、`jta-data-source` 要素を変更します。

      <jta-data-source

      >DefaultDatasource</jta-data-source>

  Hibernate プロパティを設定する必要があります。まず最初に GlassFish プロパティをコメントアウトします。次に以下のプロパティを追加修正する必要があります。

      <!--<property name="hibernate.transaction.flush_before_completion" value="true"/>-->

      <property name="hibernate.cache.provider_class"

                value="org.hibernate.cache.HashtableCacheProvider"/>

      <property name="hibernate.dialect" value="GlassfishDerbyDialect"/>

      <property name="hibernate.transaction.manager_lookup_class"

                value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>

  - `hibernate.transaction.manager_lookup_class` — WAS 6.X、7 用の標準 Hibernate トランザクションマネージャ

  - `hibernate.transaction.flush_before_completion` — コメントアウトします。コンテナ管理トランザクションを使用するためです。これを `true` に設定すると、EJBContext をルックアップした時に、WAS が例外をスローします。

        com.ibm.wsspi.injectionengine.InjectionException:
                         EJBContext may only be looked up by or injected into an EJB

  - `hibernate.dialect` — WAS 6.1.0.9 から組み込み DB は、GlassFish v2 と同じ Derby DB に変更されました。

`src/GlassfishDerbyDialect.java`

  `GlassfishDerbyDialect.java` を入手して `/src` ディレクトリにコピーしなければなりません。このクラスは JPA サンプルのソースディレクトリ中にあり、`jee5/booking` ディレクトリから以下のコマンドを使用してコピーできます。

      cp ../../jpa/src/GlassfishDerbyDialect.java
         ./src

  このクラスを `jboss-seam-jee5.jar` ファイルの中に入れます。

`resources/import.sql`

  Derby DB とダイアレクトのいずれも `ID` カラムの生成をサポートしないので、JPA サンプルからこのファイルをコピーしなければなりません。ファイルは、ID カラムの違い以外は同一です。 以下のコマンドを使用してコピーしてください

      cp ../../jpa/resources-websphere7/import.sql ./resources

### 40.2.2. `jee5/booking` サンプルのビルド

アプリケーションに行った変更を有効にするには、`build.xml` を変更する必要があります。アプリケーションを WAS で動作させるためには、jar を追加する必要があります。ここでは、 `build.xml` で必要となる変更点を説明します。

#### 40.2.2.1. ライブラリ依存関係の変更

アプリケーションからのログ出力すべてが WAS のログに追加されるようにするために、`log4j.jar` を削除します。log4j を完全に構成するには追加の手順が必要ですが、それはこのドキュメントの範囲を越えます。

#### 40.2.2.2. `build.xml` ファイルの更新

以下のエントリを `build.xml` ファイルの最後に追加してください。これは、 `jboss-seam-jee5.jar` に含めるのに使用するデフォルトの fileset を再設定します。

       <fileset id="jar.resources" dir="${resources.dir}">

          <include name="import.sql" />

          <include name="seam.properties" />

          <include name="META-INF/persistence.xml" />

          <include name="META-INF/ejb-jar.xml" />

       </fileset

    >

最後に残された作業は、 `ant archive` タスクを実行することです。アプリケーションは、`jee5/booking/dist` ディレクトリにビルドされます。

### 40.2.3. Websphere へのアプリケーションのデプロイ

必要なものはすべて所定の位置に揃いました。残されたことはデプロイすることです - あとわずか数ステップの手順です。

デプロイには、WebSphere の管理コンソールを使用します。従来どおり従われなければならない手順とヒントがあります。

以下の手順は、上記で述べたバージョンの WAS での手順です。ポート番号はデフォルト値ですが、それらを変更しているのなら置き換えてください。

1.     https://localhost:9043/admin

   から、administration console にログインします。もしくは、

       http://localhost:9060/admin

2. `Applications --> Application Type` 左サイドメニューの下にある `Websphere enterprise applications` メニューオプションにアクセスしてください。

3. `Enterprise Applications` テーブルの先頭で `Install` を選択してください。以下はインストールウィザードページの各々で、実行すべき手順です。

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

     - ファイルアップロードのウィジェットを使用して、ブラウザで `examples/jee5/booking/dist/jboss-seam-jee5.ear` ファイルを指定してください。

     - `Next` ボタンを選択してください。

     - `Fast Path` ボタンを選択してください。

     - `Next` ボタンを選択してください。

   - `インストールオプションの選択`

     - `Deploy enterprise beans` と `Allow EJB reference targets to resolve automatically` チェックボックスを選択してください。アプリケーションのパッケージングに WebSphere AS ツールを使用していなければ、これが必要となります。

     - `Next` ボタンを選択してください。

   - `サーバへモジュールのマップ`

     - 一台のサーバで使用する限りでは変更は必要ありません。`Next` ボタンを選択してください。

   - `Summary (要約)`

     - ここでは変更は必要ありません。`Finish` ボタンを選択してください。

   - `Installation (インストール)`

     - アプリケーションがインストールされてデプロイされます。

     - `Save` リンクを選択すると、`Enterprise Applications` テーブルに戻ります。

4. アプリケーションのインストールが完了しましたが、実行の前にいくつかの調整をする必要があります。

   - `Enterprise Applications (エンタープライズアプリケーション)` テーブルで `Seam Booking` リンクを選択するところから始めてください。

   - `Manage Modules` リンクを選択してください。

   - `jboss-seam-jee5-booking.war` lリンクを選択してください。

   - `Class loader order` コンボボックスを `Classes loaded with application class loader first (parent last)` に変更してください。

   - `Apply (適用)` を選択し、`Save (保存)` オプションを選択してください。

   - `Seam Booking` ページに戻ります。

   - このページで `Class loading and update detection` リンクを選択してください。

   - ラジオボタンで `Classes loaded with application class loader first` を選択してください。

   - `Apply (適用)` を選択し、`Save (保存)` オプションを選択してください。

5. アプリケーションを開始するために `Enterprise Applications (エンタープライズアプリケーション)` テーブルに戻って、リストの中からサンプルのアプリケーションを選択してください。テーブルの先頭で `Start` ボタンを選択してください。

6. `http://localhost:9080/seam-jee5-booking/index.html` からアプリケーションにアクセスできます。

## 40.3. `jpa` booking サンプル

幸いなことに `jpa` サンプルを動作させるのは、 `jee5` サンプルよりも簡単です。これはホテル予約サンプルを Seam POJOs で実装したもので、Hibernate JPA を JPA トランザクションとともに使用します。 実行には EJB3 サポートを必要としません。

サンプルには、Websphere も含めた多くのコンテナ用の構成とビルドスクリプトが既に用意されています。

最初に行うことは、サンプルのビルトとデプロイです。そのあとに必要な設定変更を行います。

### 40.3.1. `jpa` サンプルのビルド

ビルドに必要なことは、正しく ant コマンドを実行することだけです。

    ant websphere7

これは、コンテナに対応したアーカイブと、`websphere7` という名前の展開形式のディレクトリアーカイブを作成します。

### 40.3.2. `jpa` サンプルのデプロイ

これは `jee5` サンプルの 項40.2.3. 「Websphere へのアプリケーションのデプロイ」 と類似していますが、多くの手順は必要ありません。

- `Enterprise Applications (エンタープライズアプリケーション)` テーブルから `Install (インストール)` ボタンを選択してください。

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

    - ファイルアップロードのウィジェットを使用して、ブラウザで `examples/jpa/dist-websphere7/jboss-seam-jpa.war` ファイルを指定してください。

    - `Fast Path` ボタンを選択してください。

    - `Next` ボタンを選択してください。

  - `Next` ボタンを選択して、3 ページ先まで進んでください。そこまで変更は必要ありません。

  - `コンテキストルートへの Web モジュールのマップ`

    - `Context root` テキストボックスに `jboss-seam-jpa`を入力してください。

    - `Next` ボタンを選択してください。

  - `Summary (要約)` ページ

    - お望みなら設定を確認して、`Finish (完了)` ボタンを選択してアプリケーションのインストールを完了してください。インストールが完了して `Save (保存)` リンクを選択すると `Enterprise Applications (エンタープライズアプリケーション)`テーブルに戻ります。

- `jee5` サンプルについては、アプリケーションの実行に前にクラスローダを変更する必要があります。 installation adjustments for jee5 example の手順に従ってください。ただし、`Seam Booking` を `jboss-seam-jpa_war` と置き換えて使用してください。

- 最後にアプリケーションを開始するには、`Enterprise Applications (エンタープライズアプリケーション)` テーブルでアプリケーションを選択して `Start (開始)` ボタンをクリックしてください。

- `http://localhost:9080/jboss-seam-jpa/index.html` からアプリケーションにアクセスできます。

### 40.3.3. Websphere AS V7 での変更点

JBoss 4.2 と Websphere AS V7 にデプロイされる JPA サンプルの相違点は、多くがライブラリと構成ファイルです。

- 構成ファイルの変更

  - `META-INF/persistence.xml` — 必要な主な変更点は、データソース JNDI の変更、Websphere トランザクションマネージャのルックアップクラスへの変更、Hibernate ダイアレクトを `GlassfishDerbyDialect` に変更することです。

  - `WEB-INF/components.xml` — ここでの変更点は、 /local 文字列の無い `jndi-pattern` にすることです。

  - `META-INF/ejb-jar.xml` — `ejb-ref-name` の場合と同様に、/local 文字列は `jboss-seam-jee5/AuthenticatorAction` で置き換えられる必要があります。

  - `src/GlassfishDerbyDialect.java` — このクラスは、Hibernate ダイアレクトを `GlassfishDerbyDialect`に変更するのに必要です。

  - `import.sql` — ダイアレクトと Derby DB のいずれでも `ID` カラムは生成されないので、このファイルから削除されています。

- 依存ライブラリの変更

  Websphere には、JBoss AS に含まれていたライブラリのうちでないものがあるので、いくつかのライブラリパッケージが必要となります。これらは、主に Hibernate ととその依存ライブラリです。以下は、JBoss `JPA` サンプルに必要な追加の jar のリストです。

  - Hibernate を JPA provider プロバイダとして使用するためには、以下の jar が必要です。

    - `hibernate.jar`
    - `hibernate-annotations.jar`
    - `hibernate-commons-annotations.jar`
    - `hibernate-entitymanager.jar`
    - `hibernate-validator.jar`
    - `commons-collections.jar`
    - `jboss-common-core.jar`

  - WebSphere が必要とするさまざまなサードパーティ jar。

    - `antlr.jar`
    - `cglib.jar`
    - `asm.jar`
    - `dom4j.jar`
    - `javassist.jar`
    - `concurrent.jar`

## 40.4. `seam-gen` により生成されたアプリケーションの Websphere V7 へのデプロイ

`seam-gen` は、開発者が素早くアプリケーションを準備して動作させるのにとても役に立つツールで、独自の機能を追加するための雛形を用意します。`seam-gen` はそのままで JBoss AS で動作するように構成されたアプリケーションを生成します。以下の手順では、Websphere 上で動作させるために必要なステップを示します。項40.2. 「`jee5/booking` サンプル 」 で述べたように、EJB3 アプリケーションを動作させるには変更が必要です。このセクションでは、その正確な手順を示します。

### 40.4.1. `seam-gen` セットアップの実行

第一ステップは、雛形となるプロジェクトを生成できるように `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]
    /home/jbalunas/workspace
        [input] Enter your JBoss home directory [C:/Program Files/jboss-4.2.3.GA]
    [C:/Program Files/jboss-4.2.3.GA]
    /home/jbalunas/jboss/jboss-4.2.3.GA
        [input] Enter the project name [myproject] [myproject]
    websphere_example
         [echo] Accepted project name as: websphere_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, sakura, 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 [org.jboss.seam.
    tutorial.websphere.action] [org.jboss.seam.tutorial.websphere.action]
    org.jboss.seam.tutorial.websphere.action
        [input] Enter the Java package name for your entity beans [org.jboss.seam.
    tutorial.websphere.model] [org.jboss.seam.tutorial.websphere.model]
    org.jboss.seam.tutorial.websphere.model
        [input] Enter the Java package name for your test cases [org.jboss.seam.
    tutorial.websphere.action.test] [org.jboss.seam.tutorial.websphere.action.test]
    org.jboss.seam.tutorial.websphere.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:
    /rhdev/projects/jboss-seam/svn-seam_2_2/jboss-seam-2_2/seam-gen/build.properties
         [echo] Installing JDBC driver jar to JBoss server
         [copy] Copying 1 file to /home/jbalunas/jboss/jboss-4.2.3.GA/server/default/lib
         [echo] Type 'seam create-project' to create the new project

    BUILD SUCCESSFUL
    Total time: 3 minutes 5 seconds

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

### 40.4.2. Websphere へのデプロイに必要な変更点

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

#### 40.4.2.1. 構成ファイルの変更

`resources/META-INF/persistence-dev.xml`

  - `jta-data-source` を `DefaultDatasource` に修正してください。組み込みの Websphere DB を使用します。

  - 以下のプロパティを追加修正してください。項40.2. 「`jee5/booking` サンプル 」 に詳細が説明されています。

        <property name="hibernate.dialect" value="GlassfishDerbyDialect"/>

        <property name="hibernate.hbm2ddl.auto" value="update"/>

        <property name="hibernate.show_sql" value="true"/>

        <property name="hibernate.format_sql" value="true"/>

        <property name="hibernate.cache.provider_class"

                  value="org.hibernate.cache.HashtableCacheProvider"/>

        <property name="hibernate.transaction.manager_lookup_class"

                  value="org.hibernate.transaction.WebSphereExtendedJTATransactionLookup"/>

  - EntityManagerFactory を定義する JBoss AS 固有のメソッドを取り除いてください。

        <property

         name="jboss.entity.manager.factory.jndi.name"

         value="java:/websphere_exampleEntityManagerFactory">

  - prod プロファイルを使用して Websphere にデプロイしたければ、`persistence-prod.xml` も同様に修正する必要があります。

`src/GlassfishDerbyDialect.java`

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

      cp $SEAM/examples/jpa/src/GlassfishDerbyDialect.java
         ./src

`resources/META-INF/jboss-app.xml`

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

`resources/*-ds.xml`

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

`resources/WEB-INF/components.xml`

  - コンテナ管理トランザクション統合を有効にします - `<transaction:ejb-transaction />` コンポーネントと、その名前空間宣言 `xmlns:transaction="http://jboss.com/products/seam/transaction"` を追記してください

  - `jndi-pattern` を `java:comp/env/websphere_example/#{ejbName}` に修正します

  - このサンプルでは、`managed-persistence-context` は必要ではないので、そのエントリは削除します。

        <persistence:managed-persistence-context name="entityManager"

                     auto-create="true"

                     persistence-unit-jndi-name="java:/websphere_exampleEntityManagerFactory"/>

`resources/WEB-INF/web.xml`

  `jee5/booking` サンプルと同様に、web.xml に EJB 参照を加える必要があります。これらの EJB 参照には、Websphere が適切なバインディングを実行するために、/local 文字列を `ejb-ref-name` に置き換える必要があります。

        <ejb-local-ref>

          <ejb-ref-name

      >websphere_example/AuthenticatorAction</ejb-ref-name>

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.tutorial.websphere.action.Authenticator</local>

        </ejb-local-ref

      >

        <ejb-local-ref>

          <ejb-ref-name

      >websphere_example/EjbSynchronizations</ejb-ref-name

      >

          <ejb-ref-type

      >Session</ejb-ref-type>

          <local

      >org.jboss.seam.transaction.LocalEjbSynchronizations</local>

        </ejb-local-ref

      >

#### 40.4.2.2. `AuthenticatorAction` EJB の作成

既存の `Authenticator` Seam POJO コンポーネントを利用して、EJB3 を作成します。

1. 作成された Authenticator クラスを変更します。

   - クラス名を `AuthenticatorAction` に変更します

   - `@Stateless` アノテーションを新しい `AuthenticatorAction` クラスに付与します。

   - `AuthenticatorAction` が実装する `Authenticator` という名前のインタフェースを作成してください (EJB3 ではセッション Bean にローカルインタフェースが必要)。インタフェースに `@Local` アノテーションを付与し、`AuthenticatorAction` の `authenticate` と同じシグニチャのメソッドを一つ追加してください。

       @Name("authenticator")

       @Stateless

       public class AuthenticatorAction implements Authenticator {

       @Local

       public interface Authenticator {

         public boolean authenticate();

       }

2. すでに `web.xml` ファイルには EJB 参照を追加したので、次に進めます。

#### 40.4.2.3. `build.xml` への jar 依存関係の追加とその他の変更点

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

- デフォルトのターゲットを `archive` に変更します (Websphere への自動的なデプロイを行いません)。

      <project name="websphere_example" default="archive" basedir=".">

- Websphere は、`websphere_example.jar` のルートではなく `war` ファイルのルートで drools の `/security.drl` ファイルを探すので、ビルド時には正しい場所へ移動させるように `build.xml` に設定する必要があります。以下の変更は、`<target name="war" depends="compile" description="Build the distribution .war file">` ターゲットの先頭に追加しなければなりません。

      <copy todir="${war.dir}">

         <fileset dir="${basedir}/resources" >

             <include name="*.drl" />

         </fileset>

      </copy>

- 追加の jar を `build.xml` に入れる必要があります。以下のタスクの `<fileset dir="${basedir}">` セクションを探してください。fileset の最後に新しい include を追加してください。

      <target name="ear" description="Build the EAR">

          <copy todir="${ear.dir}">

                  <fileset dir="${basedir}/resources">

                          <include name="*jpdl.xml" />

                          <include name="*hibernate.cfg.xml" />

                          <include name="jbpm.cfg.xml" />

                  </fileset>

                  <fileset dir="${basedir}">

                          <include name="lib/jbpm*.jar" />

                          <include name="lib/jboss-el.jar" />

                          <include name="lib/drools-*.jar"/>

                          <include name="lib/core.jar"/>

                          <include name="lib/janino*.jar"/>

                          <include name="lib/antlr-*.jar"/>

                          <include name="lib/mvel*.jar"/>

                        <include name="lib/richfaces-api*.jar" />

                  </fileset>

          </copy>

          <copy todir="${ear.dir}/META-INF">

                  <fileset dir="${basedir}/resources/META-INF">

                          <include name="application.xml" />

                          <include name="jboss-app.xml" />

                  </fileset>

          </copy>

      </target

      >

  - Hibernate 依存関係を追加してください。

           <!-- Hibernate and deps -->

           <include name="lib/hibernate.jar"/>

           <include name="lib/hibernate-commons-annotations.jar"/>

           <include name="lib/hibernate-annotations.jar"/>

           <include name="lib/hibernate-entitymanager.jar"/>

           <include name="lib/hibernate-validator.jar"/>

           <include name="lib/jboss-common-core.jar" />

  - サードパーティ依存関係を追加してください。

           <!-- 3rd party and supporting jars -->

           <!--<include name="lib/log4j.jar" />-->

           <include name="lib/javassist.jar"/>

           <include name="lib/dom4j.jar" />

           <include name="lib/concurrent.jar" />

           <include name="lib/cglib.jar"/>

           <include name="lib/asm.jar"/>

           <include name="lib/antlr.jar" />

           <include name="lib/commons-logging.jar" />

           <include name="lib/commons-collections.jar" />

  - `jboss-seam.jar` - これは `ear` のベースディレクトリで必要となります。

           <!-- seam jar -->

           <include name="lib/jboss-seam.jar" />

  最後には以下のようになります。

      <fileset dir="${basedir}">

         <include name="lib/jbpm*.jar" />

         <include name="lib/jboss-el.jar" />

         <include name="lib/drools-*.jar"/>

         <include name="lib/core.jar"/>

         <include name="lib/janino*.jar"/>

         <include name="lib/antlr-*.jar"/>

         <include name="lib/mvel*.jar"/>

         <include name="lib/richfaces-api*.jar" />

         <!-- Hibernate and deps -->

         <include name="lib/hibernate.jar"/>

         <include name="lib/hibernate-commons-annotations.jar"/>

         <include name="lib/hibernate-annotations.jar"/>

         <include name="lib/hibernate-entitymanager.jar"/>

         <include name="lib/hibernate-validator.jar"/>

         <include name="lib/jboss-common-core.jar" />

         <!-- 3rd party and supporting jars -->

         <include name="lib/javassist.jar"/>

         <include name="lib/dom4j.jar" />

         <include name="lib/concurrent.jar" />

         <include name="lib/cglib.jar"/>

         <include name="lib/asm.jar"/>

         <include name="lib/antlr.jar" />

         <include name="lib/commons-logging.jar" />

         <include name="lib/commons-collections.jar" />

         <!-- seam jar -->

         <include name="lib/jboss-seam.jar" />

      </fileset

      >

#### 40.4.2.4. seam-gen 生成アプリケーションのビルドと WebSphere へのデプロイ

- プロジェクトのベースディレクトリ (例えば `/home/jbalunas/workspace/websphere_example`) で `ant` を実行してアプリケーションをビルドしてください。ビルドされるターゲットファイルは `dist/websphere_example.ear` です。

- アプリケーションをデプロイするには、 項40.2.3. 「Websphere へのアプリケーションのデプロイ」 の手順に従ってください 。ただし、`jboss-seam-jee5` の代わりにこのプロジェクト `websphere_example` へ置き換えて使用してください。

- `http://localhost:9080/websphere_example/index.html` をブラウズしてアプリケーションを確認してください。

- 前のページ第39章 BEA Weblogic における Seam
- 上に戻る
- ホーム
- 次のページ第41章 GlassFish アプリケーションサーバー上の Seam