SeamFramework.org Community Documentation

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

## 第39章 BEA Weblogic における Seam

WebLogic 10.3 はBEAが提供している最新版の安定したJ2EEサーバです。SeamアプリケーションはWebLogicサーバ上でデプロイと開発が可能であり、この章ではその方法を示します。WebLogicサーバでは動作上いくつかの既知の問題があり、WebLogicの仕様上、設定の変更が必要となります。

最初にWebLogicをダウンロード、インストールそして実行します。次にSeamのJEE5のサンプルを操作して実行させます。その後JPAのサンプルがサーバにデプロイされます。そして最後に `seam-gen` アプリケーションを作成し、独自のアプリケーションを開始するためにその作成したアプリケーションを起動します。

## 39.1. WebLogicのインストールと操作

まず最初にサーバをインストールする必要があります。いくつか際立った問題がありますが、それは10.3には該当しません。その問題のいくつかはBEAのパッチなしで解決できます。しかし、一つ前のリリースである10.0.MP1も利用可能ですが、正常動作のためにはBEAのパッチを必要とします。

- `Weblogic 10.0.MP1` — ダウンロード ページ

  10.0.MP1は、EJBで使用しているメソッドで問題がいくつか知られています。その問題とは他のものと同じようにこれらのメソッドにある`varargs`（これらの可変引数を`transient`として混乱させる）を使用することによって生じます。問題と動作のすべての詳細は次を参照してください。項39.2.1. 「Weblogic上のEJB3の問題」

- `Weblogic 10.3` — ダウンロードページ

  これはWebLogicの最新の安定リリースで、そしてその一つは下記においてそのサンプルと共に使用されています。このバージョンは10.0.MP1に含まれていたEJBのいくつかの問題に取り組んできました。しかしながらた、変更のなかの一つはこのリリースではうまくいきませんでした。 詳細は次を参照してください。項39.2.1. 「Weblogic上のEJB3の問題」 しかしながらこの問題のために使用する特別なWebLogic用のjarファイルについては下記で議論します。

## Weblogic EJB サポート用の特別な `jboss-seam.jar`

Seam 2.0.2.CR2 を起動すると、特殊なWebLogicの仕様のjarファイルが作成されますが、それには`TimerServiceDispatcher` は含まれていません。これはEJBが可変引数を使用していることがEJBの第2の問題を露呈させています。このBEAの既知の問題をさけるために`jee5/booking` のサンプルでは、このjarファイルを使用することにします。

### 39.1.1. 10.3のインストール

ここにはWeblogic 10.3をインストールするために簡単な手順があります。詳細を知りたい場合や問題を抱えた場合は、BEAのドキュメントを参照してください。 Weblogic 10.3 ドキュメントセンタ . ここで、グラフィカルインストーラーを用いて RHEL バージョン5 をインストールします。

1. 10.3 用の上のリンクにしたがってあなたの環境に正しいバージョンをインストールしてください。これを使用するためにはオラクルのアカウントを使用してサインアップする必要があります。

2. 実行形式の`server103_XX.bin` ファイルを変更する必要があるかもしれません。

       chmod a+x server103_XX.bin（パーミッションの変更）

3. インストールを実行します。

       ./server103_XX.bin

4. グラフィカルインストールをロードしたら、BEAのホームロケーションに設定する必要があります。このロケーションはBEAのアプリケーションがインストールされている場所です。このロケーションはこのドキュメント上では、 `$BEA_HOME` として知られています。

       /jboss/apps/bea

5. インストールタイプとして、`Complete`を選択してください。完全インストールのすべてのオプションは必要ありません（strutsやbeehiveのライブラリのように）が、入れても害はありません。

6. 次のページにあるコンポーネントのインストールはデフォルトのままにしてください。

### 39.1.2. Weblogicのドメインを作成する。

WebLogicのドメインはJBossサーバの設定と類似しています。それは、サーバ（アプリケーション）のインスタンス自体がサーバ（管理プログラム）に入っているということです。インストールしたばかりのWebLogicサーバは、いくつかのサンプルドメインを保持していますが、Seamのサンプル用には一つだけ作成します。しようと思えば既にあるドメインを使用することもできます（必要に応じて設定を変更します）。

1. Weblogic設定画面を起動します。

       $BEA_HOME/wlserver_10.3/common/bin/config.sh

