Contexts and Dependency Injection 1.2 の動作の変更

Contexts and Dependency Injection (CDI) 1.2 実装には、CDI 1.0 からマイグレーションされたアプリケーションが異なる動作をしたり、CDI 1.2 で失敗したりする可能性がある動作の変更がいくつか含まれています。

動作の変更を考慮して、サーバー・インスタンスごとに、CDI 1.0 と CDI 1.2 フィーチャー実装のいずれを使用するかを選択できます。必要な動作が CDI 1.2 フィーチャーにのみ含まれている場合、CDI 1.2 フィーチャーを使用する必要があります。既存のアプリケーションが CDI 1.2 フィーチャーの動作変更で悪影響を受ける可能性がある場合、CDI 1.0 フィーチャーを使用すれば、そのアプリケーションの既存の動作が保持されます。CDI 1.0 と CDI 1.2 のフィーチャーは両立しないため、同じサーバーで CDI 1.0 と CDI 1.2 の両方のフィーチャーを使用することはできません。両方のフィーチャーを構成した場合、サーバーで構成エラーが生成されます。

CDI 1.0 フィーチャーは、CDI の Apache OpenWebBeans 実装に基づいて作成されています。CDI 1.2 フィーチャーは、CDI の Weld 実装に基づいて作成されています。2 つの実装の差異のため、動作の変更が生じています。

会話 ID CID

CDI 1.0 実装では、CID はグローバルに固有です。CDI 1.2 では、HTTP セッションごとに固有です。この動作は CDI 仕様に準拠しており、Weld によって選択される規則です。グローバルに固有の CID を取得するには、会話の開始時に、Conversation.begin を呼び出して、CID を指定する必要があります。

beans.xml ファイルのスキーマの参照

CDI 1.2 実装では、beans.xml ファイルで参照されるスキーマの例は以下のようになります。
xmlns="http://xmlns.jcp.org/xml/ns/javaee" 
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
無効なスキーマを使用している場合、サーバーは例外エラーを示します。org.jboss.weld.xml.disableValidating=true JVM プロパティーを設定することで、beans.xml ファイルの検証をオフにすることができます。このプロパティーにより、エラーも生成されなくなります。beans.xml ファイルでデコレーターまたはインターセプターが指定されている場合、有効なスキーマを使用する必要があります。これが満たされていない場合、デコレーターおよびインターセプターは正しくインスタンス化されません。

暗黙的 Bean アーカイブ

CDI 1.2 実装は、2 つの異なるタイプの Bean アーカイブ (明示的と暗黙的) を定義しています。

明示的 Bean アーカイブは、以下のような beans.xml ファイルが含まれているアーカイブです。
  • バージョン番号が 1.1 (以降) で、bean-discovery-mode が all
  • バージョン番号なし
  • 空ファイル

暗黙的 Bean アーカイブは、その他のすべてのアーカイブであり、仕様のセクション 2.5.1『Bean defining annotations』で定義されている Bean 定義アノテーションを使用した 1 つ以上の Bean クラスまたは 1 つ以上のセッション Bean が含まれています。仕様の『Contexts and Dependency Injection for the Java™ EE platform』を参照してください。

スキーマを CDI 1.2 実装に更新する際には、Bean アーカイブを明示的なもののままにするには、以下のように、Bean ディスカバリー・モードを all に設定する必要があります。
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all"
		version="1.1">
注: 暗黙的 Bean アーカイブは、Bean 定義アノテーションがある Bean のみをディスカバーします。
この新しいタイプの Bean アーカイブは、CDI Bean アーカイブにするためではないアーカイブになる可能性がありますが、CDI1.2 実装における暗黙的 Bean アーカイブになります。この動作を停止するために、Bean ディスカバリー・モードを none に設定した beans.xml ファイルを追加できます。これにより、アーカイブが Bean アーカイブになることがなくなります。代わりの解決策としては、Liberty サーバーの server.xml ファイルに以下のプロパティーを追加します。
<cdi12 enableImplicitBeanArchives="false"/>
このプロパティーを false に設定すると、beans.xml ファイルがないアーカイブが暗黙的 Bean アーカイブになることがなくなります。

このプロパティーを false に設定すると、起動時のパフォーマンスが改善されます。


トピックのタイプを示すアイコン 概念トピック



タイム・スタンプ・アイコン 最終更新: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=cwlp_cdi_behavior
ファイル名: cwlp_cdi_behavior.html