Contexts and Dependency Injection のリリース間での動作変更

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 つの実装の差異のため、動作の変更が生じています。

CDI 1.0 から CDI 1.2 へのマイグレーション

会話 ID CID

CDI 1.0 実装では、CID はグローバルに固有です。CDI 1.2 では、CID は 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 アーカイブにするためではないアーカイブになる可能性がありますが、CDI 1.2 実装における暗黙的 Bean アーカイブになります。この動作を停止するために、Bean ディスカバリー・モードを none に設定した beans.xml ファイルを追加できます。これにより、アーカイブが Bean アーカイブになることがなくなります。代わりの解決策としては、Liberty サーバーの server.xml ファイルに enableImplicitBeanArchives プロパティーを追加します。
<cdi12 enableImplicitBeanArchives="false"/>
このプロパティーを false に設定すると、beans.xml ファイルがないアーカイブが暗黙的 Bean アーカイブになることがなくなります。

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


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

ファイル名: cwlp_cdi_behavior.html