2. 作成する新しいドメイン（そのドメインは`Weblogic Server`をサポートするために設定されたものです）を選択してください。これはデフォルトのドメインオプションであることに注意してください。

3. ユーザー名とパスワードをこのドメインに対して設定してください。

4. 次に、オプションが表示されるので、`Development Mode`とデフォルトのJDKを選択してください。

5. 次のスクリーンでなにか設定をカスタマイズしたいか聞いてきます。 `No`を選択してください。

6. 最後にドメイン名を`seam_examples` に設定してください、デフォルトのドメインの場所のままにしてください。

### 39.1.3. ドメインの 起動/停止/アクセス 方法

既にサーバはインストールされドメインは作成されたので、それを起動、停止、加えて設定コンソールにアクセスする方法を知る必要があります。

- ドメインの起動

  ここは簡単な箇所です。`$BEA_HOME/user_projects/domains/seam_examples/bin` ディレクトリに行き `./startWeblogic.sh`スクリプトを実行してください。

- 設定コンソールへアクセス

  ウェブブラウザで、`http://127.0.0.1:7001/console`を開いてください。設定時に入力したユーザー名とパスワードを聞かれます。このページは今はあまり開きませんが、ここは後々必要になる多くの設定の最初のページです。

- ドメインの停止

  ここには2、3のオプションがあります。

  - お薦めの方法は、設定コンソール上で行う方法です。

    1. コンソールの左側にある`seam_examples`を選択してください。

    2. ページの真ん中にある`seam_examples`タブを選択してください。

    3. テーブルのなかにある`AdminServer`チェックボックスを選択してください。

    4. テーブルのちょうど上にある `Shutdown`を選択してください。そして適切に `When work completes` か`Force shutdown now`を選択してくさい。

  - 起動ドメインのターミナルでの`Ctrl-C`コマンド

    なにも問題はありませんが、コンソールでの設定変更中におけるこのコマンドは推奨しません。

- ## Weblogicのクラスロードにおける注意点

  この章で記述されているように`/autodeploy` 直接を使用している場合、再デプロイ中に`NoClassDefFound`例外を見るかもしれません。もしこの事象が起こったらWeblogicサーバの再起動を試みてください。削除したauto-deployed EAR/WAR filesをまだ見るようだったら、サーバを再起動して再デプロイしてください。この問題の仕様面での理由は分かりませんが、しかしその点を除けばこの問題はよくなるようです。

### 39.1.4. WeblogicのJSFサポートの設定

これらの使用説明は（以降参照）はWeblogicのJSF 1.2ライブラリをデプロイそして設定するためのものです。そのままの状態ではWeblogicに入っているJSFライブラリはアクティブになりません。詳細は、 Weblogic 10.3 Configuring JSF and JSTL Libraries を参照してください。

1. 管理コンソールでは、左側のメニューを使用して、`Deployments` ページに進みます。

2. デプロイメントテーブルにの一番上にある`Install`ボタンを選択したら

3. ディレクトリブラウザを使って`$BEA_HOME/wlserver_10.3/common/deployable-libraries` ディレクトリに進みます。 `jsf-1.2.war`アーカイブを選択したら`Next` ボタンをクリックします。

4. `Install this deployment as a library` が選択されていることを確認してください。`Install Application Assistant` ページにある`Next` ボタンをクリックしてください。

5. `Optional Settings`ページにある`Next`ボタンをクリックしてください。

6. `Yes, take me to the deployment's configuration screen.`が選択されていることを確認してください。`Review your choices and click Finish`ページにある `Finish`ボタンをクリックしてください。

7. 自動的にデプロイされているアプリケーションより優先的にデプロイされるために`Settings for jsf(1.2,1.2.3.1)`ページで `Deployment Order`に `99`を設定してください。それから、`Save` ボタンをクリックしてください。

JSFを動かすために必要なもう一つのステップがあります。いくつかの理由のために、そのステップで`jsf-api.jar` の中にあるクラスが、アプリケーションのデプロイメントの間に見つからないことさえあります。動かすための唯一の方法は、ドメインの中にある共有ライブラリにある`jsf-1.2.war`から`javax.jsf_1.2.0.0.jar` (jsf-api.jar)を置くことです。このことはサーバの再起動を必要とします。

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

