나는 얼마 전에 Jboss 4.2.3 (JavaEE 5) 컨텍스트 내에서이 질문을 던졌으며 구성을 위해 Spring을 시도하는 대답을 얻었지만 필요하지 않을 때 다른 프레임 워크를 추가하지는 않을 것입니다.JBoss에서 EJB 특수화
이제 JavaEE 6 및 7을 사용하면 내 문제에 대한 간단한 해결책이 있다는 느낌이 들게됩니다. 그러나 나는 운 좋게도 아직 검색을하지 못해서 올바른 길로 나를 인도 할 수 있다면, 정말로 당신의 도움에 감사 할 것입니다. 우리는 EJB 인터페이스 IEjb
그 인터페이스의 implentation EjbA
을 제공하는 라이브러리가
가정합니다
다음은 문제입니다. EJB를 추가로 제공하는 다른 라이브러리가 몇 개 있으며 그 중 두 개는 @EJB IEjb ref
을 포함합니다. 즉, IEjb
인터페이스를 노출하는 EJB에 대한 참조가 필요합니다.
지금 완전히 즉 EjbA
해야 결코 전체 응용 프로그램에서 사용하는, 대체 구현 EjbB
으로 EjbA
교체 할 필요가있다.
- "
EjbA
를 포함하는 라이브러리를 배포하지 않습니다": 이것은 불가능합니다 EJB를 다른 있기 때문에우리가 사용할 수 없거나 오히려 큰 변화를 필요로하는 몇 가지 옵션이 있습니다 필요한 경우 오히려 큰 우리 도서관의 변화와
- "비 EJB와 같은
EjbA
구현을 사용하는 응용 프로그램, 서브 클래스를 필요로하고, 서브 클래스합니다 이
- "lib 디렉토리에서
EjbA
을 추출 할 "필요로하는 EJB ": 위와 같은 이유가 적용됩니다. 큰 변화가 필요합니다. - "삭제
EjbA
": 사용해야하는 다른 응용 프로그램이 있습니다. 현재 대체 응용 프로그램을 사용해야하는 응용 프로그램이 있습니다.
그래서 내가 생각할 수있는 몇 가지 방법이 있습니다 : IEjb
의 유일한 구현 EjbB
될 것이며, 의존성 주입이 잘 될 것이다 그래야
- 이
EjbA
를 배포하지 않는 서버를 알려 - 종속성 주입에
IEjb
의 인스턴스가 필요할 때 항상EjbB
을 사용하도록 지시하십시오 (CDI의@Specializes
과 유사하지만 EJB의 경우 - JavaEE 7에서 가능)?
이것에 대한 아이디어가 있습니까? 이것이 가능합니까 (나는 그 느낌이 예스입니다), 그렇다면 어떻게?
환경에 대한 참고 사항 : 현재 JBoss 7.2.0에서 실행 중이지만 Wildfly를 사용할 때만 가능하다면이 옵션이 될 수 있습니다 (업데이트는 필요하지 않지만 이미).
, 다른 사람
Baseimplementation은 다음과 같습니다 그것을 사용할 필요가있다. 주석을 제거하는 것은 위에서 설명한 것처럼 옵션이 아닙니다. 그러나, 나는'@ Inject'를 사용하는 것을 좋아하고 적어도 더 새로운 WELD 버전으로'@ Specializes'를 사용할 수있게하려고 노력할 것입니다. – Thomas
+1 @EJB를 삽입하기 위해 @EJB 대신 @Inject를 사용합니다. 이 접근 방식을 사용하면 2 개의 세계 EJB + CDI 중 최상의 것을 얻을 수 있습니다. 그렇게하면 CDI'@ Alternative' 또는'@ Specializes'를 사용하는 데 아무런 문제가 없습니다. –
@Inject가 트릭을합니다. 감사합니다. – Thomas