2012-10-24 2 views
3

런타임에 삽입 할 여러 EJB 중에서 선택하는 방법을 찾으려고합니다.런타임시 삽입 할 빈을 선택하는 방법

시나리오는 다음과 같습니다. 모두 동일한 인터페이스 (ejbInterface)를 구현하는 2 개의 빈 (ejbA, ejbB)이 있습니다. 여러 개의 주입 지점 (다른 관리되는 bean, 즉 ejbCaller bean)에서 ejbInterface 구현을 삽입하려고합니다. 내가 런타임에 필요로하는 것을 (즉, DB 값에 기초하여) 알게 될 것입니다.

이 작업을 수행하는 한 가지 방법은 @Alternative 주석 및 배포 설명자를 통해 배포시 선택을하는 것이지만 런타임시 선택을하는 것이 좋습니다.

@Producer 접근 방식을 이미 시도했지만이 방법을 사용하면 관리되지 않는 개체 (생산자에서 인스턴스화하는 개체와 관리되는 컨테이너가 아니거나 자체 주입 지점 일 수 있음) 만 주입 할 수 있습니다.

  • 미 관리 객체를 생성하고 (이 통과해야합니다 ejbCaller) ejbInterface에서 setup 방법을 통해 관리되는 객체 (즉, 다른 콩, 엔티티 관리자)를 통과
  • : 나는 두 가지 해결 방법/프로듀서의 공격을 발견했다
  • 는 생산자의 JNDI 룩업을 사용하여 관리되는 개체는 모두 해결 방법이 오류가 발생하기 쉬운 우아한하지

을 반환합니다. 이것에 대한 더 나은 해결책이 있습니까?

+1

에서

javax.enterprise.inject.spi.BeanManager.getBeans(Type, Annotation...) 

사용합니다. 유사한 상황을 여기서보십시오 : http://stackoverflow.com/questions/12512571/jpa-inheritance-and-ejb-polymorphism – perissf

+0

포인터를 가져 주셔서 대단히 감사합니다! 나는 첫 번째 접근이 더 위험하다는 것에 동의한다. 나는 JNDI 조회에 대해 연구하고 그것이 얼마나 잘되는지 살펴볼 것이다. – Cascader

+1

CDI에서 인스턴스를 보지 않았습니까? – LightGuard

답변

1

는 그냥가 BeanManager를 주입하고 나는 확실히 두 번째 선택으로 가고 싶어 런타임

관련 문제