Necesito conectarme a una instancia de MongoDB desde mi aplicación EJB3, que se ejecuta en glassfish 3.0.1. El proyecto Mongo proporciona un conjunto de controladores y puedo usarlos en una aplicación Java independiente.¿Cómo usar las bibliotecas de terceros en glassfish?
¿Cómo los usaría en una aplicación Java EE? O tal vez mejor redacción: ¿cómo podría hacer que una biblioteca de terceros esté disponible para mi aplicación cuando se ejecuta en un contenedor EJB?
Por el momento, me estoy poniendo un java.lang.NoClassDefFoundError al desplegar un bean que intentos de importación desde la biblioteca:
[#|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)
He intentado añadir al proyecto de NetBeans (Propiedades -> Bibliotecas -> Compilar -> Agregar Jar, habilitar 'Paquete'), y también intenté manualmente copiar el archivo jar a $ GF_HOME/glassfish/domains/domain1/lib (donde ya reside el conector mysql).
¿Debo registrar la biblioteca con el contenedor? ¿Referenciarlo a través de Annotation? ¿Extender el classpath del contenedor para incluir la biblioteca?
@Pascal: ¡gracias! Pensé que había intentado esto, también. De todos modos, funciona como un encanto. Aunque es una buena manera? ¿No debería ser esto parte de la implementación? – Hank
@Hank No sé cómo se usa el controlador MongoDB, pero si el contenedor no lo usa (como un controlador JDBC sería para crear un grupo de conexiones) ni se comparte entre las aplicaciones del dominio, entonces quizás deba empaquetar dentro de tu aplicación. –