Liberty リポジトリー[8.5.5.6 以降]

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

Bean での @Named アノテーションの使用

@Named アノテーションでクラスに割り当てられるデフォルト名は、最初の文字が大文字から小文字に変更された非修飾クラス名です。例えば、TestBean はデフォルトで testBean になります。CDI 1.0 実装では、この動作はすべてのクラス名に適用されます。Weld 実装は、先頭に複数の大文字が使用されるクラス名で異なる動作になる JavaBeans 仕様に従います。この場合、Bean に渡される名前の大文字は削除されません。例えば、JSFTest は、JavaServer Pages (JSP) から JSFTest を使用して呼び出されます。

会話 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://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/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 アーカイブになることがなくなります。

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

インフォメーション・センターに関するご使用条件 | フィードバック


タイム・スタンプ・アイコン 最終更新: 2015 年 6 月 17日
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_cdi_behavior
ファイル名: cwlp_cdi_behavior.html