CDI riconosce archivi di bean impliciti

La specifica CDI (Contexts and Dependency Injection) 1.1 ha introdotto la modalità di rilevamento bean implicita, dando luogo a modifiche al comportamento ed alle prestazioni rispetto all'implementazione di Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 in WebSphere Application Server. Un bean implicito è un qualsiasi archivio che contiene una o più classi bean con un'annotazione che definisce bean, o uno o più bean di sessione.

Quando si passa da Java EE 6 CDI 1.0 a Java EE 7 CDI 1.1 o versioni successive, il rilevamento del bean implicito determina la scansione dal runtime di tutti i file WAR e JAR, anche se non hanno un file beans.xml. Questa scansione è un cambiamento del comportamento rispetto a Java EE 6 CDI 1.0, dove un file beans.xml mancante avrebbe impedito la scansione degli archivi nell'applicazione.

Questa regola contrassegna le seguenti annotazioni di definizione dei bean ed i bean di sessione EJB (Enterprise JavaBeans) in tutti i file WAR e JAR che non hanno un file beans.xml.

Lo scanner delle applicazioni binarie segnala le classi annotate con @NormalScope. Queste annotazioni possono essere rilevate anche se appaiono al di fuori del contesto della beans.xml che le utilizzano esplicitamente o implicitamente.

Per disabilitare questa modifica al comportamento di CDI durante il runtime a livello di WAR o JAR, aggiungere un file beans.xml con la modalità di rilevamento dei bean impostata su none, come mostrato nel seguente esempio.


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

Anche in Liberty è possibile disabilitare questa funzionalità aggiungendo la seguente proprietà al file server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Per ulteriori informazioni sull'implementazione di Java EE 7 CDI 1.2, consultare Contexts and Dependency Injection 1.2 behavior changes.