EJB 컨테이너와 CDI(Contexts and Dependency Injection) 통합

CDI 스펙은 컨텍스트 라이프사이클 관리로 EJB 컴포넌트 모델을 개선합니다.

EJB 스펙에 대한 CDI의 관계

EJB 스펙은 다중 사용자 환경에서 트랜잭션 자원에 액세스하는 애플리케이션 컴포넌트에 대한 프로그래밍 모델을 정의합니다. 역할 기반 보안, 트랜잭션 경계, 동시성 및 확장가능성과 같은 문제는 런타임 시 EJB 컨테이너에서 강제 실행된 어노테이션 및 XML 배치 디스크립터를 사용하여 선언적으로 지정됩니다. EJB 컴포넌트는 stateful일 수 있지만 본질적으로 컨텍스트적이지 않습니다.

다음 세션 Bean 인스턴스는 종속성 인젝션을 사용하여 얻습니다.
  • 컨텍스트
  • 라이프사이클 컨텍스트에 바인드됨
  • 해당 컨텍스트에서 시작하는 기타 인스턴스에 사용 가능
  • 필요한 경우 컨테이너가 인스턴스를 작성함
  • 컨텍스트가 종료할 때 컨테이너가 인스턴스를 삭제함

WebSphere® Application Server Traditional CDI 컨테이너는 모든 세션 및 메시지 구동 Bean 인스턴스에서, 컨텍스트 인스턴스가 아닌 인스턴스라도 종속성 인젝션을 수행합니다. WebSphere Application Server CDI는 엔터프라이즈 Bean 내 CDI Bean 및 그 반대의 인젝션을 지원합니다.

사용법

우수 사례 우수 사례: 엔터프라이즈 Bean을 삽입할 때 다음 메소드를 사용하십시오. bprac
  • 로컬 세션 Bean의 컨텍스트 인젝션에 @Inject 메소드를 사용합니다.
  • 원격 세션 Bean에 @EJB 메소드를 사용합니다.
CDI에서 @EJB 메소드 사용의 다음 예를 참조하십시오.

비컨텍스트 인젝션에 EJB를 사용 가능하게 하는 프로듀서를 정의합니다.

	@Produces @EJB PaymentService paymentService;	
기타 CDI Bean에서 인젝션된 유형을 이용합니다.
@Inject PaymentService myPaymentService

실제 고려사항

인터셉터 바인딩 및 데코레이터 엔터프라이즈 Bean으로 CDI-스타일 인터셉터를 정의할 수 있습니다. 인터셉터는 @Interceptors 메소드를 사용하거나 인터셉터 전에 호출되고 인터셉터 바인딩을 사용하여 선언되는 ejb-jar.xml 파일에서 선언됩니다. 인터셉터는 데코레이터 전에 호출됩니다.

EJB 컨테이너의 컨텍스트 @Injected 인스턴스가 범위 밖으로 이동하는 결과로 영구 삭제되며, 기반 EJB 컨테이너는 애플리케이션에서 제거 메소드의 직접 호출로 아직 제거되지 않은 경우, WebSphere Application Server Traditional CDI 컨테이너는 stateful 세션 Bean을 제거합니다.

제품 CDI 컨테이너가 다음 인스턴스의 stateful 세션 Bean을 제거합니다.
  • @Inject 메소드를 사용하여 컨텍스트 인젝션 인스턴스를 작성하고 EJB 컨테이너의 해당 인스턴스가 범위 밖 이동의 결과로 영구 삭제될 때.
  • 기본 EJB 컨테이너가 애플리케이션에서 제거 메소드의 직접 호출로 아직 제거되지 않았을 때.

또한 CDI Bean의 범위와 상태 전파를 고려해야 합니다. 요청 및 애플리케이션 범위 CDI Bean은 웹과 EJB 컨테이너에서 별도의 컨텍스트의 상태를 유지보수합니다. 예를 들어, stateful 세션 엔터프라이즈 Bean의 비즈니스 메소드가 동일 요청 범위 Bean에 액세스하면 서블릿에 삽입된 요청 범위 CDI Bean은 해당 상태를 유지합니다.


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



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cweb_cdi_ejb
파일 이름:cweb_cdi_ejb.html