WeblogicのEJBを用いてSeamを動かしたいのなら、避けなければならないいくつか障害があります。さもないとBEAからのいくつかのパッチが必要となります。この節では、これらの障害と`jee5/booking`サンプルをデプロイおよび機能させるのに必要な変さらについて記述します。

### 39.2.1. Weblogic上のEJB3の問題

Weblogicのいくつかのリリースにおいて、いかにしてWeblogicがメソッド中の可変引数使うスタブを生成したり、EJBをコンパイルしたりするかという問題がありました。このことはWeblogic 9.Xと10.0.MP1のバージョンで確認されています。残念ながら10.3バージョンは下記の詳細にあるように部分的にこの問題に取り組んでいます。

#### 39.2.1.1. `varargs`の問題

問題の基本は、WeblogicのEJBコンパイラが`transient`修飾子を持っている`varargs`を使用しているメソッドについて過ちを犯していると説明できます。BEAがデプロイ中にそれらのクラスから独自のスタブクラスを作成すると、それは失敗し、デプロイは成功しません。SeamはEJB( `TimerServiceDispatcher`)の内部では可変引数を使用しています。デプロイ中に下記のような例外を発見した場合は、10.0.MP1のパッチされていないバージョンを起動しています。

    java.io.IOException: Compiler failed executable.exec:
    /jboss/apps/bea/wlserver_10.0/user_projects/domains/seam_examples/servers/AdminServer
    /cache/EJBCompilerCache/5yo5dk9ti3yo/org/jboss/seam/async/
    TimerServiceDispatcher_qzt5w2_LocalTimerServiceDispatcherImpl.java:194: modifier transient
    not allowed here
      public transient javax.ejb.Timer scheduleAsynchronousEvent(java.lang.String arg0,
      java.lang.Object[] arg1)
                                       ^
    /jboss/apps/bea/wlserver_10.0/user_projects/domains/seam_examples/servers/AdminServer
    /cache/EJBCompilerCache/5yo5dk9ti3yo/org/jboss/seam/async/
    TimerServiceDispatcher_qzt5w2_LocalTimerServiceDispatcherImpl.java:275: modifier transient
    not allowed here
      public transient javax.ejb.Timer scheduleTimedEvent(java.lang.String arg0,
      org.jboss.seam.async.TimerSchedule arg1, java.lang.Object[] arg2)

この問題は、Weblogic 10.3では解決されました。また、BEAはこの問題に対するパッチをWeblogic 10.0.MP1用に作成しました( `CR327275` )。このパッチはBEAのサポートから取得可能です。

残念ながら次の問題がBEAから報告され検証されました。

#### 39.2.1.2. 見逃しているEJBメソッドの問題

この問題は10.0.MP1に摘要された`CR327275`パッチの中で一度だけ発見されました。この新しい問題はBEAによって確認され、BEAは10.0.MP1用にこの問題に対するパッチを作成しました。このパッチについては、`CR370259`と`CR363182`の両方を参照してください。他のパッチと同じようにこのパッチはBEAのサポートから取得可能です。

この問題はWeblogicが内部的に生成したスタブクラスが不適切に残したEJBのあるメソッドが原因なのです。この結果、次のエラーメッセージがデプロイ中に表示されます。

    <<Error
    > <EJB
    > <BEA-012036
    > <Compiling generated EJB classes produced the following Java compiler error message:
    <Compilation Error
    > TimerServiceDispatcher_qzt5w2_Impl.java: The type TimerServiceDispatcher_qzt5w2_Impl must implement the inherited abstract method TimerServiceDispatcher_qzt5w2_Intf.scheduleTimedEvent(String, Schedule, Object[])
    <Compilation Error
    > TimerServiceDispatcher_qzt5w2_LocalTimerServiceDispatcherImpl.java: Type mismatch: cannot convert from Object to Timer
    <Compilation Error
    > TimerServiceDispatcher_qzt5w2_LocalTimerServiceDispatcherImpl.java: Type mismatch: cannot convert from Object to Timer
    >
    <Error
    > <Deployer
    > <BEA-149265
    > <Failure occurred in the execution of deployment request with ID '1223409267344' for task '0'. Error is: 'weblogic.application.ModuleException: Exception preparing module: EJBModule(jboss-seam.jar)

