CDI가 내재적 Bean 아카이브 인식

CDI(Contexts and Dependency Injection) 1.1 스펙에서 내재적 Bean 검색 모드가 도입되었으며 그 결과 WebSphere Application Server의 Java EE(Java Platform, Enterprise Edition) 6 CDI 1.0 구현에서와 다르게 동작 및 성능이 변경되었습니다. 내재적 Bean은 Bean 정의 어노테이션 또는 하나 이상의 세션 Bean이 있는 Bean 클래스가 하나 이상 포함된 아카이브입니다.

Java EE 6 CDI 1.0에서 Java EE 7 CDI 1.1 이상으로 이동하는 경우, 내재적 Bean 검색으로 인해 런타임이 모든 WAR 및 JAR 파일을 스캔합니다(beans.xml 파일이 없는 WAR 및 JAR 파일도 포함). 이러한 스캔은 Java EE 6 CDI 1.0에서와 다른 변경된 동작입니다. Java EE 6 CDI 1.0의 경우 beans.xml 파일이 누락되면 애플리케이션에서 아카이브가 스캔되지 않습니다.

이 규칙은 beans.xml 파일이 없는 모든 WAR 및 JAR 파일의 다음 Bean 정의 어노테이션과 Enterprise JavaBeans(EJB) 세션 Bean에 플래그를 지정합니다.

바이너리 애플리케이션 스캐너는 다음과 같이 주석이 달린 클래스에 플래그를 지정합니다 @NormalScope. 이러한 주석은 다음과 같은 경우에도 감지될 수 있습니다 의 컨텍스트 외부에 나타나더라도 감지될 수 있습니다 beans.xml 파일의 컨텍스트 외부에 나타나더라도 감지될 수 있습니다.

런타임 동안 WAR 또는 JAR 레벨에서 이러한 CDI 동작 변경을 사용하지 않으려면, 다음 예에 표시된 바와 같이 Bean 검색 모드가 none으로 설정된 beans.xml 파일을 추가하십시오.


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

Java EE 7 CDI 1.2 구현에 대한 자세한 정보는 Contexts and Dependency Injection 1.2 동작 변경사항을 참조하십시오.