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
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.
- 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.
<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>
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
@InterceptorBinding
@Retention( RetentionPolicy.RUNTIME )
@Target( {ElementType.TYPE, ElementType.METHOD} )
public @interface SFCDIInterceptorBinding {}