2013-10-09 4 views
0

Weblogic 10.3.x에서 실행중인 다중 모듈 Java EE 5 프로젝트가 있습니다. 하나의 모듈에는 EJB가 있고 우리의 배치 프로세서는 웹 모듈에서 실행 중입니다. JavaEE5에는 CDI가 없으므로 EJB에서 JNDI 조회를 수행해야합니다. EJB는 클래스에서 @Stateless로, 인터페이스에서 @Remote로 정의됩니다.WAR- 프로젝트의 JNDI에서 주석 된 EJB3 Bean을 올바르게 참조하는 방법

나는 다음과 같은 문자열을 보면 EJB에 접근 성공 그러나

ejb/batchService#com.example.service.batch.ejb.BatchServiceRemote 

, 나는이 매우 platformdependent입니다 보라, 나는 내가 웹 로직에 아마 web.xml의 내부에 뭔가를 넣어해야 의심 .xml 적어도 웹 모듈에서 - 어쩌면 EJB 모듈에서도 ...

나는 이것을 능숙하게하는 방법을 가르쳐 줄 수 있습니까? 아니면 이것이 가능한 가장 좋은 방법입니까? 로컬 콩

+0

glassfish '@EJB (name = "nice_bean_name", beanInterface = MyInterface.class)에 사용합니다.' –

답변

1

JNDI 형식 원격 빈용

java:comp/env/BeanClassName 

JNDI 포맷

@Stateless(mappedName = "mappedName") 
public class BeanClassName { 

PS 용

mappedName#com.package.BeanClassName 

이다. 이 형식은 WebLogic 10.3으로 지원됩니다. 다른 응용 프로그램 서버의 동작은 다를 수 있습니다.

0

EJB 3.1/EE 6 이전에는 EJB에 대해 표준화 된 조회 문자열이 없습니다. 표준화되지 않았기 때문에 EJB의 실제 바인딩 이름을 하드 코딩하면 프로젝트별로 제품이 달라집니다.

최선의 해결책 간접 다른 레벨 생성하는 것이다 : 선언을 <ejb-local-ref> web.xml의 (또는 @EJB/서블릿 또는 다른 컴포넌트 클래스에 @EJBs 등) 다음에, 상기 (REF)를 조회 할 java:comp/env/xyz를 사용한다. 그런 다음 EJB ref에 대해 플 '폼 특정 바인딩을 사용하십시오.