このフィックスを含まないでWeblogic 10.3がリリースされたのでこの問題が現れました。このことはパッチされたWeblogic 10.0.MP1は正しく機能しますが、10.3は、依然として特別なSeamのjarファイルを必要とするということが以下に記述されています。すべてのユーザーがこれを見るわけではないし、たぶんあるOSとJREの組み合わせによるとこの問題を見なくてすみます。しかしながらこの問題は頻発します。10.3のこの問題についてOracle/BEAが最新のパッチをリリースすることを切に願います。そうしてくれればこのリファレンスを私たちJBossは必要に応じて最新にします。

Seam 2.0.2.CR2を開始するときに、SeamのユーザーがEJBアプリケーションをWeblogicにデプロイすると、特別なWeblogicのjarファイルは作成されます。そのjarファイルの場所は`$SEAM/lib/interop`ディレクトリです。そのjarファイルは`jboss-seam-wls-compatible.jar`と呼ばれています。このjarファイルと`jboss-seam.jar`の唯一の違いは`TimerServiceDispatcher` EJBを含むか否かです。このjarファイルを使うためには単に名前を`jboss-seam-wls-compatible.jar`を `jboss-seam.jar`に変更して元のアプリケーションの中のファイルを置き換えてください。`jee5/booking`サンプルはこのデモンストレーションです。言うまでもなく、このjarファイルは`TimerServiceDispatcher`の機能を使用することはできません。

### 39.2.2. `jee5/booking` の動作

この節では、 `jee5/booking`をサーバにアップし起動する手順について記述します。

#### 39.2.2.1. hsqlのデータソースの設定

このサンプルではメモリ内にある高速データベースを使用します。そして的確にデータソースを設定します。管理コンソールでウィザードを用いてこのページを設定してください。

1. Weblogicドメインの共有ディレクトリに`hsqldb.jar`ファイルをコピーしてください。`cp $SEAM_HOME/lib/hsqldb.jar $BEA_HOME/user_projects/domains/seam_examples/lib`

2. 管理コンソールの誘導にしたがってサーバを起動してください。 項39.1.3. 「ドメインの 起動/停止/アクセス 方法」

3. 左側のツリーにある`seam_examples - Services- JDBC - Data Sources`に進んでください。

4. データソーステーブルの一番上にある`New`ボタンを選択してください。

5. 下記に従って入力してください。

   1. Name: `seam-jee5-ds`

   2. JNDI Name: `seam-jee5-ds`

   3. Database Type and Driver: `other`

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

6. `Transaction Options` ページにある`Next`ボタンを選択してください。

7. `Connection Properties` ページに従って入力してください。

   1. Database Name: `hsqldb`

   2. Host Name: `127.0.0.1`

   3. Port: `9001`

   4. Username:`sa` パスワードは未入力にしてください。

   5. Password: 未入力

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

8. `Connection Properties` ページに従って入力してください。

   1. Driver Class Name: `org.hsqldb.jdbcDriver`

   2. URL: `jdbc:hsqldb:.`

   3. Username: `sa`

   4. Password: 未入力

   5. 残りのフィールドはそのままにしておいてください。

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

9. ただ一つの`AdminServer`の中にあるデータソース用に目的のドメインを選択してください。

#### 39.2.2.2. 設定とビルドの変更

では、WeblogicサーバにデプロイするためにSeamアプリケーションの調整を始める最後の準備ができました。

`resources/META-INF/persistence.xml`

  - `jta-data-source`をあなたが入力したものに変更してください。

                    <jta-data-source

        >seam-jee5-ds</jta-data-source

        >

  - それからglassfish（サンのオープンソース）の設定をコメントアウトします。

  - weblogicのサポート用にこれらの二つのプロパティを追加します。

        <property name="hibernate.dialect"

                    value="org.hibernate.dialect.HSQLDialect"/>

        <property name="hibernate.transaction.manager_lookup_class"

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

