Änderungen im Verhalten von Contexts and Dependency Injection zwischen Releases

Die CDI 1.2-Implementierung (Contexts and Dependency Injection) enthält verschiedene Verhaltensänderungen, die dazu führen können, dass eine von CDI 1.0 migrierte Anwendung sich in CDI 1.2 anders verhält oder Fehler erzeugt.

Sie können für jede Serverinstanz festlegen, ob das Feature CDI 1.0 oder das Feature CDI 1.2 implementiert werden soll. Sie müssen jedoch Verhaltensunterschiede berücksichtigen. Wenn das erforderliche Verhalten nur im Feature CDI 1.2 enthalten ist, müssen Sie das Feature CDI 1.2 verwenden. Wenn sich Verhaltensunterschiede im Feature CDI 1.2 auf eine vorhandene Anwendung nachteilig auswirken, verwenden Sie das Feature CDI 1.0, um das vorhandene Verhalten für diese Anwendung beizubehalten. Es ist nicht möglich, CDI 1.0 und CDI 1.2 gleichzeitig auf demselben Server zu verwenden, da die Features nicht kompatibel sind. Wenn Sie beide Features konfigurieren, erzeugt der Server einen Konfigurationsfehler.

Das Feature CDI 1.0 basiert auf der Apache OpenWebBeans-Implementierung von CDI. Das Feature CDI 1.2 basiert auf der Weld-Implementierung von CDI. Die eingeführten Verhaltensänderungen sind auf Unterschiede in den beiden Implementierungen zurückzuführen.

Migration von CDI 1.0 auf CDI 1.2

Dialog-ID

In der CDI 1.0-Implementierung ist die Dialog-ID (CID, Conversation ID) global eindeutig. In CDI 1.2 ist sie für jede HTTP-Sitzung eindeutig. Dieses Verhalten entspricht der CDI-Spezifikation und ist eine von Weld gewählte Konvention. Zum Abrufen einer global eindeutigen Dialog-ID muss die Dialog-ID zu Beginn des Dialogs mit dem Aufruf von Conversation.begin angegeben werden.

Schemas in der Datei beans.xml referenzieren
Das folgende Beispiel veranschaulicht ein Schema in einer CDI 1.2-Implementierung, das in der Datei beans.xml referenziert wird.
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" 
Wenn Sie ein ungültiges Schema verwenden, gibt der Server einen Ausnahmefehler aus. Sie können die Validierung der Datei beans.xml inaktivieren, indem Sie die JVM-Eigenschaft org.jboss.weld.xml.disableValidating=true festlegen, die verhindert, dass der Fehler erzeugt wird. Wenn in der Datei beans.xml Decorators oder Interceptors angegeben sind, muss ein gültiges Schema verwendet werden, da die Decorators und Interceptors sonst nicht ordnungsgemäß instanziiert werden.
Implizite Bean-Archive

Die CDI 1.2--Implementierung definiert zwei verschiedene Typen von Bean-Archiven: explizite Archive und implizite Archive.

Ein explizites Bean-Archiv ist ein Archiv mit einer Datei beans.xml,
  • die die Versionsnummer 1.1 (oder höher) und den Wert all für "bean-discovery-mode" hat.
  • die keine Versionsnummer hat.
  • die leer ist.

Ein implizites Bean-Archiv ist jedes andere Archiv, das mindestens eine Bean-Klasse mit einer Bean, die eine Annotation gemäß der Spezifikation im Abschnitt 2.5.1 "Bean defining annotations" oder mindestens eine Session-Bean enthält. Weitere Informationen finden Sie in der Spezifikation Contexts and Dependency Injection for the Java EE platform.

Wenn Sie das Schema auf eine CDI 1.2- -Implementierung aktualisieren, muss der Bean-Erkennungsmodus auf all gesetzt werden, um das Bean-Archiv als explizites Bean-Archiv beizubehalten:
<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">
Anmerkung: Ein implizites Bean-Archiv erkennt nur Beans, die eine Annotation enthalten, die Beans definiert.
Dieser Bean-Archivtyp kann zur Generierung eines Archivs führen, das nicht als CDI-Bean-Archiv bestimmt ist, sondern in der CDI 1.2- -Implementierung zu einem impliziten Bean-Archiv wird. Zum Stoppen dieses Verhaltens können Sie eine Datei beans.xml hinzufügen, in der der Bean-Erkennungsmodus auf none gesetzt ist, um zu verhindern, dass aus dem Archiv ein Bean-Archiv wird. Eine alternative Lösung ist das Hinzufügen der Eigenschaft enableImplicitBeanArchives zur Datei server.xml für Ihren Liberty-Server:
<cdi12 enableImplicitBeanArchives="false"/>
Wenn Sie diese Eigenschaft auf false setzen, wird verhindert, dass aus Archiven ohne Datei beans.xml implizite Bean-Archive werden.

Wird diese Eigenschaft auf false gesetzt, führt dies zu einer verbesserten Leistung beim Start.


Symbol das den Typ des Artikels anzeigt. Konzeptartikel

Dateiname: cwlp_cdi_behavior.html