2011-11-18 3 views
0

로컬 또는 원격 인터페이스를 사용하여 조회 할 서비스 (EJB)가 있습니다. 우리가 의도적으로 그런 일을하도록 내버려두면 잠재적으로 하나 이상의 구현을 발견 할 수 있을지는 중요하지 않습니다.클래스 별 JNDI 조회

우리는 EJB 컨테이너에 직접 액세스 할 수 없으므로 JNDI 조회를 사용해야합니다.

현재 우리는 Context#listBindings("")을 사용하여 컨텍스트를 반복하고 각 바인딩에서 반환 된 객체가 컨텍스트 (재귀 호출이라고 부르는 경우)인지 또는 우리가 찾고있는 인터페이스에 할당 될 수 있는지를 확인합니다 - 그 경우 우리는 끝났어.

그러나 내가 수행 한 모든 하위 컨텍스트 (큰 응용 프로그램에서는 상당히 많을 수도 있음)에 대해 list("")을 호출해야하므로이 작업을 수행하면 전체 조회가 발생할 수 있습니다.

그래서 하나의 호출 (또는 통화의 정의 수)에 JNDI에서 클래스를 기반으로 검색을 할 수있는 방법은 무엇입니까?

, BTW 우리는 그래서 우리는 자바 EE 6 JNDI 구현에 액세스 할 수없는 보스 4.2.3.GA에이 일을하고 있습니다.

답변

1

한 마디로 말하자면, 귀하의 유스 케이스가 너무 특별합니다.

하지만 당신은 몇 가지 옵션이 있습니다

  1. 왜 당신은 JNDI를 통해 봄 ApplicationContext를 등록하지 않습니다를? 그러면 getBean(type) 번으로 전화 할 수 있습니다.

  2. 대신 또 다시 그 조회를하는의 조회를 캐시 코드에 공장을 추가?

  3. "서비스 조회 EJB"를 만드는 방법은 어떻습니까? ,

+0

나는 현재하고 사람들을 찾아보십시오 이름을 캐싱하고있어 실패 할 경우 나는 캐시에서 그 이름을 제거하고 그 나 또한 잠시 동안 옵션 3을 사용하는 옵션 2 것, 그래서 다시 검색 컨테이너를 검색하고 필요한 서비스를 검색하는 Bean을 검색하지만 해당 컨테이너를 획득하는 것은 JBoss에만 해당됩니다 (버전에 따라 다를 수도 있음). 따라서이를 피하고 싶습니다. 나는 그 힌트를 주셔서 감사합니다. – Thomas