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 aplicativos binários sinaliza as classes que são anotadas com @NormalScope.
Essas anotações podem ser detectadas mesmo que apareçam fora do contexto da beans.xml que as utilizam de forma explícita ou implícita.
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.