Verhaltensänderungen bei Contexts and Dependency Injection 1.2

Die Implementierung von Contexts and Dependency Injection (CDI) 1.2 beinhaltet einige Verhaltensänderungen, die bewirken können, dass eine von CDI 1.0 migrierte Anwendung in CDI 1.2 ein anderes Verhalten zeigt oder fehlschlägt.

Während CDI 1.0 auf der Apache OpenWebBeans-Implementierung von CDI aufsetzt, basiert CDI 1.2 auf der Weld-Implementierung. Die Verhaltensänderungen widerspiegeln die Unterschiede in den beiden Implementierungen.

Die Dialog-ID

In der Implementierung von CDI 1.0 ist die Dialog-ID (Conversation ID, CID) global eindeutig. In CDI 1.2 ist sie pro HTTP-Sitzung eindeutig. Dieses Verhalten entspricht der CDI-Spezifikation und wird durch die Weld-Implementierung umgesetzt. Um eine global eindeutige CID zu erhalten, muss die CID am Anfang des Dialogs durch Aufruf von Conversation.begin angegeben werden.

Schemareferenzierung in der Datei beans.xml

Das folgende Beispiel eines Schemas wird in der Datei beans.xml referenziert:
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 zurück. Sie können org.jboss.weld.xml.disableValidating=true festlegen, um zu vermeiden, dass die Datei beans.xml validiert wird und zu verhindern, dass ein Fehler zurückgegeben wird. Wenn die Datei beans.xml Decorators oder Interceptors festlegt, muss ein gültiges Schema verwendet werden. Andernfalls werden die Decorators und Interceptors nicht ordnungsgemäß instanziiert.

Implizite Beanarchive

Die Implementierung von CDI 1.2 definiert zwei Typen von Beanarchiven: ein explizites und ein implizites Beanarchiv.

Ein explizites Beanarchiv ist ein Archiv, in dem die Datei beans.xml enthalten ist und diese Datei eines der folgenden Merkmale aufweist:
  • Die Versionsnummer 1.1 (oder höher) und Beanerkennungsmodus (bean-discovery-mode) all
  • Keine Versionsnummer
  • Eine leere Datei

Jedes andere Archiv, das eine oder mehrere Beanklassen mit einer gemäß der Spezifikation (Abschnitt 2.5.1 "Bean defining annotations") definierten Beandefinitionsannotation oder eine oder mehrere Sitzungsbeans enthält, ist ein implizites Archiv. Nähere Angaben finden Sie in der Spezifikation Contexts and Dependency Injection for the Java™ EE platform.

Wenn Sie das Schema für eine CDI 1.2-Implementierung aktualisieren, müssen Sie das Beanarchiv als explizites Beanarchiv beibehalten und der Beanerkennungsmodus (bean-discovery-mode) muss auf all gesetzt sein:
<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"
</beans>
Anmerkung: Ein implizites Beanarchiv erkennt nur Beans, die eine Beandefinitionsannotation enthalten.

Dieser neue Beanarchivtyp kann dazu führen, dass ein Archiv, das nicht als CDI-Beanarchiv vorgesehen ist, in der CDI 1.2-Implementierung zu einem impliziten Beanarchiv wird. Um dieses Verhalten zu stoppen, können Sie die Datei beans.xml mit der Einstellung none für den Beanerkennungsmodus (bean-discovery-mode) hinzufügen, um zu verhindern, dass das Archiv zu einem Beanarchiv wird. Alternativ dazu können Sie die Systemeigenschaft com.ibm.ws.cdi.enableImplicitBeanArchives auf false setzen. Wenn Sie diese Eigenschaft auf false setzen, wird verhindert, dass Archive ohne beans.xml-Dateien zu impliziten Beanarchiven werden, und die Startzeit wird verkürzt. Informationen dazu, wie Sie diese Systemeigenschaft festlegen, finden Sie in der Beschreibung der Einstellungen der Java Virtual Machine.

Lebenszyklusinterceptors

Wenn die folgende Interceptorbindung für Lebenszyklusinterceptors deklariert wird, ist für ElementType.TYPE nur Target zulässig:
@InterceptorBinding
@Retention( RetentionPolicy.RUNTIME )
@Target( {ElementType.TYPE, ElementType.METHOD} )
public @interface SFCDIInterceptorBinding {} 
 

Symbol, das den Typ des Artikels anzeigt. Konzeptartikel



Symbol für Zeitmarke Letzte Aktualisierung: 25.05.2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_behavior
Dateiname:cweb_cdi_behavior.html