Как пользоваться сторонними библиотеками в glassfish?

Я должен соединиться с экземпляром MongoDB из своего приложения EJB3, работая на glassfish 3.0.1. Проект монго обеспечивает ряд драйверов, и я могу использовать их в автономном 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 (Свойства-> Библиотеки->, Компиляция-> Добавляет Банку, включает 'Пакет'), и я также пытался вручную копировать файл банки в $GF_HOME/glassfish/domains/domain1/lib (где mysql-коннектор уже находится).

Я должен 'зарегистрировать' библиотеку в контейнере? Сослаться на него с помощью Аннотации? Расширить путь к классу контейнера для включения библиотеки?

11
задан Mogsdad 15 September 2015 в 15:28
поделиться

2 ответа

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

17
ответ дан 3 December 2019 в 02:40
поделиться

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

Загрузчик общих классов

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

lib /, а не lib / ext

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

9
ответ дан 3 December 2019 в 02:40
поделиться
Другие вопросы по тегам:

Похожие вопросы: