Как использовать сторонние библиотеки в glassfish? - PullRequest
11 голосов
/ 24 марта 2010

Мне нужно подключиться к экземпляру MongoDB из моего приложения EJB3, работающего на glassfish 3.0.1.Проект Mongo предоставляет набор драйверов, и я могу использовать их в автономном приложении Java.

Как бы я использовал их в приложении Java EE?Или, может быть, лучше сформулировать: как мне сделать стороннюю библиотеку доступной для моего приложения, когда она запускается в контейнере EJB?

В данный момент я получаю java.lang.NoClassDefFoundError при развертывании компонента,пытается импортировать из библиотеки:

[#|2010-03-24T11:42:15.164+0100|SEVERE|glassfishv3.0|global|_ThreadID=28;_ThreadName=Thread-1;|Class [ com/mongodb/DBObject ] not found. Error while loading [ class mvs.core.LocationCacheService ]|#]
[#|2010-03-24T11:42:15.164+0100|WARNING|glassfishv3.0|javax.enterprise.system.tools.deployment.org.glassfish.deployment.common|_ThreadID=28;_ThreadName=Thread-1;|Error in annotation processing: java.lang.NoClassDefFoundError: com/mongodb/DBObject|#]

[#|2010-03-24T11:42:15.259+0100|SEVERE|glassfishv3.0|javax.enterprise.system.core.com.sun.enterprise.v3.server|_ThreadID=28;_ThreadName=Thread-1;|Exception while loading the app
org.glassfish.deployment.common.DeploymentException: java.lang.NoClassDefFoundError: com/mongodb/DBObject
at org.glassfish.weld.WeldDeployer.event(WeldDeployer.java:171)
at org.glassfish.kernel.event.EventsImpl.send(EventsImpl.java:125)
at org.glassfish.internal.data.ApplicationInfo.load(ApplicationInfo.java:224)
at com.sun.enterprise.v3.server.ApplicationLifecycle.deploy(ApplicationLifecycle.java:338)

Я попытался добавить его в проект NetBeans (Свойства -> Библиотеки -> Компилировать -> Добавить Jar, включить «Пакет»), а также попытался вручную скопироватьфайл jar в $ GF_HOME / glassfish / domains / domain1 / lib (где уже находится mysql-соединитель).

Нужно ли «регистрировать» библиотеку в контейнере?Ссылка это через аннотацию?Расширить путь к классу контейнера, чтобы включить библиотеку?

Ответы [ 6 ]

17 голосов
/ 25 марта 2010

Хмм ... Разве вы не должны поместить этот "драйвер" в glassfishv3/glassfish/domains/domain1/lib/ext?

9 голосов
/ 05 апреля 2010

Вы можете поместить общие библиотеки в lib / ext вашего домена. драйверы commons-logging и jdbc часто добавляются в этот путь домена.

Common Class Loader

GlassFish v2 имеет четко определенный класс Иерархия загрузчиков, которая определяет общий класс загрузчик как правильный путь иметь дело с общими библиотеками. Так чтобы Короче говоря, поставив вас библиотеки и другие фреймворки JAR в domains / domain1 / lib это все что вам нужно делаем.

lib /, а не lib / ext

Человек, задававший мне вопрос, имел попытался положить библиотеки в domains / domain1 / lib / ext вызвал интересный ClassNotFoundError для ядра Java EE классы, такие как javax.servlet.http.HttpServlet. Shing Вай Чан быстро объяснил, что domains / domain1 / lib / ext является частью -Djava.ext.dirs, который делает любой из JAR-файлов рассматриваться как расширение JDK что означает, что размещены рамки веб-приложений там будет загружено раньше классы реализации веб-контейнера как они выше в загрузчике цепочка делегирования.

3 голосов
/ 05 февраля 2013

Glassfish имеет собственную иерархию загрузчиков классов, http://docs.oracle.com/cd/E19798-01/821-1752/beade/index.html
Я сталкиваюсь с той же проблемой в своем проекте, а затем помещаю все сторонние библиотеки в домен / домен1 / lib, и моя проблема решена.С другой стороны, мою проблему тоже решили, поместив библиотеки в glassfish / lib.

2 голосов
/ 25 февраля 2013

В моем случае я использовал Oracle Express Edition 11gR2 и Glassfish 3.1.2, и ЕДИНСТВЕННЫМ способом, который работает в моем случае, было размещение ojdbc6 в:

C:\Program Files\glassfish-3.1.2.2\glassfish\lib
0 голосов
/ 07 мая 2018
  1. Перейдите в каталог Doamin Glassfish.

  2. Затем перейдите в папку lib.

  3. Поместите туда библиотеки.

  4. Перезагрузите стеклянную рыбу и бегите.

(Ех) C: \ glassfish3 \ glassfish \ domains \ domain1 \ lib

0 голосов
/ 04 мая 2016

Попробуйте поместить свои библиотеки в $ GF_HOME / glassfish / modules /. Это грязно, но будет работать.

...