Mit der CDI Version 1.1-Spezifikation (Contexts and Dependency Injection, Kontext- und Abhängigkeitsinjektion) wurde ein Modus für die Erkennung impliziter Beans eingeführt, der zu Änderungen in Bezug auf das Verhalten und die Leistung gegenüber der CDI Version 1.0 von Java Platform Enterprise Edition (Java EE) 6 in WebSphere Application Server geführt hat. Eine implizite Bean ist ein Archiv, das mindestens eine Bean-Klasse mit einer Annotation, die Beans definiert, oder mindestens eine Session-Bean enthält.
Bei einer Umstellung von Java EE 6 CDI Version 1.0 auf Java EE 7 CDI Version 1.1 oder höher werden bei der Erkennung impliziter Beans alle WAR- und JAR-Dateien von der Laufzeitumgebung durchsucht, selbst wenn diese keine Datei beans.xml haben. Dieser Suchvorgang (auch Scan genannt) weicht vom Verhalten in der CDI Version 1.0 von Java EE 6 ab, in der eine fehlende Datei beans.xml das Durchsuchen von Archiven in der Anwendung verhindertc.
Diese Regel markiert in allen WAR- und JAR-Dateien, die keine Datei beans.xml haben, die folgenden Annotationen, die Beans definieren, und EJB-Session-Beans.
Der Scanner für Binäranwendungen kennzeichnet Klassen, die mit @NormalScope.
Diese Anmerkungen können auch dann erkannt werden, wenn sie außerhalb des Kontexts der beans.xml dateien erscheinen, die sie explizit oder implizit verwenden.
Fügen Sie, wie im folgenden Beispiel dargestellt, eine beans.xml-Datei hinzu, deren Bean-Erkennungsmodus den Status none hat, um diese CDI-Verhaltensänderung während der Ausführung im WAR- oder JAR-Level zu inaktivieren.
<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="none" version="1.1">
</beans>
In Liberty können Sie dieses Verhalten ebenfalls inaktivieren, indem Sie die folgende Eigenschaft zur Datei server.xml hinzufügen.
<cdi12 enableImplicitBeanArchives="false"/>
Weitere Informationen zur CDI 1.2-Implementierung von Java EE 7 finden Sie unter Änderungen im Verhalten von Contexts and Dependency Injection zwischen Releases.