Je dois me connecter à une instance MongoDB depuis mon application EJB3, en cours d'exécution sur glassfish 3.0.1. Le projet Mongo fournit un ensemble de pilotes et je suis capable de les utiliser dans une application Java autonome.Comment utiliser des bibliothèques tierces dans glassfish?
Comment les utiliser dans une application Java EE? Ou peut-être un meilleur phrasé: comment est-ce que je devrais rendre une bibliothèque de tiers disponible à mon application quand elle s'exécute dans un récipient d'EJB?
En ce moment, je suis d'obtenir un java.lang.NoClassDefFoundError lors du déploiement d'un haricot qui tente d'importer de la bibliothèque:
[#|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)
J'ai essayé d'ajouter au projet NetBeans (Propriétés -> Bibliothèques -> Compiler -> Ajouter un pot, activer 'Paquet'), et j'ai aussi essayé de copier manuellement le fichier jar dans $ GF_HOME/glassfish/domains/domain1/lib (où le connecteur mysql se trouve déjà).
Dois-je «enregistrer» la bibliothèque avec le conteneur? Référencez-le via Annotation? Étendre le chemin de classe du conteneur pour inclure la bibliothèque?
@Pascal: merci! Je pensais que j'avais essayé cela aussi. Quoi qu'il en soit, fonctionne comme un charme. Est-ce un bon moyen cependant? Cela ne devrait-il pas faire partie du déploiement? – Hank
@Hank Je ne sais pas comment le pilote MongoDB est utilisé, mais s'il n'est pas utilisé par le conteneur (comme un pilote JDBC serait de créer un pool de connexion) ni partagé entre les applications du domaine, alors vous devriez peut-être package à l'intérieur de votre application. –