Glassfishv3 не добавляет банки в ухо на пути к классам - PullRequest
0 голосов
/ 28 января 2011

Я работал над этой проблемой целый день, но тщетно без какого-либо эффективного решения.

У меня есть файл ear, упакованный с ejb, и несколько файлов jar (включая hibernate и другие зависимые файлы).файлы jar.). ejb не имеет состояния и включен как веб-сервис.

Файл ear был упакован с использованием maven и имеет следующую структуру

ear-> projectrelatedejb.jar

-> hibernate.jar

-> другие зависимые.jar

-> META-INF / application.xml

-> META-INF / manifest.mf

Файл application.xml и manifest автоматически генерируются maven, когдаЯ делаю пакет.

Когда я развертываю этот файл ear на glassfish, он развертывается с помощью методов ejb, доступных через веб-сервисы.Однако при доступе к приложению (используя soapui) методы ejb, которые выполняют некоторые функции базы данных с использованием hibernate throw java.lang.NoClassDefFoundError для hibernate api во время выполнения.

Из ошибки видно, что jiber-файлы hibernateне на пути к классам во время выполнения, но поскольку банки находятся внутри уха, Glassfish должен был добавить его к пути к классам приложения.

Я пробовал различные варианты, такие как добавление записей classpath в manifest.mf во время пакета (используяэлемент addClasspath с maven-ear-plugin), который не принес никакой пользы. Также с помощью Glassfish мы не можем добавлять зависимые jar-файлы в качестве модулей в application.xml, если jar-файлы не являются jar-файлами клиента приложения (Glassfish не будет развертывать earфайл, если в application.xml есть зависимые файлы jar, объявленные как модули).

Я также попытался поместить файлы jar в каталог lib внутри уха (который на самом деле не требуется) и с заголовком манифеста Class-Pathreferencing jars в каталоге lib, который также не устранил проблему.

Быстрое и грязное исправление, которое я могу сделать, чтобы получить эту работу, - это поместить hibernate и другие зависимые jars в каталог lib Glassfish.Однако, это плохая практика, и я с некоторой неохотой это делаю.

Я был бы очень признателен, если бы кто-нибудь смог предоставить мне рабочее решение этой проблемы. Я прошел через сеть в поисках этой проблемы.но не смог найти никакого решения.

Интересно, если это ошибка со стеклянной рыбкой или стеклянная рыба нуждается в чем-то особенном, чтобы ссылаться на банки в ухе.

Заранее спасибо.

Ответы [ 3 ]

2 голосов
/ 08 ноября 2011

Я нашел похожую проблему, которая обсуждается здесь: http://www.tricoder.net/blog/?p=59.

Проще говоря, попробуйте поместить библиотеки в каталог EAR / lib и в соответствии со спецификацией JEE5 glassfish автоматически добавит их в путь классов.

1 голос
/ 20 ноября 2011

Я использовал опцию Server Library для развертывания JAR приложений, и это сработало для меня.Щелкните правой кнопкой мыши на EAR-> Properties -> Libraries-> Add Library -> Create -> имя и измените тип в Library Type на Server Libraries, затем добавьте JAR, которые необходимо развернуть, и подтвердите.

Я работаю с NetBeans 7.0.1 и сервером GlassFish 3.1

0 голосов
/ 11 марта 2011

Когда вы говорите, что добавили записи classpath в manifest.mf, на какой манифест.mf вы ссылаетесь? Один в ухо-корень / META-INF / manifest.mf? Попробуйте добавить META-INF / MANIFEST.MF в свой модуль ejb с записями Class-Path!

...