SeamFramework.orgCommunity Documentation
WebLogic 10.3 はBEAが提供している最新版の安定したJ2EEサーバです。SeamアプリケーションはWebLogicサーバ上でデプロイと開発が可能であり、この章ではその方法を示します。WebLogicサーバでは動作上いくつかの既知の問題があり、WebLogicの仕様上、設定の変更が必要となります。
最初にWebLogicをダウンロード、インストールそして実行します。次にSeamのJEE5のサンプルを操作して実行させます。その後JPAのサンプルがサーバにデプロイされます。そして最後に seam-gen
アプリケーションを作成し、独自のアプリケーションを開始するためにその作成したアプリケーションを起動します。
まず最初にサーバをインストールする必要があります。いくつか際立った問題がありますが、それは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ファイルについては下記で議論します。
jboss-seam.jar
Seam 2.0.2.CR2 を起動すると、特殊なWebLogicの仕様のjarファイルが作成されますが、それにはTimerServiceDispatcher
は含まれていません。これはEJBが可変引数を使用していることがEJBの第2の問題を露呈させています。このBEAの既知の問題をさけるためにjee5/booking
のサンプルでは、このjarファイルを使用することにします。
ここにはWeblogic 10.3をインストールするために簡単な手順があります。詳細を知りたい場合や問題を抱えた場合は、BEAのドキュメントを参照してください。 Weblogic 10.3 ドキュメントセンタ . ここで、グラフィカルインストーラーを用いて RHEL バージョン5 をインストールします。
10.3 用の上のリンクにしたがってあなたの環境に正しいバージョンをインストールしてください。これを使用するためにはオラクルのアカウントを使用してサインアップする必要があります。
実行形式のserver103_XX.bin
ファイルを変更する必要があるかもしれません。
chmod a+x server103_XX.bin(パーミッションの変更)
インストールを実行します。
./server103_XX.bin
グラフィカルインストールをロードしたら、BEAのホームロケーションに設定する必要があります。このロケーションはBEAのアプリケーションがインストールされている場所です。このロケーションはこのドキュメント上では、 $BEA_HOME
として知られています。
/jboss/apps/bea
インストールタイプとして、Complete
を選択してください。完全インストールのすべてのオプションは必要ありません(strutsやbeehiveのライブラリのように)が、入れても害はありません。
次のページにあるコンポーネントのインストールはデフォルトのままにしてください。
WebLogicのドメインはJBossサーバの設定と類似しています。それは、サーバ(アプリケーション)のインスタンス自体がサーバ(管理プログラム)に入っているということです。インストールしたばかりのWebLogicサーバは、いくつかのサンプルドメインを保持していますが、Seamのサンプル用には一つだけ作成します。しようと思えば既にあるドメインを使用することもできます(必要に応じて設定を変更します)。
Weblogic設定画面を起動します。
$BEA_HOME/wlserver_10.3/common/bin/config.sh
作成する新しいドメイン(そのドメインはWeblogic Server
をサポートするために設定されたものです)を選択してください。これはデフォルトのドメインオプションであることに注意してください。
ユーザー名とパスワードをこのドメインに対して設定してください。
次に、オプションが表示されるので、Development Mode
とデフォルトのJDKを選択してください。
次のスクリーンでなにか設定をカスタマイズしたいか聞いてきます。 No
を選択してください。
最後にドメイン名をseam_examples
に設定してください、デフォルトのドメインの場所のままにしてください。
既にサーバはインストールされドメインは作成されたので、それを起動、停止、加えて設定コンソールにアクセスする方法を知る必要があります。
ドメインの起動
ここは簡単な箇所です。 $BEA_HOME/user_projects/domains/seam_examples/bin
ディレクトリに行き ./startWeblogic.sh
スクリプトを実行してください。
設定コンソールへアクセス
ウェブブラウザで、http://127.0.0.1:7001/console
を開いてください。設定時に入力したユーザー名とパスワードを聞かれます。このページは今はあまり開きませんが、ここは後々必要になる多くの設定の最初のページです。
ドメインの停止
ここには2、3のオプションがあります。
お薦めの方法は、設定コンソール上で行う方法です。
コンソールの左側にあるseam_examples
を選択してください。
ページの真ん中にあるseam_examples
タブを選択してください。
テーブルのなかにあるAdminServer
チェックボックスを選択してください。
テーブルのちょうど上にある Shutdown
を選択してください。そして適切に When work completes
かForce shutdown now
を選択してくさい。
起動ドメインのターミナルでのCtrl-C
コマンド
なにも問題はありませんが、コンソールでの設定変更中におけるこのコマンドは推奨しません。
この章で記述されているように/autodeploy
直接を使用している場合、再デプロイ中にNoClassDefFound
例外を見るかもしれません。もしこの事象が起こったらWeblogicサーバの再起動を試みてください。削除したauto-deployed EAR/WAR filesをまだ見るようだったら、サーバを再起動して再デプロイしてください。この問題の仕様面での理由は分かりませんが、しかしその点を除けばこの問題はよくなるようです。
これらの使用説明は(以降参照)はWeblogicのJSF 1.2ライブラリをデプロイそして設定するためのものです。そのままの状態ではWeblogicに入っているJSFライブラリはアクティブになりません。詳細は、 Weblogic 10.3 Configuring JSF and JSTL Libraries を参照してください。
管理コンソールでは、左側のメニューを使用して、Deployments
ページに進みます。
デプロイメントテーブルにの一番上にあるInstall
ボタンを選択したら
ディレクトリブラウザを使って$BEA_HOME/wlserver_10.3/common/deployable-libraries
ディレクトリに進みます。 jsf-1.2.war
アーカイブを選択したらNext
ボタンをクリックします。
Install this deployment as a library
が選択されていることを確認してください。Install Application Assistant
ページにある Next
ボタンをクリックしてください。
Optional Settings
ページにあるNext
ボタンをクリックしてください。
Yes, take me to the deployment's configuration screen.
が選択されていることを確認してください。 Review your choices and click Finish
ページにある Finish
ボタンをクリックしてください。
自動的にデプロイされているアプリケーションより優先的にデプロイされるために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)を置くことです。このことはサーバの再起動を必要とします。
WeblogicのEJBを用いてSeamを動かしたいのなら、避けなければならないいくつか障害があります。さもないとBEAからのいくつかのパッチが必要となります。この節では、これらの障害とjee5/booking
サンプルをデプロイおよび機能させるのに必要な変さらについて記述します。
Weblogicのいくつかのリリースにおいて、いかにしてWeblogicがメソッド中の可変引数使うスタブを生成したり、EJBをコンパイルしたりするかという問題がありました。このことはWeblogic 9.Xと10.0.MP1のバージョンで確認されています。残念ながら10.3バージョンは下記の詳細にあるように部分的にこの問題に取り組んでいます。
問題の基本は、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から報告され検証されました。
この問題は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
の機能を使用することはできません。
この節では、 jee5/booking
をサーバにアップし起動する手順について記述します。
このサンプルではメモリ内にある高速データベースを使用します。そして的確にデータソースを設定します。管理コンソールでウィザードを用いてこのページを設定してください。
Weblogicドメインの共有ディレクトリにhsqldb.jar
ファイルをコピーしてください。 cp $SEAM_HOME/lib/hsqldb.jar $BEA_HOME/user_projects/domains/seam_examples/lib
管理コンソールの誘導にしたがってサーバを起動してください。 項39.1.3. 「ドメインの 起動/停止/アクセス 方法」
左側のツリーにあるseam_examples - Services- JDBC - Data Sources
に進んでください。
データソーステーブルの一番上にあるNew
ボタンを選択してください。
下記に従って入力してください。
Name: seam-jee5-ds
JNDI Name: seam-jee5-ds
Database Type and Driver: other
Next
ボタンを選択してください。
Transaction Options
ページにあるNext
ボタンを選択してください。
Connection Properties
ページに従って入力してください。
Database Name: hsqldb
Host Name: 127.0.0.1
Port: 9001
Username:sa
パスワードは未入力にしてください。
Password: 未入力
Next
ボタンを選択してください。
Connection Properties
ページに従って入力してください。
Driver Class Name: org.hsqldb.jdbcDriver
URL: jdbc:hsqldb:.
Username: sa
Password: 未入力
残りのフィールドはそのままにしておいてください。
Next
ボタンを選択してください。
ただ一つのAdminServer
の中にあるデータソース用に目的のドメインを選択してください。
では、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
ファイルは両方とも必要とされます。なぜなら両方のアプリケーションがアクセスを必要とするからです。
ビルドファイルをいくつか修正する必要があります。そうすれば、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/
でアプリケーションをチェックアウトしてください。
これは、Seam POJOとHibernate JPAで実装されたホテルの予約するアプリケーションのサンプルです。そしてこのサンプルはEJB3のサポートを起動するのに必要としません。Weblogic 10.Xを含むたくさんの共有コンテナーについて、このサンプルは既に設定ファイルやビルドファイルに登場してきました。
最初にサンプルをWeblogic 10.x用についてビルドます。デプロイするためにいくつかステップを踏みます。それからWeblogicのバージョンの違いについてJBoss ASと共に説明します。
このサンプルはWeblogicのJSFライブラリが項39.1.4. 「 WeblogicのJSFサポートの設定」で設定されていることを想定していることに注意してください。
最初にデータソースを設定して、次にアプリケーションをビルドして、最後にデプロイしてくさい。
サンプルで使用する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
Building it only requires running the correct ant command:
ant weblogic10
This will create a container specific distribution and exploded archive directories.
項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/
に従って、アプリケーションをチェックアウトしてください。
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
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, そして設定変更可能なデータソースのデモンストレーションを行います。
最初にしなければならないことは、 作成したいプロジェクトについて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
と打って新しいプロジェクトを参照してください。
最初にいくつかの設定ファイルを変更したり削除したりします。それからアプリケーションとともにデプロイされているライブラリを更新します。
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.1.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では管理コンソールを使用します。
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
>
あと残っているのはアプリケーションのデプロイです。データソースの設定を行い、アプリケーションをビルドしてデプロイしてください。
データソースを設定は、jee5 項39.2.2.1. 「hsqlのデータソースの設定」とほぼ同じです。ここにあるリストを除いて、リンクの指示に従ってください。
DataSource Name: seam-gen-ds
JNDI Name: seam-gen-ds
項39.1.2. 「Weblogicのドメインを作成する。」に従ってWeblogicをインストールするときは、開発モードにあるドメインを選択します。このことは、アプリケーションをデプロイするのに、自動デプロイディレクトリにただそのアプリケーションをコピーさえすればよいことを示しています。
cp ./dist/weblogic_example.war /jboss/apps/bea/user_projects/domains/seam_examples/autodeploy
http://localhost:7001/weblogic_example/
に従ってアプリケーションをチェックアウトしてください。