Мне нужно подключиться к экземпляру 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-коннектор).
Нужно ли «регистрировать» библиотеку с контейнером? Ссылка на него через аннотацию? Расширить путь к классам контейнера, чтобы включить библиотеку?
@Pascal: спасибо! Я думал, я тоже это пробовал. Во всяком случае, работает как шарм. Это хороший способ? Разве это не должно быть частью развертывания? – Hank
@Hank Я не знаю, как используется драйвер MongoDB, но если он не используется контейнером (например, JDBC-драйвер должен был создать пул соединений) и не использоваться совместно с приложениями домена, тогда вы должны, возможно, упаковать это внутри вашего приложения. –