`resources/META-INF/weblogic-application.xml`

  - 次の内容のファイルが作成される必要があります。

        <?xml version="1.0" encoding="ISO-8859-1"?>

        <weblogic-application>

            <library-ref>

                <library-name

        >jsf</library-name>

                <specification-version

        >1.2</specification-version>

                <implementation-version

        >1.2</implementation-version>

                <exact-match

        >false</exact-match>

            </library-ref>

            <prefer-application-packages>

                <package-name

        >antlr.*</package-name>

            </prefer-application-packages>

        </weblogic-application>

  - これらの変更は二つの異なったこと示しています。最初の要素 `library-ref`はweblogicがこのアプリケーションがJSFライブラリがデプロイされたものを使用しているということを示しています。次の要素 `prefer-application-packages` weblogicが`antlr`のjarファイルを優先することを示しています。これでhibernateとの競合を避けることができます。

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

  - ここで記述した変更は、Weblogicがただ一つの`sessionBeanInterceptor`インスタンスをすべてのセッションBeanに対して使用している問題の箇所で動作します。Seamのインタセプタはキャッシュを行い、コンポーネント上の固有の属性を格納します。そしてそれらを呼び出したとき、そのインタセプタは違うコンポーネントで使われてエラーが起こるのです。この問題を解決するために使用しようとするそれぞれのEJBについてそのインタセプタを分ける定義をしなければなりません。これを行うとWeblogicはそれぞれのEJBに対して分割されたインスタンスを使用するでしょう。

    `assembly-descriptor` 要素をこのように修正してください。

        <assembly-descriptor>

           <interceptor-binding

        >

              <ejb-name

        >AuthenticatorAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >BookingListAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >RegisterAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >ChangePasswordAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >HotelBookingAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >HotelSearchingAction</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

           <interceptor-binding

        >

              <ejb-name

        >EjbSynchronizations</ejb-name>

              <interceptor-class

        >org.jboss.seam.ejb.SeamInterceptor</interceptor-class>

           </interceptor-binding>

        </assembly-descriptor

        >

`resources/WEB-INF/weblogic.xml`

  - 次の内容のファイルが作成される必要があります。

        <?xml version="1.0" encoding="UTF-8"?>

        <weblogic-web-app

        >

        <library-ref>

            <library-name

        >jsf</library-name>

            <specification-version

        >1.2</specification-version>

            <implementation-version

        >1.2</implementation-version>

            <exact-match

        >false</exact-match>

          </library-ref>

        </weblogic-web-app>

  - このファイルにある`library-ref` 要素の意味は、Weblogic上で、このアプリケーションがデプロイされたJSFライブラリを使用するということです。このファイルと`weblogic-application.xml` ファイルは両方とも必要とされます。なぜなら両方のアプリケーションがアクセスを必要とするからです。

#### 39.2.2.3. アプリケーションのビルドとデプロイ

ビルドファイルをいくつか修正する必要があります。そうすれば、`jboss-seam.jar`をアプリケーションにデプロイすることができます。

`build.xml`

  - 次に従って、`weblogic-application.xml` に追加する必要があります。

           <!-- Resources to go in the ear -->

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

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

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

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

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

               <include name="treecache.xml" />

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

               <exclude name=".gpd.*" />

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

               <include name="*.xsd" />

           </fileset

        >

`$SEAM/lib/interop/jboss-seam-wls-compatible.jar`

  - 項39.2.1. 「Weblogic上のEJB3の問題」 で議論された変さらには二つの方法があります。

  - このjarファイルの名前を変更して、オリジナルの`$SEAM/lib/jboss-seam.jar` ファイルと置き換えてください。このアプローチはパッケージの`EAR`アーカイブに一切の変更を必要としませんが、オリジナルの`jboss-seam.jar`ファイルには変更を必要とします。

  - もう一つの方法はパッケージの`EAR`アーカイブを修正して `jboss-seam.jar`の中にあるアーカイブと手動で置き換えることです。これはオリジナルのjarファイルはそのままにしますが、アーカイブがパッケージされている場合必ず手動で置き換えることが必要となります。

`jboss-seam-wls-compatible.jar`をハンドリングするために最初の方法を選択した場合、 `jee5/booking`サンプルのベースディレクトリで`ant archive`でアプリケーションをビルドすることができます。

デプロイモードでWeblogicドメインを作成することを選択したから、ドメインにある自動デプロイディレクトリにEARファイルを置くだけで、アプリケーションをデプロイできるのです。

    cp ./dist/jboss-seam-jee5.ear
                      $BEA_HOME/user_projects/domains/seam_examples/autodeploy

`http://localhost:7001/seam-jee5/`でアプリケーションをチェックアウトしてください。

## 39.3. `jpa` 予約サンプル

