CDI поддерживает неявные архивы объектов EJB

В спецификации Contexts and Dependency Injection (CDI) 1.1 появился режим обнаружения неявных EJB, что привело к изменению принципов и скорости функционирования по сравнению с реализацией CDI 1.0 из Java Platform, Enterprise Edition (Java EE) 6, применявшейся в WebSphere Application Server. Неявным EJB называется любой архив, содержащий по крайней мере один класс EJB с аннотацией определения EJB или одним или несколькими сеансовыми EJB.

При переходе от CDI 1.0 Java EE 6 к CDI 1.1 Java EE 7 или более поздней версии режим обнаружения неявных EJB приводит к тому, что все файлы WAR и JAR начинают сканироваться во время выполнения, даже если они не содержат файл beans.xml. В этом состоит отличие от CDI 1.0 Java EE 6, где в случае отсутствия файла beans.xml сканирование архивов приложения не выполняется.

Это правило отмечает следующие аннотации определения EJB и сеансовые EJB во всех файлах WAR и JAR, не имеющих файла beans.xml.

Сканер двоичного кода приложения отмечает классы аннотаций с аннотацией @NormalScope. В отличие от сканера исходного кода приложения на основе Eclipse, он не распознает классы, имеющие аннотацию обычной области действия. Эти аннотации могут быть отмечены за пределами файлов beans.xml, использующих их явно или неявно.

Для того чтобы блокировать это изменение принципа работы CDI во время выполнения на уровне файла WAR или JAR, добавьте файл beans.xml с режимом обнаружения EJB, имеющим значение none, как показано в следующем примере.


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

В Liberty такой принцип действия можно блокировать путем добавления следующего свойства в файл server.xml.


<cdi12 enableImplicitBeanArchives="false"/>

Для получения дополнительной информации о реализации CDI 1.2 в Java EE 7 обратитесь к документу Contexts and Dependency Injection 1.2: изменение принципов работы.