загрузка общих классов в приложение javaee5

Я пытаюсь загрузить некоторые классы, общие для всех веб-приложений моего уха, в приложении java ee 5.

Я попытался сделать это, поместив классы (не jar) в каталог с именем "lib"

б) также указание в application.xml

   <module><java>lib/common.jar</java></module> 

и не был успешным ни по варианту а, ни по б

но когда я встряхнул классы в common.jar, я смог загрузить классы по методу б)

  1. Оба эти метода нуждаются в том, чтобы классы были сотрясены?
  2. в чем разница между предоставлением классов с помощью двух вышеуказанных методов? почему кажется, что есть два способа указать загрузку общих классов?

person unmaskableinterrupt    schedule 21.07.2010    source источник


Ответы (1)


Я не уверен, о каком сервере приложений здесь идет речь, и о характере файла common.jar. На данный момент я предполагаю, что сервер приложений — это любой контейнер Java EE 5, а файл common.jar — это утилита jar (а не EJB или аналогичный модуль).

Спецификация платформы Java EE 5 фактически определяет способ, которым поддержка библиотек должна предоставляться контейнерами:

A .ear file may contain a directory that contains libraries packaged in JAR files. The library-directory element of the .ear file’s deployment descriptor contains the name of this directory. If a library-directory element isn’t specified, or if the .ear file does not contain a deployment descriptor, the directory named lib is used. An empty library-directory element may be used to specify that there is no library directory. All files in this directory (but not subdirectories) with a .jar extension must be made available to all components packaged in the EAR file, including application clients. These libraries may reference other libraries, either bundled with the application or installed separately, using any of the techniques described herein.

Это не означает, что метод B неверен, это тот, который следует использовать для серверы приложений, такие как JBoss 4, которые не поддерживают элемент library-directory в application.xml. Я полагаю, что Glassfish также поддерживает концепцию каталога lib без соответствующего элемента каталога библиотеки.

Возвращаясь к вопросу, размещение одних только классов в каталоге в файле EAR, по-видимому, поддерживается только в WebLogic Server через структуру APP-INF\classes (излишне говорить, что это не стандарт платформы). Следовательно, рекомендуется использовать jar для общих классов и использовать механизм, поддерживаемый сервером приложений, чтобы сделать эти общие классы доступными для других модулей в приложении.

person Vineet Reynolds    schedule 21.07.2010
comment
Итак, не вдаваясь в специфические механизмы WL или сервера приложений, я не могу указать открытые файлы классов как общие? Похоже, что в соответствии со спецификацией javaee мне всегда приходится сбрасывать мои общие общие классы, чтобы их можно было забрать из каталога lib или из модуля java.... очень неудобно... - person unmaskableinterrupt; 22.07.2010
comment
Неудобно ли это, потому что вам нужно сделать это во время разработки или в производстве? Я не могу представить, чтобы это было очень неудобно для развертывания в производстве. Во время разработки лучше использовать один из подключаемых модулей IDE (особенно для Eclipse), поскольку они обычно ссылаются на развернутые JAR-файлы. - person Vineet Reynolds; 22.07.2010
comment
Для разработки - по разным причинам я не могу использовать плагины eclipse и настроил свой проект с развернутой структурой каталогов и символическими ссылками на выходные каталоги eclipse. Плагин предоставляет только способ создать фальшивую структуру, похожую на ухо, чтобы сервер приложений мог ее подобрать в любом случае, верно? В конечном счете сервер приложений — это тот, кто должен выбирать классы из каталога lib. Как оно это делает ? вы думаете, что плагин искажает классы из eclipse, чтобы сервер приложений мог получить доступ к классам? - person unmaskableinterrupt; 27.07.2010
comment
Если я не ошибаюсь, созданный «поддельный файл EAR» будет по-прежнему иметь взорванный файл JAR (даже для обычных классов). Однако значение имеет содержимое файла application.xml - в настоящее время я не знаю специфики, но я думаю, что Eclipse вставляет пути к файлам каталогов в расположение взорванных JAR-файлов. - person Vineet Reynolds; 27.07.2010
comment
похоже, что WL отлично выбирает классы из APPINF/classes. Если я хочу, чтобы WL извлекал незагруженные классы из каталога не через сервер приложений, я думаю, мне не повезло. Тег ‹lib› в application.xml ожидает jar, как и тег ‹module›‹java›... - person unmaskableinterrupt; 27.07.2010