
![[8.5.5.6 oder höher]](../ng_v8556.gif)
Änderungen beim Verhalten von Contexts and Dependency Injection 1.2
Die Contexts and Dependency Injection (CDI) 1.2-Implementierung 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 Verhaltensänderungen wurden aufgrund der Unterschiede in den beiden Implementierungen eingeführt.
Annotation @Named in Beans verwenden
Standardmäßig wird Klassen mit der Annotation @Named der nicht qualifizierte Klassenname als Name zugewiesen, wobei der erste Buchstabe von einem Großbuchstaben in einen Kleinbuchstaben geändert wird. Aus TestBean wird standardmäßig testBean. In der CDI 1.0-Implementierung gilt dieses Verhalten für alle Klassennamen. Die Weld-Implementierung folgt der JavaBeans-Spezifikation, die ein anderes Verhalten für Klassennamen mit mehreren Großbuchstaben am Anfang verwendet. In diesem Fall werden keine Großbuchstaben aus dem Namen entfernt, der der Bean zugewiesen wird. JSFTest wird von JavaServer Pages (JSP) beispielsweise mit JSFTest aufgerufen.
Dialog-ID
In der CDI 1.0-Implementierung ist die Dialog-ID (CID, Conversation ID) global eindeutig. In CDI 1.2 gilt die Dialog-ID nur für eine einzige HTTP-Sitzung. 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
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"
Wenn ein ungültiges Schema verwendet wird, führt dies zu einem Ausnahmefehler im Server.
Sie können die Validierung der Datei beans.xml inaktivieren, indem Sie die Eigenschaft
org.jboss.weld.xml.disableValidating=true jvm festlegen, die auch 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 Beanarchive
Die CDI 1.2-Implementierung definiert zwei verschiedene Typen von Beanarchiven: explizite Archive und implizite Archive.
- 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 Beanarchiv ist jedes andere Archiv, das eine oder mehrere Beanklassen mit einer Bean, die eine Annotation gemäß der Spezifikation im Abschnitt 2.5.1, "Bean defining annotations", oder eine oder mehrere Session-Beans enthält. Sehen Sie sich die Spezifikation Contexts and Dependency Injection for the Java™ EE platform an.
<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">
<cdi12 enableImplicitBeanArchives="false"/>
Wenn Sie diese Eigenschaft auf
false setzen, wird verhindert, dass aus Archiven ohne Datei beans.xml implizite Beanarchive werden.