O CDI reconhece archives de beans implícitos

A especificação Contexts and Dependency Injection (CDI) 1.1 introduziu o modo de descoberta de bean implícito, resultando em mudanças de comportamento e desempenho a partir da implementação do Java Platform, Enterprise Edition (Java EE) 6 CDI 1.0 no WebSphere Application Server. Um bean implícito é qualquer archive que contém uma ou mais classes de bean com uma anotação de definição de bean ou um ou mais beans de sessão.

Ao mover do Java EE 6 CDI 1.0 para o Java EE 7 CDI 1.1 ou mais recente, a descoberta de bean implícito resulta em todos os arquivos WAR e JAR sendo varridos pelo tempo de execução, mesmo se eles não tiverem um arquivo beans.xml. Essa varredura é uma mudança de comportamento do Java EE 6 CDI 1.0, em que um arquivo beans.xml ausente evitaria a varredura de archives no aplicativo.

Essa regra sinaliza as anotações de definição de bean e os beans de sessão Enterprise JavaBeans (EJB) a seguir em todos os arquivos WAR e JAR que não possuem um arquivo beans.xml.

O scanner de aplicativo binário sinaliza as classes de anotação que são anotadas como @NormalScope. Diferente do scanner de origem de aplicativo baseado no Eclipse, ele não detecta classes que são anotadas com uma anotação de tipo de escopo normal. Essas anotações podem ser sinalizadas fora do escopo dos arquivos beans.xml que as estão usando explicitamente ou implicitamente.

Para desativar essa mudança de comportamento de CDI durante o tempo de execução no nível do WAR ou JAR, inclua um arquivo beans.xml com o modo de descoberta de bean configurado para none, conforme mostrado no exemplo a seguir.


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

No Liberty, é possível também desativar esse comportamento, incluindo a propriedade a seguir no arquivo server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Para obter mais informações sobre a implementação do Java EE 7 CDI 1.2, consulte Mudanças de comportamento do Contexts and Dependency Injection 1.2.