WebLogic エンタープライズ JavaBeans (EJB) プログラマーズ ガイド
以下の節では、weblogic 固有の XML 文書型定義 (DTD) ファイル、weblogic-ejb-jar.xml
ファイルの EJB 2.0 デプロイメント記述子要素について説明します。これらの定義を使用して、EJB デプロイメントを構成する WebLogic 固有の weblogic-ejb-jar.xml
ファイルを作成します。
EJB 1.1 デプロイメント記述子要素については、「EJB 1.1 ユーザへの重要な情報」を参照してください。
XML ファイルの内容および要素の配置は、使用する各ファイルの文書型定義 (DTD) に従っている必要があります。WebLogic Server では、XML デプロイメント ファイルの DOCTYPE ヘッダ内部に埋めこまれた DTD は無視され、代わりにサーバと一緒にインストールされた DTD の場所が使用されます。ただし、DOCTYPE ヘッダ情報には、パーサ エラーを避けるために有効な URL 構文を指定する必要があります。
XML デプロイメント ファイルの編集、作成時に、各デプロイメント ファイルに対して正しい DOCTYPE ヘッダを指定することが重要です。特に、DOCTYPE ヘッダ内部に不正な PUBLIC
要素を使用すると、原因究明が困難なパーサ エラーになることがあります。
このヘッダは、デプロイメント記述子の文書型定義 (DTD) ファイルの場所およびバージョンを表します。このヘッダは外部 URL の java.sun.com を参照していますが、WebLogic Server には独自の DTD ファイルが用意されているので、ホスト サーバがインターネットにアクセスする必要はありません。ただし、この要素の DTD のバージョンはデプロイメント記述子のバージョンの識別に使用されるので、<!DOCTYPE...>
要素を weblogic-ejb-jar.xml
ファイルおよび weblogic-cmp-jar.xml
ファイルに含めて、外部 URL を参照させる必要があります。
XML の解析ツール (appc
など) でヘッダ情報が不正な XML ファイルを解析すると、次のようなエラー メッセージが表示されることがあります。
WebLogic Server 固有の weblogic-ejb-jar.xml
ファイルの PUBLIC
要素に適切なテキストは、表 A-1 に WebLogic Server のバージョン別で示してあります。
表 A-1 weblogic-ejb-jar.xml の PUBLIC 要素
WebLogic Server 固有の weblogic-cmp-jar.xml
ファイルのPUBLIC
要素に適切なテキストは、表 A-2 に WebLogic Server のバージョン別で示してあります。
表 A-2 weblogic-cmp-jar.xml の PUBLIC 要素
weblogic-cmp-jar.xml
ファイルの詳細については、「weblogic-cmp-jar.xml デプロイメント記述子のリファレンス」を参照してください。
Sun Microsystems 固有の ejb-jar.xml
ファイルの PUBLIC
要素に適切なテキストは、表 A-3 にエンタープライズ JavaBean のバージョン別で示してあります。
|
||
|
WebLogic Server の weblogic-ejb-jar.xml
デプロイメント記述子ファイルには、WebLogic Server 固有の要素を記述します。
WebLogic Server 8.1 の weblogic-ejb-jar.xml
の最上位要素は次のとおりです。
description
weblogic-version
weblogic-enterprise-bean
ejb-name
WebLogic Server 8.1 では、weblogic-ejb-jar.xml
に対して以下の変更が加えられました。
False
を持つように変更された。
weblogic-ejb-jar.xml
の要素のこのリストには、WebLogic Server 8.1 のサービス パックでサポートされていたすべての要素が含まれています。前節「WebLogic Server 8.1 での weblogic-ejb-jar.xml の変更点」では、WebLogic Server 8.1 またはそれ以降のサービス パックで追加、変更、または非推奨化された要素がリストされています。
ステートフル セッション Bean インスタンスがメソッドの同時呼び出しを許可するかどうかを指定します。デフォルトでは、EJB の仕様に従って allows-concurrent-calls
は False
であり、ステートフル セッション Bean のインスタンスでメソッド呼び出しを処理しているときにまた別の (同時) メソッド呼び出しがサーバに到着すると WebLogic Server から RemoteException
が送出されます。
True
に設定すると、EJB コンテナはメソッドの同時呼び出しをブロックするため、前の呼び出しが完了してから次のメソッドが呼び出されるようになります。
「stateful-session-descriptor」を参照してください。
ステートフル セッション Bean の remove
メソッドをトランザクション コンテキスト内で呼び出すことができることを指定します。
注意 : Synchronization
インタフェースを実装しているステートフル セッション Bean では、このタグを使用し、その後トランザクション終了前に remove
を呼び出すことがないようにしてください。それが行われた場合、EJB コンテナは同期コールバックを呼び出しません。
「stateful-session-descriptor」を参照してください。
以前の db-is-shared
要素に相当し、EJB コンテナがエンティティ Bean の永続データをトランザクション間でキャッシュするかどうかを指定します。
EJB コンテナによるデータの長期キャッシングの実行を有効にする場合、True
を指定します。EJB コンテナによるデータの短期キャッシングの実行を有効にする場合、False
を指定します。
読み込み専用 Bean の場合、WebLogic Server はこれの長期キャッシングを常に実行するので、cache-between-transactions
要素の値は無視されます。
詳細については、「cache-between-transactions によるデータベース読み込みの制限 (長期キャッシング)」を参照してください。
「persistence」を参照してください。
EJB がキャッシュから削除される順番を指定します。値は次のとおりです。
NRU の最小キャッシュ サイズは 8 です。max-beans-in-cache が 3 より小さい場合、WebLogic Server では max-beans-in-cache
の値に 8 が使用されます。
<stateful-session-cache><cache-type>NRU</cache-type>
</stateful-session-cache>
EJB がクライアント認証をサポートするか、または、必要とするかを指定します。
「iiop-security-descriptor」を参照してください。
EJB が転送レベルでのクライアント証明書認証をサポートするか、または、必要とするかを指定します。
「transport-requirements」を参照してください。
EJB がデプロイされた際、WebLogic Server がこの EJB に JNDI の通知を送るかどうかが指定されます。この属性が False
(デフォルト) の場合、WebLogic Server クラスタでは、ある特定のサーバ上にあるこの EJB の場所を示すために、自動的に JNDI ツリーを更新します。これにより、そのクライアントが同じサーバ上で連結されてなくても、すべてのクライアントがこの EJB にアクセスできるようになります。
EJB にアクセスするクライアントのすべてが、その Bean がデプロイされているのと同じサーバ上からアクセスすることが分かっている場合には、clients-on-same-server
を True
に設定できます。この場合、EJB がデプロイされる際、WebLogic Server クラスタは JNDI の通知をこの EJB に送信しません。クラスタ内の JNDI の更新ではマルチキャスト トラフィックが利用されるため、clients-on-same-server
を True
に設定することにより大容量のクラスタでの起動時間を短縮できます。
連結された EJB の詳細については、『WebLogic Server クラスタ ユーザーズ ガイド』の「連結されたオブジェクトの最適化」を参照してください。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
...
<clients-on-same-server>True</clients-on-same-server>
</weblogic-enterprise-bean>
コンテナがエンティティ Bean への同時アクセスを管理する方法を指定します。以下の 4 つの値のいずれかに設定します。
Exclusive
を指定すると、Bean がトランザクションに関連付けられている場合、WebLogic Server はキャッシュされたエンティティ EJB インスタンスを排他的にロックします。 EJB インスタンスに対するリクエストは、トランザクションが完了するまでブロックされます。このオプションは、WebLogic Server バージョン 3.1 ~ 5.1 までのデフォルトのロック動作です。Database
を設定すると、WebLogic Server はエンティティ EJB に対するリクエストのロックを基底のデータストアに委ねます。Database
同時方式では、WebLogic Server は、独立したエンティティ Bean インスタンスを割り当て、ロックとキャッシングをデータベースが処理できるようにします。これは現在のデフォルト オプションです。ReadOnly
は、読み込み専用エンティティ Bean で使用されます。複数のリクエストが並行して処理されるように各トランザクションで新しいインスタンスをアクティブ化します。WebLogic Server は、read-timeout-seconds
パラメータに基づいて ReadOnly
Bean の ejbLoad()
を呼び出します。Optimistic
では、トランザクションの間に EJB コンテナまたはデータベースでロックを行いません。EJB コンテナは、トランザクションをコミットする前に、あるトランザクションが更新したデータが変化していないことを確かめます。更新データのどれかが変わっていた場合、EJB コンテナはトランザクションをロールバックします。Exclusive
および Database
のロック動作の詳細については、「同時方式の選択」を参照してください。read-only
エンティティ Bean の詳細については、「読み書き対応エンティティ Bean と読み込み専用エンティティ Bean」を参照してください。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
<entity-descriptor>
<entity-cache>
<concurrency-strategy>ReadOnly</concurrency-strategy>
</entity-cache>
</entity-descriptor>
</weblogic-enterprise-bean>
EJB における転送の機密性の要件を指定します。confidentiality
要素を使用すると、他のエンティティに内容を見られることなく、クライアントとサーバ間でデータが送信されるようになります。
「transport-requirements」を参照してください。
メッセージ駆動型 EJB がキューとトピックを作成するためにルックアップする JMS 接続ファクトリの JNDI 名を指定します。「送り先を考慮した MDB のコンフィグレーション」および「connection-factory-jndi-name の設定方法」を参照してください。
<message-driven-descriptor><connection-factory-jndi-name>
java:comp/env/jms/MyConnectionFactory
</connection-factory-jndi-name>
</message-driven-descriptor>
WebLogic Server 8.1 SP01 で導入され、本来は ejbCreate
が匿名プリンシパルで実行される状況で使用されるプリンシパルを指定します。そのような状況では、どのプリンシパルを選択するかは次のルールで決まります。
create-as-principal-name
が設定されている場合
そのプリンシパルを使用します。
あるいは
ejb-jar.xml
で Bean に対して run-as
ロールが指定されている場合
run-as-role-assignment
を設定するためのルールに従ってプリンシパルを使用します。
あるいは
ejbCreate
を匿名プリンシパルとして実行します。
create-as-principal-name
要素は、ejbCreate
内の処理が匿名プリンシパルよりも高レベルのパーミッションを必要とする場合にのみ指定する必要があります。
この要素は、ステートレス セッション Bean とメッセージ駆動型 Bean の ejbCreate
メソッドに影響します。
「remove-as-principal-name」、「passivate-as-principal-name」、および「principal-name」も参照してください。
トランザクションの完了時にトランザクションですべての Bean の永続ストレージを更新するには、delay-updates-until-end-of-tx
要素を True
(デフォルト) に設定します。通常、この設定によって不要な更新を防ぐことができるため、パフォーマンスが向上します。ただし、データベース トランザクション内のデータベース更新の順序は保持されません。
データベースがアイソレーション レベルとして TransactionReadCommittedUncommitted
を使用している場合は、進行中のトランザクションに関する中間結果を他のデータベースのユーザに表示することもできます。この場合、delay-updates-to-end-of-tx
を False
に設定して、各メソッド呼び出しの完了時に Bean の永続ストレージを更新するように指定します。詳細については、「ejbLoad() と ejbStore() の動作について」を参照してください。
注意 : delay-updates-until-end-of-tx
を False
に設定しても、各メソッド呼び出しの後にデータベース更新が「コミットされた」状態になるわけではありません。更新はデータベースに送信されるだけです。更新は、トランザクションの完了時にのみデータベースにコミットまたはロールバックされます。
<entity-descriptor><persistence>
...
...
<delay-updates-until-end-of-tx>False</delay-updates-until-end-of-tx>
</persistence>
</entity-descriptor>
<dscription>親要素の説明</description>
WebLogic Server JNDI ツリーにデプロイされている実際の JMS キューまたはトピックにメッセージ駆動型 Bean を関連付けるために使用する JNDI 名を指定します。
「message-driven-descriptor」を参照してください。
ID を指定した警告メッセージを WebLogic Server が無効化するように指定します。以下の 4 つの値のいずれかに設定します。
BEA-010001
- 警告メッセージ「EJB class loaded from system classpath during deployment.」を無効化する。BEA-010054
- 警告メッセージ「EJB class loaded from system classpath during compilation.」を無効化する。BEA-010200
- 警告メッセージ「EJB impl class contains a public static field, method or class.」を無効化する。BEA-010202
- 警告メッセージ「Call-by-reference not enabled.」を無効化する。警告メッセージ「Call-by-reference not enabled」を無効にするには、次のように <disable-warning> を設定します。
<disable-warning>BEA-010202</disable-warning>
EJB が実行されるべきスレッド プールをどのサーバが実行するかを指定します。ディスパッチ ポリシーは、エンティティ、セッション、メッセージ駆動型など、すべての種類の Bean でサポートされています。
dispatch-policy
が指定されていないか、指定された dispatch-policy
が存在しないサーバ実行スレッド プールを参照していた場合、代わりにサーバのデフォルトの実行スレッド プールが使用されます。
WebLogic Server は、対応する名前を持つ実行スレッド キューがホスト サーバ インスタンスになければ、dispatch-policy
を無視します。
メッセージ駆動型 Bean (MDB) が外部の (WebLogic 以外の) 送り先ソースによって駆動されている場合、MDB は外部プロバイダのスレッド メカニズムで実行される可能性があるので、WebLogic Server は dispatch-policy
を無視することがあります。たとえば、IBM WebSphere MQSeries メッセージング ソフトウェアの場合、dispatch-policy
は非トランザクション キューについては対応されていません。アプリケーション コードは MQSeries スレッド内で実行されます。MQSeries トランザクション キュー、および非トランザクションとトランザクションの両トピックにおいては、dispatch-policy
は受け付けられます。
同時に実行中の MDB インスタンスの最大数は、max-beans-in-free-pool と dispatch-policy
の値の組み合わせによって指定されます。
maxConcurrentMDBs = Min(max-beans-free-pool, default-thread-pool-size/2+1)
.
デフォルトのスレッド プールで実行される MDB では、同時実行性がスレッド プール サイズの半分に 1 つを追加したものに制限されています。これにより、他のサービス、およびデフォルト スレッド プールを共有するアプリケーションとのデッドロックが回避されます。
<dispatch-policy>queue_name</dispatch-policy>
Bean が ejb-local-ref
要素で参照する WebLogic Server インスタンスの EJB の JNDI 名をマップします。
<ejb-local-reference-description>
<ejb-ref-name>AdminBean</ejb-ref-name>
<jndi-name>payroll.AdminBean</jndi-name>
</ejb-local-reference-description>
ejb-jar.xml
で指定された同じ名前を使用して、エンタープライズ Bean の名前を指定します。エンタープライズ Bean のコードは名前に左右されないので、アプリケーション アセンブリ処理中に名前を変更してもエンタープライズ Bean の機能には影響しません。デプロイメント記述子の ejb-name
と、デプロイヤがエンタープライズ Bean のホームに割り当てる JNDI 名との間には、構築された関係はありません。
注意 : weblogic-enterprise-bean
では推奨されていません。 詳細については、「EJB リンクの使用」を参照してください。
「method」を参照してください。
WebLogic Server の EJB の JNDI 名を、ejb-jar.xml
の ejb-ref-name
要素でそれを指定するのに使われる名前にマップします。
<ejb-reference-description>
<ejb-ref-name>AdminBean</ejb-ref-name>
<jndi-name>payroll.AdminBean</jndi-name>
</ejb-reference-description>
リソース参照名を指定します。この要素は、EJB プロバイダが ejb-jar.xml
デプロイメント ファイル内に配置する参照です。
<reference-descriptor>
<ejb-reference-description>
<ejb-ref-name>AdminBean</ejb-ref-name>
<jndi-name>payroll.AdminBean</jndi-name>
</ejb-reference-description>
</reference-descriptor>
デフォルトでは、EJB 実装クラスは他の EJB クラスと同じクラスローダにロードされます。enable-bean-class-redeploy
要素が有効化されていると、実装クラスは、スーパー クラスと共に、EJB モジュール クラスローダの子クラスローダにロードされます。これにより、EJB 実装クラスは EJB モジュール全体を再デプロイしなくても再デプロイできるようになります。
Bean クラスを子クラスローダにロードすると、いくつかの問題が発生する可能性があります。まず、Bean クラスが親クラスローダにロードされたどのクラスからも見えなくなってしまうため、これらのクラスが Bean クラスを参照できなくなったり、エラーが発生したりします。また、Bean クラスは別のクラスローダにロードされたクラスに対しては、パッケージ保護されたメソッドを呼び出せなくなります。したがって、Bean クラスが同じパッケージ内のヘルパー クラスを呼び出した場合、ヘルパー クラス メソッドは public として宣言する必要があります。そうしないと、IllegalAccessErrors
が発生します。
注意 : この機能を有効化するには、2 フェーズ デプロイメントの使用が必要です。2 フェーズ デプロイメントが使われていないと、WebLogic Server は、enable-bean-class-redeploy
設定を無視します。2 フェーズ デプロイメントについては、『WebLogic Server アプリケーションのデプロイメント』の「2 フェーズ デプロイメント プロトコル」を参照してください。
次の XML スタンザでは、単独の Bean クラスの再デプロイメントが可能です。
<enable-bean-class-redeploy>True</enable-bean-class-redeploy>
enable-call-by-reference
が False
の場合、EJB メソッドのパラメータは EJB がリモートから呼び出されるか、同じ EAR から呼び出されるかに関係なくコピーされます (または値で渡される)。
注意 : false, に設定しても、次の目的で使用する場合は call-by-reference
が使用されます:
enable-call-by-reference
が True
の場合、同じ EAR ファイル内またはスタンドアロンの JAR ファイルから呼び出された EJB メソッドは引数を参照で渡します。パラメータはコピーされないので、これによってメソッド呼び出しのパフォーマンスが向上します。
注意 : メソッドのパラメータは、EJB がリモートで呼び出されたときには常に値で渡されます。
<weblogic-enterprise-bean><entity-descriptor>
<ejb-name>AccountBean</ejb-name>
...
<enable-call-by-reference>False</enable-call-by-reference>
</entity-descriptor>
</weblogic-enterprise-bean>
True
に設定すると、動的クエリが有効になります。動的クエリは、EJB 2.0 CMP Bean を使用しているときのみ使えます。
<enable-dynamic-queries>True</enable-dynamic-queries>
WebLogic Server 内のエンティティ EJB インスタンスのキャッシュに使用する以下のオプションを定義します。
詳細については、「エンティティのキャッシングについて」を参照してください。
<entity-descriptor>
<entity-cache>
<max-beans-in-cache>...</max-beans-in-cache>
<idle-timeout-seconds>...</idle-timeout-seconds>
<read-timeout-seconds>...<read-timeout-seconds>
<concurrency-strategy>...</concurrency-strategy>
</entity-cache>
<persistence>...</persistence>
<entity-clustering>...</entity-clustering>
</entity-descriptor>
エンティティ Bean が使用する、アプリケーション レベルのエンティティ キャッシュを参照します。アプリケーション レベルのキャッシュは、同じアプリケーション内の複数エンティティ Bean によって共有されるキャッシュです。entity-cache-name
で指定する値は、weblogic-application.xml
ファイルでアプリケーション レベルのエンティティ キャッシュに当てた名前と一致させる必要があります。
weblogic-application.xml
ファイルの詳細については、『WebLogic Server アプリケーションの開発』の「エンタープライズ アプリケーションのデプロイメント記述子の要素」を参照してください。
「entity-cache-ref」を参照してください。
同じアプリケーションに属する複数のエンティティ Bean のインスタンスをキャッシュできるアプリケーション レベルのエンティティ キャッシュを表します。アプリケーション レベルのエンティティ キャッシュは、weblogic-application.xml
ファイルで宣言されます。
concurrency-strategy を使用し、その Bean に使用させたい同時方式のタイプを定義します。同時方式はアプリケーション レベル キャッシュのキャッシュ戦略と適合していなくてはなりません。たとえば、
Exclusive
キャッシュは、concurrency-strategy
が Exclusive
である Bean だけをサポートします。MultiVersion
キャッシュは、Database
、ReadOnly
、および Optimistic
同時方式をサポートします。
<entity-cache-ref>
<entity-cache-name>AllEntityCache</entity-cache-name>
<read-timeout-seconds>600</read-timeout-seconds>
<cache-between-transactions>true</cache-between-transactions>
<concurrency-strategy>ReadOnly</concurrency-strategy>
<estimated-bean-size>20</estimated-bean-size>
</entity-cache-ref>
エンティティ Bean が WebLogic クラスタでどのようにレプリケートされるのかを指定します。
次の例では、entity-clustering
スタンザの構造を示します。
<entity-clustering>
<home-is-clusterable>True</home-is-clusterable>
<home-load-algorithm>random</home-load-algorithm>
<home-call-router-class-name>beanRouter</home-call-router-
class-name>
<use-servside-stubs>True</use-servside-stubs>
</entity-clustering>
エンティティ Bean に適用する以下のデプロイメント パラメータを指定します。
pool
entity-cache
(または entity-cache-ref
)persistence
entity-clustering
invalidation-target
enable-dynamic-queries
<entity-descriptor>
<entity-cache>...</entity-cache>
<persistence>...</persistence>
<entity-clustering>...</entity-clustering>
<invalidation-target>...</invalidation-target>
<enable-dynamic-queries>...</enable-dynamic-queries>
</entity-descriptor>
エンティティ Bean のインスタンスの推定平均サイズ (バイト単位) を指定します。各インスタンスが消費するメモリのバイト数の平均値です。
estimated-bean-size
要素は、Bean をキャッシュするのに使用する、アプリケーション レベルのキャシュがともにバイト数や MB 単位で指定されている場合に併せて使用します。
エンティティ Bean インスタンスが消費する正確なバイト数が分からなくても、サイズを指定することにより、ある一時点でキャッシュを共有する Bean に対し相対的な重みを与えることができます。
たとえば、Bean A と Bean B が 1000 バイトのキャッシュを共有し、A のサイズが 10 バイト、B のサイズが 20 バイトであるとします。その場合、キャッシュに格納できるのは、最大で、A のインスタンスで 100、B のインスタンスで 50 です。A のインスタンスが 100 個キャッシュされた場合、B のインスタンスは 0 個、キャッシュされたことになります。
「entity-cache-ref」を参照してください。
特定のセキュリティ ロールが、デプロイメント記述子の外の、セキュリティ レルム内で外部定義されていることを示します。セキュリティ ロールおよびその principal-name のマッピングが別のところで定義されているため、principal-name はデプロイメント記述子内では指定されません。このタグは、principal-name
要素のセットの代わりに、指示を行うプレースホルダとして使用されます。
CMP エンティティ EJB でのみ有効。finders-load-bean
は、ファインダ メソッドの呼び出しによって Bean への参照が返されてから WebLogic Server が EJB をキャッシュにロードするかどうかを指定します。この要素を True
に設定した場合、Bean への参照がファインダによって返されると、WebLogic Server はすぐにその Bean をキャッシュにロードします。この要素を False
に設定した場合、WebLogic Server は、最初のメソッドが呼び出されるまで Bean を自動的にロードしません。この動作は、EJB 1.1 の仕様と一致しています。
<entity-descriptor>
<persistence>
<finders-load-bean>True</finders-load-bean>
</persistence>
</entity-descriptor>
global-role
要素は非推奨となっており、WebLogic の将来のバージョンでは削除される予定です。代わりに externally-defined 要素を使用してください。
global-role
要素は、セキュリティ レルム内で特定のセキュリティ ロールが「グローバルに」定義されていることを示します。セキュリティ ロールおよびその principal-name のマッピングが別のところで定義されているため、principal-name はデプロイメント記述子内では指定されません。このタグは、principal-name
要素のセットの代わりに、指示を行うプレースホルダとして使用されます。
Bean のメソッド呼び出しのルーティングに使用するカスタム クラスの名前を指定します。このクラスは weblogic.rmi.cluster.CallRouter()
を実装する必要があります。指定すると、このクラスのインスタンスは各メソッド呼び出しの前に呼び出されます。ルータ クラスでは、メソッドのパラメータを基に、ルーティングするサーバを選択できます。このクラスは、サーバ名を返すか、または現在のロード アルゴリズムがサーバを選択する必要があることを示す null を返します。
「entity-clustering」および「stateful-session-clustering」を参照してください。
home-is-clusterable
が「True
」の場合、クラスタ内の複数の WebLogic Server から EJB をデプロイできます。ホーム スタブの呼び出しは、Bean がデプロイされるサーバ間で負荷が分散されます。Bean のホスト サーバにアクセスできなかった場合、呼び出しは、Bean を提供する他のサーバに自動的にフェイルオーバします。
「entity-clustering」を参照してください。
クラスタ内の EJB ホームのレプリカ間のロード バランシングに使用するアルゴリズムを指定します。この要素を定義しない場合、WebLogic Server はサーバ要素、weblogic.cluster.defaultLoadAlgorithm
で指定されたアルゴリズムを使用します。
home-load-algorithm
は以下のいずれかの値に定義できます。
round-robin
- Bean のホスト サーバ間で順番にロード バランシングを実行します。random
- Bean のホスト サーバ間で EJB ホームのレプリカがランダムにデプロイされます。weight-based
- ホスト サーバの現在の負荷に従って、EJB ホームのレプリカをデプロイするサーバが決まります。round-robin-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、ラウンドロビン ロード バランシングがサーバ インスタンス間の接続に使用されます。weight-based-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、重みベース ロード バランシングがサーバ インスタンス間の接続に使用されます。random-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、ランダム ロード バランシングがサーバ インスタンス間の接続に使用されます。詳細については、『WebLogic Server クラスタ ユーザーズ ガイド』の「EJB と RMI オブジェクトのロード バランシング」を参照してください。
「entity-clustering」および「stateful-session-clustering」を参照してください。
同じメソッドを同じ引数で繰り返し呼び出したとしても、1 回呼び出したときとまったく同じ結果になるように記述される、クラスタ化された EJB のメソッドのリストを定義します。これにより、フェールオーバ ハンドラは、失敗したサーバ上で実際に呼び出しがコンパイルされるかどうかを知らなくても、失敗した呼び出しを再試行できるようになります。あるメソッドに対し多重呼び出し不変メソッドを有効にした場合、EJB スタブは、EJB のホスト サーバに接続できるかぎり、あらゆる失敗から自動的に回復することができます。
EJB でクラスタリングが有効であること。クラスタ化を有効にするには、「entity-clustering」、「stateful-session-clustering」、および「stateless-clustering」を参照してください。
ステートレス セッション Bean ホームおよび読み込み専用エンティティ Bean のメソッドは、自動的に多重呼び出し不変に設定されます。これらについては多重呼び出し不変を明示的に設定する必要はありません。
<idempotent-method>
<method>
<description>...</description>
<ejb-name>...</ejb-name>
<method-intf>...</method-intf>
<method-name>...</method-name>
<method-params>...</method-params>
</method>
</idempotent-method>
EJB が ID アサーションをサポートするか、または、必要とするかを指定します。
「iiop-security-descriptor」を参照してください。
ステートフル セッション EJB がキャッシュに保持される最長時間を定義します。この時間を過ぎると、キャッシュ内の Bean の数が max-beans-in-cache
で指定した値を超えている場合、WebLogic Server では Bean インスタンスが削除されます。削除された Bean インスタンスに対してはパッシベーションが行われます。詳細については、「ステートフル セッション EJB のキャッシュとパッシベーション」を参照してください。
idle-timeout-seconds
は entity-cache
スタンザで使用しますが、WebLogic Server 8.1 SP1 と SP2 では、エンティティ EJB のライフサイクルの管理にその値を使用しません。それらのサービス パックでは、idle-timeout-seconds
はエンティティ Bean がいつキャッシュから削除されるのかに影響を与えません。weblogic-ejb-jar.xml
デプロイメント記述子の <entity-cache>
でタグを介して指定された個々のエンティティ Bean キャッシュでは、<concurrency-strategy>
が Database
、ReadOnly
Optimistic
、または Exclusive
のいずれかに設定されているエンティティ Bean に限り、既存の <idle-timeout-seconds>
要素が有効化されます。 次のエントリでは、max-beans-in-cache
の値に達し、Bean がキャッシュに 20 分保持されている場合、ステートフル セッション EJB AccountBean
が削除の対象になります。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
<stateful-session-descriptor>
<stateful-session-cache>
<max-beans-in-cache>200</max-beans-in-cache>
<idle-timeout-seconds>1200</idle-timeout-seconds>
</stateful-session-cache>
</stateful-session-descriptor>
</weblogic-enterprise-bean>
Bean レベルのセキュリティ コンフィグレーション パラメータを指定します。これらのパラメータにより、IOR に含まれる IIOP セキュリティ情報が決定します。
<iiop-security-descriptor>
<transport-requirements>...</transport-requirements>
<client-authentication>supported<client-authentication>
<identity-assertion>supported</identity-assertion>
</iiop-security-descriptor>
initial-beans-in-free-pool
の値を指定する場合は、プールの初期サイズを設定することになります。WebLogic Server は起動時に、Bean クラスごとに指定された数の Bean インスタンスをフリー プールに格納します。この方法で Bean インスタンスをフリー プールに格納しておくと、リクエストが来てから新しいインスタンスを生成せずに Bean に対する初期要求が可能になるため、EJB の初期応答時間が短縮されます。
「pool」を参照してください。
JMS プロバイダが初期コンテキストの作成に使用する初期コンテキスト ファクトリを指定します。「送り先を考慮した MDB のコンフィグレーション」および「initial-context-factory の設定方法」を参照してください。
<message-driven-descriptor>
<initial-context-factory>fiorano.jms.rtl.FioranoInitialContextFactory
</initial-context-factory>
</message-driven-descriptor>
EJB の転送の整合性の要件を指定します。integrity
要素を使用すると、クライアントとサーバ間で、データが途中で変化することなく転送されるようになります。
「transport-requirements」を参照してください。
コンテナ管理による永続性エンティティ EJB が変更された場合に、無効化する読み込み専用エンティティ EJB を指定します。
対象の ejb-name
は読み込み専用エンティティ EJB でなければならないので、この要素は EJB 2.0 のコンテナ管理による永続性エンティティ EJB に対してのみ指定できます。
<invalidation-target>
<ejb-name>StockReaderEJB</ejb-name>
</invalidation-target>
EJB の保存時に WebLogic Server によって呼び出されるメソッドを指定します。指定したメソッドはブール値を返す必要があります。メソッドを指定しない場合、WebLogic Server では、EJB は常に変更されていると見なされて保存されます。
メソッドを指定して適切な値を設定すると、EJB 1.1 準拠の Bean、および Bean 管理の永続性を使用する Bean のパフォーマンスが向上します。ただし、メソッドの戻り値にエラーがあると、データに矛盾が発生する場合があります。
注意 : isModified()
は、EJB 2.0 仕様に基づく 2.0 CMP エンティティ EJB では不要ですが、BMP および 1.1 CMP の EJB では有効です。コンテナ管理の永続性を使用して EJB 2.0 エンティティ Bean をデプロイする場合、WebLogic Server によって、変更されている EJB フィールドが自動的に検出され、そのフィールドのみが基底のデータストアに書き込まれます。
<entity-descriptor>
<persistence>
<is-modified-method-name>semidivine</is-modified-method-name>
</persistence>
</entity-descriptor>
EJB のメソッドレベルのトランザクション アイソレーション設定を定義します。有効な値は以下のとおり。
TRANSACTION_SERIALIZABLE
- このトランザクションを同時に複数回実行すると、トランザクションを順番に複数回実行することと同じことになります。TRANSACTION_READ_COMMITTED
- トランザクションはコミットされた他のトランザクションの更新だけを参照できます。TRANSACTION_READ_UNCOMMITTED
- トランザクションはコミットしていない他のトランザクションの更新を参照できます。TRANSACTION_REPEATABLE_READ
- トランザクションでデータの一部を読み取ると、そのデータが他のトランザクションで変更されても、最初の読み取り時と同じ値が返されます。以下の追加の値は、Oracle データベース、およびコンテナ管理による永続性 (CMP) EJB でのみサポートされています。
TRANSACTION_READ_COMMITTED_FOR_UPDATE
- Oracle データベース、およびコンテナ管理による永続性 (CMP) EJB でのみサポートされています。この値を使用すると、アイソレーション レベルは TRANSACTION_READ_COMMITTED
に設定され、トランザクションの間、メソッドで実行される SQL SELECT
文はすべて FOR UPDATE
が付加されて実行されます。この結果、隔離された行が更新用にロックされます。Oracle でクエリの影響を受ける行をすぐにロックできない場合は、それらの行が解放されるまで待ちします。この状況は、トランザクションで COMMIT
または ROLLBACK
が実行されるまで続きます。このアイソレーション レベルを使用すると、次のエラーを防止できます。
java.sql.SQLException: ORA-08177: can't serialize access for this transaction
このエラーは、Oracle データベースで TRANSACTION_SERIALIZABLE
アイソレーション レベルを使用したときに発生します。
TRANSACTION_READ_COMMITTED_FOR_UPDATE_NO_WAIT
- Oracle データベース、およびコンテナ管理による永続性 (CMP) EJB でのみサポートされています。 この値を使用すると、アイソレーション レベルは TRANSACTION_READ_COMMITTED
に設定され、トランザクションの間、メソッドで実行される SQL SELECT
文はすべて FOR UPDATE NO WAIT が付加されて実行されます。この結果、選択された行が更新用にロックされます。
TRANSACTION_READ_COMMITTED_FOR_UPDATE
設定とは違って、必要なときロックがすぐに達成されない場合、TRANSACTION_READ_COMMITTED_FOR_UPDATE_NO_WAIT
では Oracle DBMS が NOT WAIT
になります。このため、影響を受ける SELECT
クエリは失敗し、コンテナから例外が送出されます。
異なるアイソレーション レベルのサポートの詳細については、各データベースのマニュアルを参照してください。
「transaction-isolation」を参照してください。
JMS 送り先に接続するときの MDB のクライアント ID を指定します。JMS トピックに対する恒久サブスクリプションで必須です。
connection-factory-jndi-name で MDB が使用する接続ファクトリを指定した場合、クライアント ID は config.xml
内の関連付けられている JMSConnectionFactory
スタンザの ClientID
要素で定義できます。
config.xml
の JMSConnectionFactory
で ClientID
を指定しないか、デフォルト接続ファクトリを使用する (connection-factory-jndi-name を指定しない) 場合、メッセージ駆動型 Bean は jms-client-id
値をそのクライアント ID として使用します。
<jms-client-id>MyClientID</jms-client-id>
JMS 送り先に再接続しにいく間隔の秒数を指定します。各メッセージ駆動型 Bean は、関連付けられている JMS 送り先でリスンします。JMS 送り先が別の WebLogic Server インスタンスまたは外部 JMS プロバイダに配置されている場合には、JMS 送り先にアクセスできなくなることもあります。この場合、EJB コンテナは自動的に JMS サーバに再接続しようとします。JMS サーバが再び起動した時点で、メッセージ駆動型 Bean は再びメッセージを受信できるようになります。
<jms-polling-interval-seconds>5</jms-polling-interval-seconds>
WebLogic Server で使用可能な実際の EJB、リソース、または参照の JNDI 名を指定します。
JNDI 名を Bean に割り当てるのは推奨されません。グローバル JNDI 名は、クラスタ化されたサーバの起動時に大量のマルチキャスト トラフィックを引き起こします。より適切なプラクティスについては、「EJB リンクの使用」を参照してください。
「resource-description」および「ejb-reference-description」を参照してください。
Bean のローカル ホームの JNDI 名。Bean がリモート ホームとローカル ホームを持つ場合は、それぞれのホームに 1 つずつの JNDI 名を割り当てることもできます。
<local-jndi-name>weblogic.jndi.WLInitialContext
</local-jndi-name>
メモリの許容範囲内で、このクラスのオブジェクトの最大数を指定します。max-bean-in-cache
の値に達すると、WebLogic Server では、最近クライアントに使用されていない EJB の一部に対してパッシベーションが行われます。また、「ステートフル セッション EJB のキャッシュとパッシベーション」で説明されているように、max-beans-in-cache
の値は、EJB を WebLogic Server のキャッシュからいつ削除するかにも影響を与えます。
注意 :使用可能なメモリ量と必要なメモリ量を正しく評価してください。極端に大きい値を max-beans-in-cache パラメータに割り当てると、OutOfMemoryError が発生する可能性があります。必要なメモリ キャッシュ量は、キャッシュに格納される Bean の数と EJB のサイズを掛けることで算出できます。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
<entity-descriptor>
<entity-cache>
<max-beans-in-cache>200</max-beans-in-cache>
</entity-cache>
</entity-descriptor>
</weblogic-enterprise-bean>
WebLogic Server は、すべてのエンティティ Bean、ステートレス セッション Bean、およびメッセージ駆動型 Bean クラスについて EJB のフリー プールを保持します。max-beans-in-free-pool
要素は、このフリー プールのサイズを定義します。
「pool」を参照してください。
メッセージ駆動型 Bean を WebLogic Server の JMS 送り先に関連付けます。
次の例では、message-driven-descriptor
スタンザの構造を示します。
<message-driven-descriptor>
<pool>...</pool>
<destination-jndi-name>...</destination-jndi-name>
<initial-context-factory>...</initial-context-factory>
<provider-url>...</provider-url>
<connection-factory-jndi-name>...<connection-factory-jndi-name>
<jms-polling-interval-seconds>...</jms-polling-interval-seconds>
<jms-client-id>...</jms-client-id>
</message-driven-descriptor>
エンタープライズ Bean のホームまたはリモート インタフェースのメソッドあるいはメソッドのセットを定義します。
<method>
<description>...</description>
<ejb-name>...</ejb-name>
<method-intf>...</method-intf>
<method-name>...</method-name>
<method-params>...</method-params>
</method>
WebLogic Server がアイソレーション レベルのプロパティを適用する EJB のインスタンスを指定します (メソッドが複数のインタフェースで同じシグネチャを持つ場合)。
「method」を参照してください。
WebLogic Server がアイソレーション レベルのプロパティを適用する個々の EJB メソッドの名前を指定します。アスタリスク (*) を使用すると EJB のホームおよびリモート インタフェースの全メソッドを指定できます。
method-name
を指定する場合、そのメソッドは指定の ejb-name
になければなりません。
「method」を参照してください。
メソッド パラメータの完全修飾 Java タイプ名を指定します。
「method-params」を参照してください。
各メソッド パラメータの Java タイプ名を定義する 1 つまたは複数の要素があります。
method-params
スタンザには、次のように 1 つまたは複数の method-param
要素が含まれます。
<method-params>
<method-param>java.lang.String</method-param>
...
</method-params>
WebLogic Server 8.1 SP01 で導入された passivate-as-principal-name
要素は、本来は ejbPassivate
が匿名プリンシパルで実行される状況で使用されるプリンシパルを指定します。そのような状況では、どのプリンシパルを選択するかは次のルールで決まります。
passivate-as-principal-name
が設定されている場合
そのプリンシパルを使用します。
あるいは
ejb-jar.xml
で Bean に対して run-as
ロールが指定されている場合
run-as-role-assignment
を設定するためのルールに従ってプリンシパルを使用します。
あるいは
ejbPassivate
を匿名プリンシパルとして実行します。
passivate-as-principal-name
要素は、ejbPassivate
内の処理が匿名プリンシパルよりも高レベルのパーミッションを必要とする場合にのみ指定する必要があります。
この要素は、キャッシュのタイムアウトでパッシベーションが行われたときにステートレス セッション Bean の ejbPassivate
メソッドに影響します。
「remove-as-principal-name」、「create-as-principal-name」、および「principal-name」も参照してください。
コンテナ管理の永続性サービスを使用するエンティティ EJB でのみ必須です。persistence
要素は、WebLogic Server のエンティティ EJB に対する永続性タイプ、トランザクション コミット動作、ejbLoad()
動作、および ejbStore()
動作を決定するプロパティを定義します。
<entity-descriptor>
<persistence>
<is-modified-method-name>...</is-modified-method-name>
<delay-updates-until-end-of-tx>...</delay-updates-until-end-of-tx>
<finders-load-beand>...</finders-load-bean>
<persistence-use>...</persistence-use>
</persistence>
</entity-descriptor>
コンテナ管理の永続性サービスを使用するエンティティ EJB でのみ必須です。persistence-use
要素は、この特定の Bean に使用する永続性タイプの識別子を格納します。
<persistence-use>
<type-identifier>WebLogic_CMP_RDBMS</type-identifier>
<type-version>5.1.0</type-version>
<type-storage>META-INF/weblogic-cmp-jar.xml</type-storage>
</persistence-use>
パッシベーションされたステートフル セッション Bean インスタンスの状態を WebLogic Server が格納するファイル システム ディレクトリを指定します。詳細については、「パッシベーションされた Bean の永続ストア ディレクトリの指定」を参照してください。
<stateful-session-descriptor>
<stateful-session-cache>...</stateful-session-cache>
<allow-concurrent-calls>...</allow-concurrent-calls>
<persistent-store-dir>MyPersistenceDir</persistent-store-dir>
<stateful-session-clustering>...</stateful-session-clustering>
<allow-remove-during-transaction>
</stateful-session-descriptor>
エンティティ EJB、ステートレス セッション EJB、およびメッセージ駆動型 EJB の WebLogic Server フリー プールの動作をコンフィグレーションします。オプションは以下のとおりです。
<stateless-session-descriptor>
<pool>
<max-beans-in-free-pool>500</max-beans-in-free-pool>
<initial-beans-in-free-pool>250</initial-beans-in-free-pool>
</pool>
</stateless-session-descriptor>
指定した role-name
に適用される実際の WebLogic Server プリンシパルの名前を指定します。security-role-assignment スタンザに少なくとも 1 つの principal-name
が必要です。各 role-name で複数の principal-name
を定義することもできます。
「security-role-assignment」を参照してください。
InitialContext
で使用される URL を指定します。「送り先を考慮した MDB のコンフィグレーション」および「provider-url の設定方法」を参照してください。
<message-driven-descriptor><provider-url>WeblogicURL:Port</provider-url>
</message-driven-descriptor>
Read-Only
エンティティ Bean で ejbLoad
を呼び出す間隔の秒数を指定します。値を 0 にすると、WebLogic Server は Bean がキャッシュに送られたときだけ ejbLoad()
を呼び出します。
次の例では、インスタンスが最初にキャッシュされた場合にのみ WebLogic Server が AccountBean
クラスのインスタンスに対して ejbLoad()
を呼び出します。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
<entity-descriptor>
<entity-cache>
<read-timeout-seconds>0</read-timeout-seconds>
</entity-cache>
</entity-descriptor>
</weblogic-enterprise-bean>
ejb-jar.xml
ファイル内の参照を、WebLogic Server で実際に使用可能なリソース ファクトリと EJB の JNDI 名にマップします。
reference-descriptor
スタンザには、リソース ファクトリ参照および EJB 参照を定義するために 1 つまたは複数のスタンザが追加されます。次の例に、これらの要素の構造を示します。
<reference-descriptor>
<resource-description>
...
</resource-description>
<resource-env-description>
...
</resource-env-description>
<ejb-reference-description>
...
</ejb-reference-description>
<ejb-local-reference-description>
...
</ejb-local-reference-description>
</reference-descriptor>
リモート RMI クライアントがタイムアウトするまでの待機時間を指定します。『WebLogic RMI プログラマーズ ガイド』の「RMI タイムアウトの使用」を参照してください。
以下のエントリの場合、リモート RMI クライアントは 5 秒待機してからタイムアウトします。
<weblogic-enterprise-bean>
<ejb-name>AccountBean</ejb-name>
...
<remote-client-timeout>5</remote-client-timeout>
</weblogic-enterprise-bean>
このパラメータは、ejbRemove
内の処理が匿名プリンシパル以上のパーミッションを必要とする場合にのみ指定する必要がある。
WebLogic Server 8.1 SP1 で導入された remove-as-principal-name
要素は、本来は ejbRemove
が匿名プリンシパルで実行される状況で使用されるプリンシパルを指定します。そのような状況では、どのプリンシパルを選択するかは次のルールで決まります。
remove-as-principal-name
が設定されている場合
そのプリンシパルを使用します。
あるいは
ejb-jar.xml
で Bean に対して run-as
ロールが指定されている場合
run-as-role-assignment
を設定するためのルールに従ってプリンシパルを使用します。
あるいは
ejbRemove
を匿名プリンシパルとして実行します。
remove-as-principal-name
要素は、ejbRemove
内の処理が匿名プリンシパルよりも高レベルのパーミッションを必要とする場合にのみ指定する必要があります。
この要素は、ステートレス セッション Bean とメッセージ駆動型 Bean の ejbRemove
メソッドに影響します。
「passivate-as-principal-name」、「create-as-principal-name」、および「principal-name」も参照してください。
クラスタ内の WebLogic Server インスタンスのステートフル セッション EJB の状態を WebLogic Server がレプリケートするかどうかを指定します。InMemory
を指定した場合、EJB の状態はレプリケートされます。None
を指定した場合、状態はレプリケートされません。
「stateful-session-clustering」を参照してください。
「resource-description」を参照してください。
resourcefactory
参照の名前を指定します。これは、EJB プロバイダによって ejb-jar.xml
デプロイメント記述子ファイル内に記載される参照です。EJB が ejb-jar.xml
のリソース参照を指定する場合にのみ必須になります。
「resource-description」を参照してください。
ejb-jar.xml
に定義されているリソース参照を WebLogic Server 内に用意されている実際のリソースの JNDI 名にマップします。
<reference-descriptor>
<resource-description>
<res-ref-name>. . .</res-ref-name>
<jndi-name>...</jndi-name>
</resource-description>
<ejb-reference-description>
<ejb-ref-name>. . .</ejb-ref-name>
<jndi-name>. . .</jndi-name>
</ejb-reference-description>
</reference-descriptor>
ejb-jar.xml
に定義されているリソース環境参照を WebLogic Server 内に用意されている実際のリソースの JNDI 名にマップします。
<reference-descriptor>
<resource-env-description>
<res-env-ref-name>. . .</res-env-ref-name>
<jndi-name>...</jndi-name>
<reference-env-description>
</reference-descriptor>
jndi-name
が有効な URL でない場合、WebLogic Server はそれを URL に対応し、すでに JNDI ツリーにバインドされているオブジェクトとして取り扱い、LinkRef
とその jndi-name
をバインドします。
EJB プロバイダが ejb-jar.xml
デプロイメント ファイルに指定したアプリケーションのロール名を示します。スタンザの次の principal-name 要素で、WebLogic Server プリンシパルを、指定した role-name
にマップします。
「security-role-assignment」を参照してください。
注意 : run-as-identity-principal
要素は、このリリースの WebLogic Server では非推奨となりました。代わりに run-as-principal-name を使用します。
run-as-identity-principal
要素は、ejb-jar.xml
デプロイメント記述子で、セキュリティ ID run-as-role-name
を指定した Bean の run-as プリンシパルとして使用されるセキュリティ プリンシパル名を指定します。
run-as role-name の run-as-identity-principal または run-as-principal-name へのマッピングがどのようにして生じるかの説明は、run-as-role-assignment 要素のコメントを参照してください。
<run-as-identity-principal>Fred
</run-as-identity-principal>
ejb-jar.xml
デプロイメント記述子で、security-identity
run-as role-name
を指定した Bean の run-as プリンシパルとして使用されるセキュリティ プリンシパル名を指定します。
run-as role-names
の run-as-principal-names
へのマッピングがどのようにして生じるかの説明は、run-as-role-assignment 要素のコメントを参照してください。
<run-as-principal-name>Fred
</run-as-principal-name>
ejb-jar.xml
デプロイメント記述子ファイルで指定された security-identity run-as role-name
を run-as-principal-name
にマップします。
ここで指定した特定の role-name に対する run-as-principal-name
の値は、ejb-jar.xml
デプロイメント記述子内のすべての Bean を対象とし、role-name を security-identitiy run-as-role-name
として指定したすべての Bean に適用されます。
ここで指定した run-as-principal-name
値は、その Bean の weblogic-enterprise-bean
要素の下で run-as-principal-name を指定することによって、個々の Bean レベルでオーバーライドできます。
注意 : 特定の Bean について、run-as-role-assignment
または Bean 固有の run-as-principal-name
タグで run-as-principal-name
が指定されていない場合、EJB コンテナは weblogic-enterprise-bean
security-role-assignment
のセキュリティ ユーザの最初の principal-name
を role-name
として選択し、その principal-name
を run-as-principal-name
として使用します。
ejb-jar.xml
デプロイメント記述子ファイルが、次のような状況であると仮定します。
対応するデプロイメント記述子ファイル weblogic-ejb-jar.xml
から抜粋した次のコードを検討してください。
<weblogic-ejb-jar><weblogic-enterprise-bean>
<ejb-name>
A_EJB_with_runAs_role_x
</ejb-name>
</weblogic-enterprise-bean>
<weblogic-enterprise-bean>
<ejb-name>
B_EJB_with_runAs_role_X
</ejb-name>
<run-as-principal-name>
Joe
</run-as-principal-name>
</weblogic-enterprise-bean>
<weblogic-enterprise-bean>
<ejb-name>
C_EJB_with_runAs_role_Y
</ejb-name>
</weblogic-enterprise-bean>
<security-role-assignment>
<role-name>
runAs_role_Y
</role-name>
<principal-name>
first_principal_of_role_Y
</principal-name>
<principal-name>
second_principal_of_role_Y
</principal-name>
</security-role-assignment>
<run-as-role-assignment>
<role-name>
runAs_role_X
</role-name>
<run-as-principal-name>
Fred
</run-as-principal-name>
</run-as-role-assignment>
</weblogic-ejb-jar>
各 Bean は、その run-as-principal-name
として異なるプリンシパル名を選択します。
この Bean の run-as-role-name は「runAs_role_X」です。使用するプリンシパルの名前のルックアップには、jar スコープの <run-as-role-assignment>
マッピングが使用されます。
<run-as-role-assignment>
マッピングにより、<role-name>
「runAs_role_X」に対して、<run-as-principal-name>
「Fred」を使用すべきであることが指定されます。
この Bean の run-as-role-name も「runAs_role_X」です。この Bean は使用するプリンシパルの名前のルックアップに jar スコープの <run-as-role-assignment>
を使用することはありません。なぜなら、この値はこの Bean の <weblogic-enterprise-bean> <run-as-principal-name>
値である「Joe」でオーバーライドされているからです。
この Bean の run-as-role-name は「runAs_role_Y」です。「runAs_role_Y」の run-as プリンシパル名としての明示的なマッピングはありません。つまり、「runAs_role_Y」に対する jar スコープの <run-as-role-assignment>
も、Bean スコープの <run-as-principal-name>
も、この Bean の weblogic-enterprise-bean
では指定されていません。
使用するプリンシパル名を決定するには、<role-name>
「runAs_role_Y」の <security-role-assignment>
を検証します。ユーザ (つまり、グループではない) に対応する最初の <principal-name>
が選択されます。
「first_principal_of_role_Y」が、使用されるプリンシパル名です。
J2EE Sandbox と関連するセキュリティ パーミッションを指定します。
詳細については、Sun によるセキュリティ パーミッション仕様の実装を参照してください。
http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax
<security-permission>
<description>任意指定の説明がここに入る</description>
<security-permission-spec>
...
</security-permission-spec>
</security-permission>
セキュリティ ポリシー ファイル構文に基づいて単一のセキュリティ パーミッションを指定します。
詳細については、Sun によるセキュリティ パーミッション仕様の実装を参照してください。
http://java.sun.com/j2se/1.3/docs/guide/security/PolicyFiles.html#FileSyntax
「java.vm.version」に「read」パーミッションを与え、それが上書きされるのを防止するには、次の手順を行います。
ejb-jar.xml
のアプリケーション ロールを WebLogic Server のセキュリティ プリンシパルの名前にマップします。
<security-role-assignment>
<role-name>PayrollAdmin</role-name>
<principal-name>Tanya</principal-name>
<principal-name>system</principal-name>
<externally-defined>True</externally-defined>
...
</security-role-assignment>
EJB コンテナがパッシベーションされたステートフル セッション Bean をどのくらいディスクに置いておくのかを指定します。コンテナは、Bean インスタンスをディスクにパッシベーションした後にパッシベーションされた EJB の session-timeout-seconds
を削除します。session-timeout-seconds
を指定しない場合、デフォルトは idle-timeout-seconds
で指定された値です。
<stateful-session-descriptor>
<stateful-session-cache>
<max-beans-in-cache>4</max-beans-in-cache> <idle-timeout-seconds>5</idle-timeout-seconds> <session-timeout-seconds>120</session-timeout-seconds>
<cache-type>LRU</cache-type>
</stateful-session-cache>
</stateful-session-descriptor>
ステートフル セッション EJB インスタンスのキャッシュに使用する以下のオプションを定義します。
ステートフル セッション Bean のキャッシュの詳細については、「ステートフル セッション EJB のキャッシュとパッシベーション」を参照してください。
次の例では、stateful-session-cache
要素の指定方法を示します。
<stateful-session-cache>
<max-beans-in-cache>...</max-beans-in-cache>
<idle-timeout-seconds>...</idle-timeout-seconds>
<session-timeout-seconds>...</session-timeout-seconds>
<cache-type>...</cache-type>
</stateful-session-cache>
WebLogic Server がクラスタ内のステートフル セッション EJB インスタンスをレプリケートする方法を決める以下のオプションを指定します。
<stateful-session-clustering><home-is-clusterable>True</home-is-clusterable>
<home-load-algorithm>random</home-load-algorithm>
<home-call-router-class-name>beanRouter</home-call-router-class-name>
<replication-type>InMemory</replication-type>
</stateful-session-clustering>
WebLogic Server のステートレス セッション EJB に対するキャッシュ、クラスタ化、および永続性などのデプロイメント動作を定義します。
<stateful-session-descriptor>
<stateful-session-cache>...</stateful-session-cache>
<allow-concurrent-calls>...</allow-concurrent-calls>
<allow-remove-during-transaction>...
</allow-remove-during-transaction>
<persistent-store-dir>/myPersistenceStore</persistent-store-dir>
<stateful-session-clustering>...</stateful-session-clustering>
</stateful-session-descriptor>
Bean のメソッド呼び出しのルーティングに使用するカスタム クラスの名前を指定します。このクラスは weblogic.rmi.cluster.CallRouter()
を実装する必要があります。指定すると、このクラスのインスタンスは各メソッド呼び出しの前に呼び出されます。ルータ クラスでは、メソッドのパラメータを基に、ルーティングするサーバを選択できます。このクラスは、サーバ名を返すか、または現在のロード アルゴリズムがサーバを選択する必要があることを示す null を返します。
「stateless-clustering」を参照してください。
stateless-bean-is-clusterable
が True
の場合、EJB をクラスタ内の複数の WebLogic Server からデプロイできます。ホーム スタブの呼び出しは、Bean がデプロイされるサーバ間で負荷が分散されます。Bean のホスト サーバにアクセスできなかった場合、呼び出しは、Bean を提供する他のサーバに自動的にフェイルオーバします。
「stateless-clustering」を参照してください。
EJB ホームのレプリカ間のロード バランシングに使用するアルゴリズムを指定します。
stateless-bean-load-algorithm
を以下のいずれかの値で定義できます。
round-robin
- Bean のホスト サーバ間で順番にロード バランシングを実行します。random
- Bean のホスト サーバ間で EJB ホームのレプリカがランダムにデプロイされます。weight-based
- ホスト サーバの現在の負荷に従って、EJB ホームのレプリカをデプロイするサーバが決まります。round-robin-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、ラウンドロビン ロード バランシングがサーバ インスタンス間の接続に使用されます。weight-based-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、重みベース ロード バランシングがサーバ インスタンス間の接続に使用されます。random-affinity
- サーバ アフィニティが外部 Java クライアントとサーバ インスタンスの接続を管理し、ランダム ロード バランシングがサーバ インスタンス間の接続に使用されます。詳細については、『WebLogic Server クラスタ ユーザーズ ガイド』の「EJB と RMI オブジェクトのロード バランシング」を参照してください。
「stateless-clustering」を参照してください。
同一引数での同一メソッドの多重呼び出しが 1 回だけの呼び出しとまったく同じになるように設計されている Bean に対してのみ、stateless-bean-methods-are-idempotent
を True
に設定します。これによって、フェイルオーバ ハンドラは、失敗した呼び出しが失敗したサーバで実際に完了していたかどうかがわからなくても失敗した呼び出しを再試行できます。このプロパティを True
に設定すると、Bean を提供する他のサーバが使用できるようになっている限り、Bean スタブは障害から自動的に回復できます。
「stateless-clustering」を参照してください。
WebLogic Server がクラスタ内のステートレス セッション EJB インスタンスをレプリケートする方法を決めるオプションを指定します。
次の例では、stateless-clustering
スタンザの構造を示します。
<stateless-clustering><stateless-bean-is-clusterable>
True
</stateless-bean-is-clusterable>
<stateless-bean-load-algorithm>
random</stateless-bean-load-algorithm>
<stateless-bean-call-router-class-name>
beanRouter
</stateless-bean-call-router-class-name>
<stateless-bean-methods-are-idempotent>
True
</stateless-bean-methods-are-idempotent>
</stateless-clustering>
WebLogic Server のステートレス セッション EJB に対するキャッシュ、クラスタ化、および永続性などのデプロイメント パラメータを定義します。
<stateless-session-descriptor>
<pool>...</pool>
<stateless-clustering>...</stateless-clustering>
</stateless-session-descriptor>
WebLogic Server のトランザクション動作を定義するオプションを指定します。現在、このスタンザには trans-timeout-seconds
という要素のみがあります。
<transaction-descriptor>
<trans-timeout-seconds>20</trans-timeout-seconds>
</transaction-descriptor>
EJB のメソッドレベルのトランザクション アイソレーション設定を定義します。
<transaction-isolation>
<isolation-level>...</isolation-level>
<method>
<description>...</description>
<ejb-name>...</ejb-name>
<method-intf>...</method-intf>
<method-name>...</method-name>
<method-params>...</method-params>
</method>
</transaction-isolation>
詳細については、「isolation-level」を参照してください。
<iiop-security-descriptor>
<transport-requirements>
<confidentiality>supported</confidentiality>
<integrity>supported</integrity>
<client-cert-authorization>suppoted
</client-cert-authentication>
</transport-requirements>
</iiop-security-descriptor>
EJB のコンテナで初期化されたトランザクションの最長継続時間を指定します。トランザクションの継続時間が trans-timeout-seconds
の値を超えると、WebLogic Server によってトランザクションがロールバックされます。
「transaction-descriptor」を参照してください。
コンテナ管理の永続性サービスを使用するエンティティ EJB でのみ必須です。エンティティ EJB の永続性タイプを指定します。WebLogic Server RDBMS ベースの永続性では、WebLogic_CMP_RDBMS
という識別子を使用します。別の永続性ベンダを使用している場合の正しい type-identifier
についてはベンダのマニュアルを参照してください。
WebLogic Server RDBMS ベースの永続性に関する完全な永続性タイプの定義の例については、「persistence-use」を参照してください。
コンテナ管理の永続性サービスを使用するエンティティ EJB でのみ必須です。この永続性タイプのデータを格納するファイルの絶対パスを定義します。パスは、EJB のデプロイメント JAR ファイルまたはデプロイメント ディレクトリの最上位を基準にしたファイルの場所を指定する必要があります。
WebLogic Server RDBMS ベースの永続性では通常、Bean の永続性データを格納するのに weblogic-cmp-jar.xml
という XML ファイルを使用します。このファイルは、JAR ファイルの META-INF
サブディレクトリにあります。
WebLogic Server RDBMS ベースの永続性に関する完全な永続性タイプの定義の例については、「persistence-use」を参照してください。
同じ永続性タイプの複数バージョンがインストールされている場合に、コンテナ管理による永続性サービスを使用するエンティティ EJB の場合に必須です。指定された永続性タイプのバージョンを指定します。たとえば、WebLogic 2.0 CMP 永続性の場合は、次の値を使用します。
WebLogic 1.1 CMP の永続性の場合は、次の値を使用します。
この要素は、同じ永続性タイプの複数のバージョンがインストールされている場合に必須です。
WebLogic Server の RDBMS ベースの永続性を使用する場合、指定したバージョンは、WebLogic Server の RDBMS 永続性バージョンと完全に一致させる必要があります。バージョンが一致していないと、次のエラーが発生します。
weblogic.ejb.persistence.PersistenceSetupException: Error initializing the CMP Persistence Type for your bean: No installed Persistence Type matches the signature of (identifier `Weblogic_CMP_RDBMS', version `version_number').
WebLogic Server RDBMS ベースの永続性に関する完全な永続性タイプの定義の例については、「persistence-use」を参照してください。
Bean ホームがサーバのコンテキストでサーバサイド スタブを使用するようにします。
「entity-clustering」の例を参照してください。
weblogic-ejb-jar
は、EJB デプロイメント記述子の weblogic コンポーネントのルート要素です。