Liberty Repository[8.5.5.6 이상]

Contexts and Dependency Injection 1.2 동작 변경사항

Contexts and Dependency Injection(CDI) 1.2 구현에는 CDI 1.0으로부터 마이그레이션된 애플리케이션이 CDI 1.2에서 다르게 동작하거나 실패하도록 하는 몇 가지 동작 변경사항이 포함되어 있습니다.

동작 변경사항을 고려하여, 각 서버 인스턴스에 대해 CDI 1.0 기능 구현과 CDI 1.2 기능 구현 중 하나를 선택할 수 있습니다. 필요한 동작이 CDI 1.2 기능에만 포함되어 있는 경우에는 CDI 1.2 기능을 사용해야 합니다. CDI 1.2 기능의 동작 변경사항이 기존 애플리케이션에 부정적인 영향을 미치는 경우에는 CDI 1.0 기능을 사용하면 해당 애플리케이션의 기존 동작이 유지됩니다. CDI 1.0 기능과 CDI 1.2 기능은 서로 호환되지 않으므로 같은 서버에서 이러한 기능을 둘 다 사용할 수는 없습니다. 두 기능을 모두 구성하면 서버에서 구성 오류가 발생합니다.

CDI 1.0 기능은 CDI의 Apache OpenWebBeans 구현으로 빌드되었습니다. CDI 1.2 기능은 CDI의 Weld 구현으로 빌드되었습니다. 동작 변경사항은 이러한 두 구현 간의 차이점으로 인해 발생하였습니다.

Bean에 @Named 어노테이션 사용

@Named 어노테이션으로 클래스에 지정되는 기본 이름이 규정되지 않은 이름이며, 첫 번째 문자가 대문자에서 소문자로 변경됩니다. 예를 들면, TestBean이 기본적으로 testBean으로 지정됩니다. CDI 1.0 구현에서 이 동작은 모든 클래스 이름에 적용됩니다. Weld 구현은 클래스 이름에 대해 동작이 다른, 시작 부분에 여러 대문자가 있는 JavaBeans 스펙을 따릅니다. 이 경우에는 Bean에 지정된 이름에서 대문자가 제거되지 않습니다. 예를 들면, JSFTest는 JSP(JavaServer Page)에서 JSFTest를 사용하여 호출됩니다.

대화 ID CID

CDI 1.0 구현에서는 CID가 글로벌 범위에서 고유합니다. CDI 1.2에서 이는 각 HTTP 세션에서 고유합니다. 이 동작은 CDI 스펙을 따르는 것이며 Weld에 의해 선택된 규칙입니다. 글로벌 범위에서 고유한 CID를 얻으려면 대화 시작 시에 Conversation.begin을 호출하여 CID를 지정해야 합니다.

beans.xml 파일에서의 스키마 참조

CDI 1.2 구현에서, 다음 내용은 beans.xml 파일에서 참조되는 스키마의 예제입니다.
xmlns="http://java.sun.com/xml/ns/javaee"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://java.sun.com/xml/ns/javaee 
http://java.sun.com/xml/ns/javaee/beans_1_1.xsd"	
올바르지 않은 스키마가 사용되면 서버에 예외 오류가 발생합니다. org.jboss.weld.xml.disableValidating=true jvm 특성을 설정하면 beans.xml 파일의 유효성 검증을 끌 수 있으며, 이는 오류가 발생하는 것 또한 방지합니다. beans.xml 파일이 데코레이터 또는 인터셉터를 지정하는 경우에는 올바른 스키마가 사용되어야 하며, 그렇지 않은 경우에는 데코레이터 및 인터셉터가 올바르게 인스턴스화되지 않습니다.

암시적 Bean 아카이브

CDI 1.2 구현은 두 가지의 서로 다른 Bean 아카이브 유형(명시적 및 암시적)을 정의합니다.

명시적 Bean 아카이브는 beans.xml 파일을 포함하는 아카이브입니다.
  • 버전 번호(1.1 이상) 포함, Bean 발견 모드 all 사용
  • 버전 번호 없이
  • 비어 있는 파일

암시적 Bean 아카이브는 2.5.1절 "어노테이션을 정의하는 Bean" 또는 하나 이상의 세션 Bean에 정의되어 있는 바와 같이 Bean 정의 어노테이션이 있는 하나 이상의 Bean 클래스를 포함하는 기타 아카이브입니다. Java™ EE 플랫폼용 Contexts and Dependency Injection 스펙을 참조하십시오.

스키마를 CDI 1.2 구현으로 업데이트할 때 Bean 아카이브를 명시적 유형으로 유지하려면 Bean 발견 모드를 all로 설정해야 합니다.
<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="all"
		version="1.1">
참고: 암시적 Bean 아카이브는 Bean 정의 어노테이션이 있는 Bean만을 발견합니다.
이 새 유형의 Bean 아카이브는 CDI Bean 아카이브에 적합하지 않은 아카이브가 될 수도 있으나, CDI 1.2 구현에서는 이러한 아카이브가 암시적 Bean 아카이브가 됩니다. Bean 발견 모드가 none으로 설정된 beans.xml 파일을 추가하면 이 아카이브가 Bean 아카이브가 되는 것을 방지하여 이러한 동작을 중지할 수 있습니다. 또 다른 해결책은 Liberty 프로파일 서버의 server.xml 파일에 다음 특성을 추가하는 것입니다.
<cdi12 enableImplicitBeanArchives="false"/>
이 특성을 false로 설정하면 beans.xml 파일이 없는 아카이브가 암시적 Bean 아카이브가 되지 않습니다.

주제의 유형을 표시하는 아이콘 개념 주제

Information Center 이용 약관 | 피드백


시간소인 아이콘 마지막 업데이트 날짜: Wednesday, 2 September 2015
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=phil&product=was-libcore-mp&topic=cwlp_cdi_behavior
파일 이름: cwlp_cdi_behavior.html