CDI rozpoznává implicitní archivy objektu typu bean

Specifikace CDI (Contexts and Dependency Injection) 1.1 zavedla implicitní režim zjišťování objektů typu bean, což vedlo ke změnám chování a výkonu z implementace Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 na serveru WebSphere Application Server. Implicitní objekt typu bean je libovolný archiv, který obsahuje jednu nebo několik tříd objektů typu bean s anotací definující objekt typu bean nebo s jedním či více objekty session bean.

Při přechodu z formátu Java EE 6, CDI 1.0 na Java EE 7 CDI 1.1 nebo novější jsou výsledkem zjišťování implicitních objektů bean všechny soubory WAR a JAR procházené běhovým prostředím, a to i v případě, že nemají soubor beans.xml. Toto procházení představuje změnu chování z prostředí Java EE 6 CDI 1.0, kde chybí soubor beans.xml, který zabrání procházení archivů v aplikaci.

Toto pravidlo značí následující anotace definující objekt typu bean a objekty Enterprise JavaBeans (EJB) session bean ve všech souborech WAR a JAR, které nemají soubor beans.xml.

Skener binárních aplikací označuje třídy, které jsou anotovány pomocí příznaku @NormalScope. Tyto anotace mohou být zjištěny, i když se jedná o se objeví mimo kontext beans.xml které je explicitně nebo implicitně používají.

Chcete-li tuto změnu chování CDI zakázat za běhu na úrovni WAR nebo JAR, přidejte soubor beans.xml s režimem zjišťování objektu typu bean nastaveným na hodnotu none, jak je uvedeno v následujícím příkladu.


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

Na serveru Liberty můžete toto chování také zakázat přidáním následující vlastnosti do souboru server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Další informace o implementaci Java EE 7 CDI 1.2 viz Změny chování Contexts and Dependency Injection 1.2.