これは、Seam POJOとHibernate JPAで実装されたホテルの予約するアプリケーションのサンプルです。そしてこのサンプルはEJB3のサポートを起動するのに必要としません。Weblogic 10.Xを含むたくさんの共有コンテナーについて、このサンプルは既に設定ファイルやビルドファイルに登場してきました。

最初にサンプルをWeblogic 10.x用についてビルドます。デプロイするためにいくつかステップを踏みます。それからWeblogicのバージョンの違いについてJBoss ASと共に説明します。

このサンプルはWeblogicのJSFライブラリが項39.1.4. 「 WeblogicのJSFサポートの設定」で設定されていることを想定していることに注意してください。

### 39.3.1. `jpa` 予約サンプルのビルドとデプロイ

最初にデータソースを設定して、次にアプリケーションをビルドして、最後にデプロイしてくさい。

#### 39.3.1.1. データソースの設定

サンプルで使用するWeblogic 10.X バージョンは、PointBaseデーターソースを使用する代わりにメモリ上のhsqlデータソースを使用します。PointBaseデーターソースを使用したい場合は、PointBaseデーターソースを設定しなければなりません。そして、`persistence.xml` でhibernateの設定を PointBaseを使用するように調整しなければなりません。`jpa/weblogic92`サンプルで、PointBaseを使用しているので参照してください。

データソースの設定はjee5 項39.2.2.1. 「hsqlのデータソースの設定」にとてもよく似ています。そのセクションの手順に従ってください、ただし必要な箇所では入力してください。

- DataSource Name: `seam-jpa-ds`

- JNDI Name: `seam-jpa-ds`

#### 39.3.1.2. サンプルのビルド

ビルドするには、ただ正しいコマンドが必要なけです。

    ant weblogic10

このビルドでコンテナ特有のディストリビューションと構造化されたアーカイブのディレクトリが作成されます。

#### 39.3.1.3. サンプルのデプロイ

項39.1.2. 「Weblogicのドメインを作成する。」に従ってWeblogicをインストールするときは、開発モードにあるドメインを選択します。このことは、アプリケーションをデプロイするのに、自動デプロイディレクトリにただそのアプリケーションをコピーさえすればよいことを示しています。

    cp ./dist-weblogic10/jboss-seam-jpa.war
    $BEA_HOME/user_projects/domains/seam_examples/autodeploy

`http://localhost:7001/jboss-seam-jpa/`に従って、アプリケーションをチェックアウトしてください。

### 39.3.2. Weblogic 10.xでの違い

- Weblogicの10.xと9.2のサンプルの間にはいくつかの違いがあります。

  - `META-INF/persistence.xml` — 9.2のバージョンは`PointBase`のデータベースを使用するように設定されていて事前にデータソースがインストールされています。10.xのバージョンは`hsql`のデータベースとカスタマイズしたデータソースを使用しています。

  - `WEB-INF/weblogic.xml` — このファイルはWeblogic 10.xが内部で使用している`ANTLR`ライブラリの古いバージョンの問題を解決するためのものです。OC4J には同じような問題があります。このことはまた、上記でインストールした共有ライブラリ使用してアプリケーションを設定します。

        <?xml version="1.0" encoding="UTF-8"?>

        <weblogic-web-app

        xmlns="http://www.bea.com/ns/weblogic/90"

        xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

        xsi:schemaLocation="http://www.bea.com/ns/weblogic/90

                            http://www.bea.com/ns/weblogic/90/weblogic-web-app.xsd">

           <library-ref>

              <library-name

        >jsf</library-name>

              <specification-version

        >1.2</specification-version>

              <implementation-version

        >1.2</implementation-version>

              <exact-match

        >false</exact-match>

           </library-ref>

           <container-descriptor>

              <prefer-web-inf-classes

        >true</prefer-web-inf-classes>

           </container-descriptor>

        </weblogic-web-app

        >

    これで、Weblogicは、他のライブラリをクラスパスで使用する前にWebアプリケーションにあるクラスとライブラリを使用するようになります。この変更がないとhibernateが、`META-INF/persistence.xml`ファイルでのプロパティに従って設定された、古くて、遅いクエリーを使うことを要求されます。

        <property name="hibernate.query.factory_class"

              value="org.hibernate.hql.classic.ClassicQueryTranslatorFactory"/>

  - `WEB-INF/components.xml` — Weblogic 10.xバージョンでJPAエントリのトランザクションが次の追加によって使用可能になります。

         <transaction:entity-transaction entity-manager="#{em}"/>

  - `WEB-INF/web.xml` — `jsf-impl.jar`は `WAR`ではないので、このリスナーは設定変更する必要があります。

         <listener>

           <listener-class

        >com.sun.faces.config.ConfigureListener</listener-class>

         </listener

        >

