2011-10-15 2 views
2

MDB 및 해당 MDB를 지원하는 클래스를 기반으로 프로젝트를 만들고 있습니다. 또한 ServletContextListener를 사용하여 MDB 유니버스 (아래 세부 정보)와 상호 작용해야합니다. 즉, WAR 프로젝트가 필요합니다.EAR 프로젝트의 WAR 프로젝트에서 EJB 프로젝트의 액세스 클래스?

질문 : ServletContextListener는 어떻게 EJB 프로젝트의 클래스에 액세스 할 수 있습니까?

프로젝트 조직 (표준 이클립스 EAR 프로젝트) :

EAR 프로젝트 는 EJB 프로젝트 일부 MDB의 및 MDB의 WAR 프로젝트 사용하는 다른 많은 클래스는 ServletContextListener를 가지고있다 의 일부 항아리가있다.

왜 내가이 작업을 수행하고 있습니까? 프로젝트가 시작될 때 스레드를 시작해야합니다. 이 쓰레드는 MDB에서 사용되는 여러 클래스에 대한 액세스를 필요로합니다.

참고 :이 공통 클래스를 EAR 프로젝트의 병에 넣을 수 있음을 알고 있습니다. 예를 들어 "Debug As"-> "On Server"라는 단일 일식과 같은 방법을 사용하면 좋은 해결책이 될 수 있습니다. 제공되는 솔루션이 무엇이든간에 모든 클래스에 단계 디버깅을 사용하여 서버에서 해당 디버그를 지원해야합니다.

참고 2 : WAR 프로젝트가 Eclipse 오류 플래그를 제거하는 EJB 프로젝트에 종속된다는 것을 이클립스에 알릴 수 있지만 이클립스는 배치 된 프로젝트에이 종속성이 존재하지 않는다는 경고를 표시합니다. WAR는 런타임시 인스턴스화에 실패합니다.

답변

1

Java EE 서버 (기본 클래스 로더 정책 사용)에서 "표준"배치를 사용하면 WAR 클래스가 해당 EAR에있는 모든 것을 볼 수 있으며 EAR 클래스가 우선합니다.

나는 WAR 프로젝트는 EJB 프로젝트

에 의존한다는 이클립스를 알 수 있습니다 만약 당신이 다른 방식을하고 있지 않습니까? 프로젝트의 "Properties -> Deployment Assembly"섹션에서 WAR 프로젝트를 수행해야하는 것은 EAR 프로젝트입니다.

또 다른 가능성은 EAR을 지원하지 않는 Tomcat과 같은 Java EE 이외의 서버에 배포하려고 시도하고 있다는 것입니다. Eclipse가 배포 된 프로젝트에 종속성이 존재하지 않는다고 말하는 이유 일 수 있습니다.

+0

나는 게시물을 만들기 전에 - 당신과 동의 한 웹 페이지를 읽었습니다. 글래스 피쉬 (내 타겟)에서 당신이 말하는대로 작동하는 것이 가능합니다. 그러나 Eclipse는 오류를 표시합니다. Eclipse에서 다음과 같이 프로젝트를 만들었습니다. (1) EAR 프로젝트를 만듭니다. (2) EJB 프로젝트를 EAR의 멤버로 만듭니다. (3) EAR의 구성원으로서 WAR 프로젝트를 생성합니다. WAR 프로젝트의 클래스는 Eclipse 프로젝트 오류 플래그에 따라 EJB 프로젝트에서 클래스를 볼 수 없습니다. 나는 같은 EAR의 일부로 "유틸리티"(라이브러리) 프로젝트를 만들고 MDB와 ServletContextListener를 제외하고 모든 클래스를이 클래스로 옮겨서 문제를 해결했다. 이것은 과잉으로 보인다. – Mesocyclone

관련 문제