문제

저는 Java EE를 처음 접하는 사람이므로 아마도 이것은 더미 질문일 것입니다.하지만 저는 EJB가 포함된 WAR과 JAR을 Glassfish 3.1에 배포하고 있습니다.섬기는 사람.WAR에는 JAR 파일의 EJB 중 하나에 대한 참조가 있습니다.WAR 파일에 EJB JAR을 포함하는 것이 필수입니까? lib 이 작업을 수행하려면 디렉토리가 필요합니까?WAR과 JAR이 모두 동일한 앱 서버에서 실행되므로 이러한 종속성을 처리할 필요가 없기를 바랐습니다.그러나 나는 java.lang.NoClassDefFoundError EJB JAR이 포함되지 않은 WAR을 배포할 때(EJB JAR이 이미 앱 서버에 배포된 경우에도)

도움이 되었습니까?

해결책

Java EE의 초석 중 하나는 구성 요소가 동일한 JVM에서 실행될 수 있더라도 네임스페이스를 공유하지 않는 컨테이너에서 서로 다른 구성 요소가 실행될 수 있다는 개념입니다.네임스페이스를 공유해야 하는 모듈이 있는 경우 해당 모듈을 EAR(Java EE 6 이전)로 번들링하거나 단일 WAR(EJB를 활용해야 하는 웹 애플리케이션을 위해 Java EE 6에서 설정된 특수 사례)로 결합해야 합니다. .

이는 Java SE 개발에 익숙한 사람들이 "알고 있는" 것과는 상당한 변화입니다.대부분의 Java SE 프로그램에서 컨테이너는 JVM 프로세스입니다.

따라서 귀하의 질문에 대한 대답은 "아니요.WAR 파일의 lib 디렉토리에 EJB jar를 넣을 필요는 없습니다.두 아카이브를 모두 포함하는 EAR 파일을 만들 수 있습니다."

이렇게 하면 상황이 명확해질 수 있습니다...

 myEar.ear
   + myEJBs.jar
   + myWAR.war
   + lib
       + a-jar-that-has-classes-used-in-both-archives-above.jar

다른 팁

WAR 및 JAR 파일을 EAR 파일로 함께 패키징해 보셨나요?EAR 파일에는 엔터프라이즈 애플리케이션의 클래스 경로 FBO에 로드할 JAR 파일을 넣을 수 있는 lib 디렉터리가 있을 수 있습니다.

이렇게 하면 클래스 로더 문제가 해결됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top