2015-07-23 2 views
0

У меня есть проект Enterprise (EAR) с одним EJB и несколькими веб-модулями, эти веб-модули имеют множество общих классов, они одинаковы для каждого проекта, поэтому, если я модифицирую один из них Мне придется вручную скопировать код в другие проекты. Я не хочу помещать их в свой модуль EJB, потому что они используют много интерфейсных ресурсов.Упаковка приложения Java EE

Есть ли способ поделиться этими классами между веб-проектами?

Обс: Они также используют классы и ресурсы от модуля EJB.

+0

какой сервер вы используете? Вы можете изучить вариант разделяемых библиотек –

+0

Я использую glassfish 3 –

+0

Glassfish 3 не является сервером java-ee-7 - это java-ee-6. –

ответ

1

Создайте еще один модуль со всеми классами коммутации и упакуйте его как Jar. Затем добавьте банку в качестве зависимости от другого проекта.

Maven должен быть хорошим инструментом для этого проекта.

+0

Ящик не сможет использовать модуль EJB –

+0

Конечно, он может, например, с помощью впрыска конструктора. –

+0

Оказалось, что это возможно, но если я добавлю эту банку в зависимость от веб-модулей, я получаю NoClassDefFoundError во время выполнения, классы из банки будут видны веб-проектам. –

0

Невозможно иметь общие классы за пределами .war, которые могут иметь вложенные в Интернет ресурсы.

Я бы реорганизовал общие классы в отдельный .jar. Вы можете сделать их EJB или просто обычными классами. В любом случае вы не сможете вводить ресурсы, специфичные для Интернета; классы в .wars должны будут передавать такие параметры, как параметры метода. В случае EJB вы не можете напрямую передавать несериализуемые объекты, такие как HttpServletRequests; Я не знаю, создаст ли это существенное препятствие.

EJB .jar можно поместить в любом месте .ear, но если вы решите создать не-EJB .jar, его можно поместить в каталог lib вашего .ear-файла. Это также хорошее место для интерфейсов EJB, если вы не пишете EJB без интерфейса. В главе «Требования к сборке и развертыванию приложения Java EE»:

Файл .ear может содержать каталог, содержащий библиотеки, упакованные в файлы JAR. Элемент library-directory дескриптора развертывания файла .ear содержит имя этого каталога. Если элемент library-directory не указан или файл .ear не содержит дескриптор развертывания, используется каталог с именем lib. Пустой элемент library-directory может использоваться, чтобы указать, что библиотека библиотеки отсутствует.

Все файлы в этом каталоге (но не в подкаталогах) с расширением .jar должны быть доступны всем компонентам, упакованным в файл EAR, включая клиентские приложения. Эти библиотеки могут ссылаться на другие библиотеки, поставляемые вместе с приложением или устанавливаемые отдельно, с использованием любого из описанных здесь методов.

+0

Спасибо за ответ, но в моем случае 90% кода в этих классах отвечает за обработку ресурсов в Интернете, это не помогло бы разделить только остальные 10%. Я продолжу искать решение. –

+0

На самом деле, я оговорился. Сериализуемое ограничение параметра применяется только к EJB, а не к обычным библиотекам. Не уверен, что это вообще помогает. – VGR