CDI reconnaît les archives de beans implicites

La spécification Contexts and Dependency Injection (CDI) 1.1 a introduit le mode de reconnaissance de bean implicite, ce qui entraîne des changements de comportement et de performances par rapport à l'implémentation CDI 1.0 par Java Platform, Enterprise Edition (Java EE) 6 dans WebSphere Application Server. Un bean implicite désigne n'importe quelle archive contenant une ou plusieurs classes de bean avec soit une annotation de définition de bean, soit un ou plusieurs beans session.

Lors du passage de Java EE 6 CDI 1.0 à Java EE 7 CDI 1.1 ou version ultérieure, la reconnaissance de bean implicite entraîne que tous les fichiers WAR et JAR sont analysés par l'environnement d'exécution, même s'ils n'ont pas de fichier beans.xml. Cette analyse constitue un changement de comportement par rapport à Java EE 6 CDI 1.0, où l'absence d'un fichier beans.xml empêche l'analyse des archives dans l'application.

Cette règle marque les annotations de définition de bean et les beans session Enterprise JavaBeans (EJB) suivants dans tous les fichiers WAR et JAR dépourvus de fichier beans.xml.

L'analyseur d'applications binaires signale les classes qui sont annotées avec la mention @NormalScope. Ces annotations peuvent être détectées même si elles apparaissent en dehors du contexte de la beans.xml qui les utilisent explicitement ou implicitement.

Pour désactiver ce changement de comportement CDI en phase d'exécution au niveau WAR ou JAR, ajoutez un fichier beans.xml avec mode de reconnaissances de bean défini à 'none', comme illustré dans l'exemple suivant.


<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>

Dans Liberty, vous pouvez également désactiver ce comportement en ajoutant la propriété ci-dessous au fichier server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Pour plus d'informations sur l'implémentation Java EE 7 CDI 1.2, voir Changements de comportement dans Contexts and Dependency Injection 1.2.