- Weblogicの10.xバージョンとJBossのバージョンの間にはたくさんの変更があります。ここに要約があります。

  - `META-INF/persistence.xml` — データーソース名を除いてWeblogicのバージョンを設定します。

        <property name="hibernate.transaction.manager_lookup_class"

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

  - `WEB-INF/lib` — Weblogicのバージョンではいくつかのライブラリを必要とします。なぜならJBoss ASに含まれているそのライブラリはないからです。第一にhibernate用のもとその依存関係があります。

    - JPAプロバイダのようにHibernateを使うには、次のjarファイルが必要です。

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

    - さまざまなサードパーティのjarファイルがWeblogicでは必要です。

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

## 39.4. Weblogic 10.x に`seam-gen`を使用して作成したアプリケーションをデプロイ

`seam-gen` はとても役に立つツールです。というのも開発者がすばやくアプリケーションを立ち上げたり、そして独自の機能を追加する土台を提供してくれます。`seam-gen`はそのままで、JBoss ASで動作するように調整されたアプリケーションを提供します。

`seam-gen`は単純にビルドされていますので、ご想像のとおり`seam-gen`で生成されたアプリケーションを Weblogic 10.xにデプロイすることは簡単です。基本的にはいくつかの設定ファイルを更新したり削除したりWeblogic 10.x にはない依存ライブラリのjarファイルを追加したりします。

このサンプルは基本的な`seam-gen WAR`のデプロイについて記述します。ここではSeam POJOコンポーネント、Hibernate JPA, Facelets, Drools security, RichFaces, そして設定変更可能なデータソースのデモンストレーションを行います。

### 39.4.1. `seam-gen`をp起動するための設定

最初にしなければならないことは、 作成したいプロジェクトについて`seam-gen`を生成することです。これはSeamディストリビューションのベースディレクトリにある`./seam setup`を起動することによってなされます。ここで使用しているパスは一例であり、環境に応じて変更してください。

    ./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]
    /jboss/apps/jboss-4.2.3.GA
        [input] Enter the project name [myproject] [myproject]
    weblogic-example
         [echo] Accepted project name as: weblogic_example
        [input] Select a RichFaces skin (not applicable if using ICEFaces) [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, )
    war
        [input] Enter the Java package name for your session beans [org.jboss.seam.
    tutorial.weblogic.action] [org.jboss.seam.tutorial.weblogic.action]
    org.jboss.seam.tutorial.weblogic.action
        [input] Enter the Java package name for your entity beans [org.jboss.seam.
    tutorial.weblogic.model] [org.jboss.seam.tutorial.weblogic.model]
    org.jboss.seam.tutorial.weblogic.model
        [input] Enter the Java package name for your test cases [org.jboss.seam.
    tutorial.weblogic.action.test] [org.jboss.seam.tutorial.weblogic.action.test]
    org.jboss.seam.tutorial.weblogic.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/seamlib/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], )

        [input] Enter your ICEfaces home directory (leave blank to omit ICEfaces) [] []

    [propertyfile] Creating new property file:
    /rhdev/projects/jboss-seam/cvs-head/jboss-seam/seam-gen/build.properties
         [echo] Installing JDBC driver jar to JBoss server
         [copy] Copying 1 file to /jboss/apps/jboss-4.2.3.GA/server/default/lib
         [echo] Type 'seam create-project' to create the new project

    BUILD SUCCESSFUL

`./seam new-project`と打つと、プロジェクトが作成されます。 `cd /home/jbalunas/workspace/weblogic_example`と打って新しいプロジェクトを参照してください。

### 39.4.2. Weblogic 10.Xについての変更

最初にいくつかの設定ファイルを変更したり削除したりします。それからアプリケーションとともにデプロイされているライブラリを更新します。

#### 39.4.2.1. 設定ファイルの変更

