2012-06-29 6 views
0

나는 빠른 바이너리 웹 서비스 (일명 Ejb3.1)로 작성 종속성 무리가있다.CDI는 기본 제작자를위한 API를 제공합니까?

@Remote 
public interface MyService {...} 

당신은 다음과 같은 구문을 가진 서블릿으로 EJB 또는 관리 빈을 주입하는 것입니다 : 내가 그러나 @EJB 주사를 사용하지 않으

@EJB 
MyService myService; 

여기에 서비스 delcaration입니다. 모든 EJB에 대한 @Produces 방법을 작성하는 것이다이를 위해

@Inject 
MyService myService; 

한 가지 방법 : 나는 일반 바닐라 CDI를 사용하고 싶습니다

@Produces MyService produceMyService(InjectionPoint ijp){ 
//jndi lookup for MyService interface 
} 

그러나, InjectionPoint가 제공 할 수있는 당신의 모든 대상 클래스 이름 (이 경우 MyService)과 같이 필요한 정보.

같은 것을 할 수있는 CDI의 방법이 있나요? 필요한 주입 지점을 다른 방식으로 수행 할 수없는 경우이 생산 업체를 마지막으로 호출하고 싶습니다.

@Produces Object produce(InjectionPoint ijp){ 
Class ejbInterface = ijp.getType(); 
//jndi lookup for ejbInterface 
} 

이것은 혼란스러운 게시물이므로 명확한 질문을하십시오. 엄청 고마워! 아니,이에 대한 API가 없다 : 나는 (주석 참조) 질문을 이해한다고 가정

+0

그래, 꽤 혼란 스럽네요 : 나는 당신이 일종의 의존성을 해결할 수있는 방법을 찾고 있다고 정확하게 이해 했는가? "-방법? –

+0

예, 좋습니다. 기본적으로 "다른 모든 방법으로 주입 할 수없는 종속성"을 모두 잡습니다. –

답변

3

.

좋은 소식이 달성 할 수있는 방법이 있다는 것입니다 -하지만 당신은 아마 런타임에이 작업을 수행 할 수 없습니다, 그것은 오히려 응용 프로그램 시작을위한 작업입니다.

CDI extension mechanism은 컨테이너 시작에 콩 처리에 대한 몇 가지 잘 정의 된 후크를 제공합니다. 이것은 (아마도 정적 클래스 경로 정보를 기반으로) 특정 관리 콩/비활성화를 활성화하는 방법에 대한 결정 로직을위한 완벽한 장소입니다.

은 심 Solder@Requires의 기능을보고 구현 되세요. 그건 당신의 유스 케이스에 꽤 가까워 야합니다 ...

관련 문제