Glassfish – развертывание двух JAR-файлов со взаимными зависимостями
-
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 корпоративного приложения.
Это должно решить вашу проблему с загрузчиком классов.