Glassfish – развертывание двух JAR-файлов со взаимными зависимостями

StackOverflow https://stackoverflow.com/questions/6073742

  •  07-09-2020
  •  | 
  •  

Вопрос

Я новичок в Java EE, так что, возможно, это глупый вопрос.Но я развертываю WAR и JAR, содержащий EJB, в Glassfish 3.1.сервер.WAR имеет ссылку на один из EJB в файле JAR.Обязательно ли включать EJB JAR в файл WAR? lib каталог, чтобы это работало?Поскольку и WAR, и JAR будут работать на одном сервере приложений, я надеялся, что мне не придется заботиться об этих зависимостях.Однако я получаю java.lang.NoClassDefFoundError когда я развертываю WAR, если он не включает EJB JAR (даже если EJB JAR уже развернут на сервере приложений).

Это было полезно?

Решение

Одним из краеугольных камней Java EE является идея о том, что разные компоненты могут работать в контейнерах, которые не используют общее пространство имен, даже если компоненты могут работать в одной JVM.Если у вас есть модули, которым необходимо совместно использовать пространство имен, их необходимо объединить в EAR (до Java EE 6) или объединить в один WAR (особый случай, установленный Java EE 6 для веб-приложений, которым необходимо использовать EJB). .

Это существенное отличие от того, что «знают» люди, знакомые с разработкой Java SE.Для большинства программ Java SE контейнером является процесс JVM.

Итак, ответ на ваш вопрос: «Нет.Вам не нужно помещать JAR-файл EJB в каталог lib файла WAR.Вы можете создать файл EAR, который будет содержать ОБА архива».

Возможно, это прояснит вам ситуацию...

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

Другие советы

Пробовали ли вы упаковать файлы WAR и JAR вместе в файл EAR?Файл EAR может иметь каталог lib, в который можно поместить файлы JAR для загрузки по пути к классам FBO корпоративного приложения.

Это должно решить вашу проблему с загрузчиком классов.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top