CDI recunoaşte implicit arhivele bean

Specificaţia CDI (Contexts and Dependency Injection) 1.1 introduce modul de descoperire bean implicit, având ca rezultat modificări de comportament şi performanţă de la implementarea Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 în WebSphere Application Server. Un bean implicit este o arhivă care conţine una sau mai multe clase de bean cu o adnotare de definire bean (bean-defining) sau cu unul sau mai multe bean-uri sesiune.

Când se mută de la Java EE 6 CDI 1.0 la Java EE 7 CDI 1.1 sau ulterior, descoperirea bean-ului implicit are ca rezultat scanarea de către runtime a tuturor fişierelor JAR şi WAR, chiar dacă acestea nu au un fişier beans.xml. Această scanare este o modificare de comportament de la Java EE 6 CDI 1.0, unde un fişier lipsă beans.xml ar împiedica scanarea arhivelor din aplicaţie.

Această regulă semnalează următoarele adnotări bean-defining şi bean-uri sesiune EJB (Enterprise JavaBeans) în toate fişierele JAR şi WAR care nu au un fişier beans.xml.

Scanerul aplicației binare marchează clasele care sunt adnotate cu @NormalScope. Aceste adnotări pot fi detectate chiar dacă apar în afara contextului beans.xml care le utilizează explicit sau implicit.

Pentru a dezactiva această schimbare de comportament CDI în timpul rulării la nivel JAR sau WAR, adăugaţi un fişier beans.xml cu modul de descoperire bean setat la none, după cum se arată în următorul exemplu.


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

Pe Liberty, puteţi dezactiva de asemenea acest comportament prin adăugarea următoarei proprietăţi la fişierul server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Pentru informaţii suplimentare despre implementarea Java EE 7 CDI 1.2, vedeţi Contexts and Dependency Injection 1.2 behavior changes.