`build.xml`

  - デフォルトのターゲットを`archive`に変更してください。

        <project name="weblogic_example" default="archive" basedir="."

        >

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

  - `jta-data-source`を`seam-gen-ds`に変更してください（Weblogicの管理コンソールでデータソースを作成したときはこれを`jndi-name`として使用してください）。

  - JPAトランザクションを使えるように、トランザクションの型を`RESOURCE_LOCAL`に変更してください。

        <persistence-unit name="weblogic_example" transaction-type="RESOURCE_LOCAL"

        >

  - Weblogicをサポートするために下記のプロパティを追加／修正してください。

        <property name="hibernate.cache.provider_class"

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

        <property name="hibernate.transaction.manager_lookup_class"

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

  - 本番環境用のプロファイルを使用してWeblogicにデプロイしたい場合、`persistence-prod.xml` を変更する必要があります。

`resource/WEB-INF/weblogic.xml`

  このファイルを作成して description of WEB-INF/weblogic.xmlに従い変更する必要があるでしょう。

`resource/WEB-INF/components.xml`

  JPAトランザクションを使いたいので、Seamに通知するために以下を追加する必要があります。

      <transaction:entity-transaction entity-manager="#{entityManager}"/>

  また、トランザクションの名前空間とスキーマの場所をドキュメントの一番上に追加する必要があります。

      xmlns:transaction="http://jboss.com/products/seam/transaction"

      http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd

`resource/WEB-INF/web.xml`

  `WEB-INF/web.xml` — `jsf-impl.jar`は `WAR`ではないので、このリスナーは設定変更する必要があります。

       <listener>

         <listener-class

      >com.sun.faces.config.ConfigureListener</listener-class>

       </listener

      >

`resources/WEB-INF/jboss-web.xml`

  JBoss ASにデプロイするのでなければ、このファイルは削除することができます（`jboss-app.xml`はJBoss ASは独立してクラスロードを可能にするために使用します）。

`resources/*-ds.xml`

  JBoss ASにデプロイしないとき、これらのファイルを削除することができます。これらのファイルはJBoss ASでデータソースを定義するファイルであり、Weblogicでは管理コンソールを使用します。

#### 39.4.2.2. ライブラリの変更

`seam-gen`アプリケーションは、上記の`jpa`サンプルと非常によく似たライブラリの依存関係を持っています。項39.3.2. 「Weblogic 10.xでの違い」を参照してください。下記はその依存関係を取得するためにアプリケーション内で必要になる変更です。

- build.xml — 今ここで`build.xml`を調整する必要があります。`war`ターゲットを見つけて、その最後に以下を追加してください。

            <copy todir="${war.dir}/WEB-INF/lib">

               <fileset dir="${lib.dir}">

                  <!-- Misc 3rd party -->

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

                  <include name="dom4j.jar" />

                  <include name="javassist.jar" />

                  <include name="cglib.jar" />

                  <include name="antlr.jar" />

                  <!-- Hibernate -->

                  <include name="hibernate.jar" />

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

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

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

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

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

                  <include name="concurrent.jar" />

               </fileset>

            </copy

      >

### 39.4.3. アプリケーションのビルドとデプロイ

あと残っているのはアプリケーションのデプロイです。データソースの設定を行い、アプリケーションをビルドしてデプロイしてください。

#### 39.4.3.1. データソースの設定

データソースを設定は、jee5 項39.2.2.1. 「hsqlのデータソースの設定」とほぼ同じです。ここにあるリストを除いて、リンクの指示に従ってください。

- DataSource Name: `seam-gen-ds`

- JNDI Name: `seam-gen-ds`

#### 39.4.3.2. アプリケーションのビルド

プロジェクトのベースディレクトリで、`ant`と打つことによって簡単にできます。

#### 39.4.3.3. サンプルのデプロイ

項39.1.2. 「Weblogicのドメインを作成する。」に従ってWeblogicをインストールするときは、開発モードにあるドメインを選択します。このことは、アプリケーションをデプロイするのに、自動デプロイディレクトリにただそのアプリケーションをコピーさえすればよいことを示しています。

    cp  ./dist/weblogic_example.war /jboss/apps/bea/user_projects/domains/seam_examples/autodeploy

`http://localhost:7001/weblogic_example/`に従ってアプリケーションをチェックアウトしてください。

- 前のページ第38章 Seam ツール
- 上に戻る
- ホーム
- 次のページ第40章 IBM Websphere AS 上の Seam