В спецификации 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.
Эти аннотации могут быть обнаружены, даже если они появляются вне контекста 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: изменение принципов работы.