2010-05-10 4 views
2

내 JNDI 조회가 실패하는 (또는 적어도 발생할 수있는) EJB 리소스의 전역 JNDI 이름에 몇 가지 문제가 있습니다. 이 프로젝트는 Netbeans에서 개발 중이며 표준 Maven 웹 응용 프로그램입니다. 이 이름입니다 보장하기 때문에JEE6 글로벌 JNDI 이름 및 Maven 배포

com.example_myapp_war_1.0-SNAPSHOT

잘 볼의 넷빈즈 지점에서 좋은 : 내 응용 프로그램이 응용 프로그램 이름을 GF3.0하도록되어있을 때 같은 설정되어 독특한뿐만 아니라 모든 EJB를이 이와 같은 글로벌 이름을 얻을 의미

자바 : 글로벌/com.example_myapp_war_1.0 스냅 샷/CustomerService를

이 물론 문제 때문에 모든 시간을 일으킬 것입니다을 버전 변경 모든 글로벌 이름 변경 (나는이 버전과 이름을 변경하여 테스트했습니다 inde 변경됨). 이름은 POM 파일에서 생성 그것은의 연결입니다되고있다 : 지금까지 난 그냥 @EJB를 사용하여 모든 자원을 주입 멀리있어 최대

<groupId>com.example</groupId> 
<artifactId>myapp</artifactId> 
<packaging>war</packaging> 
<version>1.0-SNAPSHOT</version> 

하지만 지금은에서 CustomerService를의 EJB에 접근 할 필요가 응용 프로그램이 제대로 발표하고 모듈 이름이 변경 될 때 명확하게 중단됩니다

try { 
    Context ctx = new InitialContext(); 
    CustomerService customerService = (CustomerService)ctx.lookup("java:global/com.example_myapp_war_1.0-SNAPSHOT/CustomerService"); 
    return customerService.get(submittedValue); 
} catch(Exception e) { 
    logger.error("Failed to convert customer.", e); 
    return null; 
} 

을 : JSF 변환기 그래서 나는이처럼 봐 JNDI를하고 있어요. 그래서 백만 달러의 질문 : 어떻게하면 maven에서 modal 이름을 설정할 수 있습니까? 아니면 module name을 복구하여 runtile에서 JNDI 이름을 프로그래밍 방식으로 만들 수 있습니까? 해당 링크에서 제안한대로 web.xml 파일에서 설정을 시도했지만 무시되었습니다. 나는 애플리케이션이 배치 될 때 스크류 업에 대한 스코프가 적다는 것을 의미하므로 런타임에 이름을 만들겠다고 생각한다.

많은 도움을 주신 데 대해 감사 드리며, 하루 종일 머리를 찢어 서 왔습니다.

+0

를? 뱃짐? war-plugin을 사용합니까? – khmarbaise

답변

3

, 그냥 자바를 사용 모듈 별명 : 당신은 어떻게 배치를하고있는

java:module/CustomerService 
+0

많은 감사합니다. 이 문제를 겪고있는 다른 모든 사람들에게 다음과 같은 추가 정보가 있습니다. http://blogs.oracle.com/kensaks/entry/application_specified_portable_jndi_names – wobblycogs

+0

Quartz 작업에서이 작업을 시도하기 전까지는 완벽하게 작동합니다. Quartz는 컨테이너 컨텍스트 외부에서 자신의 스레드를 실행하기 때문에 (btw, 예, 나는 작업 InitialContext를 수동으로 구성했다) 가정하기 때문이다. 글로벌 JNDI 검색 만 작동했습니다. 그 말은 내가 최종 빌드 이름을 maven에 설정하는 데 어려움을 겪고 있음을 의미합니다. 하지만 배포자가 배포 된 앱의 이름을 변경할 수 있기 때문에 이것이 보장되는 것은 아닙니다. 어떤 것이 더 좋아 졌습니까? (석영 작업 내에서 모든 것을 작동하게하려면?) – demaniak

+0

@demaniak EE 스레드에서'java : app/AppName'과'java : module/ModuleName'을 포착하여 'java : global///'이름을 재구성 할 수있는 쿼츠 작업? –

0

어떻게하면 maven에서 modle 이름을 설정할 수 있습니까? 또는 모듈 이름을 복구하여 런타임시 프로그래밍 방식으로 JNDI 이름을 만들 수 있습니까?

음, EJB 3.1에 module-name의 휴대용 글로벌 JNDI 이름에 대해 제공된 링크에서 작성된 :

<module-name> 기본값 이름 묶기 (.WAR를 또는 .jar)없이 번들 확장자.

그래서 나는 메이븐을 구성하고 finalName가 WAR의 이름으로 버전을 포함하지 않도록 설정합니다 :

<project> 
    ... 
    <build> 
    <finalName>${artifactId}</finalName> 
    ... 
    </build> 
</project> 

하지 넷빈즈 패키지 이름을 포함하고 밑줄 확실한 이유 (넷빈즈 그렇게하고있다, GlassFish에 배포 할 때 그리고 NB가 그렇게하는 것을 피할 수 있다면. EJB를이 WAR에 포함되어있는 경우

+0

죄송합니다. 이미 시도했습니다. myapp 그리고 도움이되지 않았습니다. 그러나 그것은 전쟁의 이름에 포함 된 버전을 중단시켰다. "com.example_myapp_war_1.0-SNAPSHOT"이라는 이름으로 응용 프로그램을 배포하는 maven 또는 netbeans인지 여부는 잘 모르겠지만 GF 관리 콘솔에 표시된 이름입니다. 나는 이름의 일부가 POM에서 온다는 것을 알고 있으므로 이름을 생성하는 Maven이라고 가정합니다. GF가 대상 war 디렉토리에서 응용 프로그램을 실행하고 있으므로 war 파일의 이름을 선택하지 않은 것 같습니다. – wobblycogs

관련 문제