SeamFramework.orgCommunity Documentation

第39章 BEA Weblogic における Seam

39.1. WebLogicのインストールと操作
39.1.1. 10.3のインストール
39.1.2. Weblogicのドメインを作成する。
39.1.3. ドメインの 起動/停止/アクセス 方法
39.1.4. WeblogicのJSFサポートの設定
39.2. jee5/bookingサンプル
39.2.1. Weblogic上のEJB3の問題
39.2.2. jee5/booking の動作
39.3. jpa 予約サンプル
39.3.1. jpa 予約サンプルのビルドとデプロイ
39.3.2. Weblogic 10.xでの違い
39.4. Weblogic 10.x にseam-genを使用して作成したアプリケーションをデプロイ
39.4.1. seam-genをp起動するための設定
39.4.2. Weblogic 10.Xについての変更
39.4.3. アプリケーションのビルドとデプロイ

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ファイルについては下記で議論します。

Weblogic EJB サポート用の特別な 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 をインストールします。

  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. 次のページにあるコンポーネントのインストールはデフォルトのままにしてください。

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

これらの使用説明は(以降参照)は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 Order99を設定してください。それから、 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用にこの問題に対するパッチを作成しました。このパッチについては、CR370259CR363182の両方を参照してください。他のパッチと同じようにこのパッチは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.jarjboss-seam.jarに変更して元のアプリケーションの中のファイルを置き換えてください。jee5/bookingサンプルはこのデモンストレーションです。言うまでもなく、このjarファイルはTimerServiceDispatcherの機能を使用することはできません。

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

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

  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の中にあるデータソース用に目的のドメインを選択してください。

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

resources/META-INF/persistence.xml
resources/META-INF/weblogic-application.xml
resources/META-INF/ejb-jar.xml
resources/WEB-INF/weblogic.xml

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

build.xml
$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サポートの設定」で設定されていることを想定していることに注意してください。

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

項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/に従って、アプリケーションをチェックアウトしてください。

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
resources/META-INF/persistence-dev.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.xmljsf-impl.jarWARではないので、このリスナーは設定変更する必要があります。



 <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/に従ってアプリケーションをチェックアウトしてください。