Necesito para conectarse a una instancia de MongoDB desde mi EJB3 de la aplicación, que se ejecuta en glassfish 3.0.1. El Mongo proyecto proporciona un conjunto de controladores, y soy capaz de usarlos en una independiente de la aplicación Java.

¿Cómo puedo utilizar en una aplicación Java EE? O tal vez mejor fraseo: ¿cómo puedo hacer una 3ª parte de la biblioteca están disponibles para mi aplicación cuando se ejecuta en un contenedor EJB?

Por el momento, me estoy poniendo un java.lang.NoClassDefFoundError cuando la implementación de un bean que
intenta importar 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 que el proyecto de NetBeans (Propiedades -> Bibliotecas -> Compilar -> Agregar Jar, habilitar el «Paquete»), y también he intentado manualmente copiando el archivo jar a $GF_HOME/glassfish/domains/domain1/lib (donde el mysql-connector ya reside).

Necesito «registro» en la biblioteca con el recipiente? Hacer referencia a ella a través de la Anotación? Extender el classpath del contenedor para incluir la biblioteca?

OriginalEl autor Hank | 2010-03-24

6 Comentarios

  1. 17

    Hmm… ¿no Deberían poner este «driver» en glassfishv3/glassfish/domains/domain1/lib/ext?

    gracias! Pensé que me había intentado esto, también. De todos modos, funciona como un encanto. Es que de una buena manera? ¿No debería esto ser parte de la implementación?
    No sé cómo la MongoDB se utiliza el controlador, pero si no es usado por el contenedor (como un controlador JDBC sería crear un pool de conexiones) ni compartidos entre las aplicaciones del dominio, entonces usted debería, tal vez, el paquete dentro de su aplicación.

    OriginalEl autor Pascal Thivent

  2. 9

    Podría poner de bibliotecas compartidas para lib/ext de su dominio. commons-logging y controladores jdbc, se suelen añadir en esta ruta de dominio.

    Común De La Clase Loader

    GlassFish v2 tiene un lugar bien definido Clase
    Cargador de jerarquía que identifica la
    común clase loader como la forma correcta
    para lidiar con las bibliotecas compartidas. Así que para
    hacer un cortocircuito largo de la historia, poniendo
    las bibliotecas y otros marco de los Frascos
    domains/domain1/lib es todo lo que usted necesita
    hacer.

    lib/, no lib/ext

    La persona que me pide la pregunta tenía
    traté de hacer a las bibliotecas en
    domains/domain1/lib/ext que
    provocó un interesante
    ClassNotFoundError de core Java EE
    clases tales como
    javax.servlet.http.HttpServlet. La pesca
    Wai Chan se apresuró a explicar que
    domains/domain1/lib/ext es parte de
    -Djava.ext.dirs que hace que cualquiera de sus Frascos de ser considerado como una extensión de JDK
    lo que significa que la aplicación web de marcos colocados
    habrá cargado antes de
    webcontainer la implementación de las clases de
    ellos están más arriba en el cargador de clases
    delegación de la cadena.

    Intenta lo anterior con GlassFish v3?
    intentará glassfish3 asap pero aún no 🙂 blogs.sun.com/alexismp/entry/…
    Esto funciona con GlassFish v3/3.1 así. He puesto mi PGSQL conductor en glassfish/lib para mis últimos instalaciones y funciona sin necesidad de ninguna configuración adicional.

    OriginalEl autor Sebastien Lorber

  3. 3

    Glassfish tiene el propio cargador de Clase de la jerarquía, http://docs.oracle.com/cd/E19798-01/821-1752/beade/index.html

    Tengo el mismo problema en mi proyecto y, a continuación, puse todas mis bibliotecas de Terceros en el dominio de/domain1/lib y mi problema resuelto. En otra forma, mi problema fue resuelto por poner las bibliotecas en glassfish/lib.

    OriginalEl autor aashish

  4. 2

    En mi caso yo estaba usando Oracle Express Edition 11gR2 y Glassfish 3.1.2 y la ÚNICA manera de que funcione, en mi caso fue poner el ojdbc6 en:

    C:\Program Files\glassfish-3.1.2.2\glassfish\lib

    OriginalEl autor Sergio

  5. 0

    Intentar poner Su libs en $GF_HOME/glassfish/modules/.
    Es sucio, pero funciona.

    OriginalEl autor DimXenon

  6. 0
    1. Ir a su Glassfish doamin directorio.

    2. A continuación, vaya a la carpeta lib.

    3. Lugar en las bibliotecas hay.

    4. Reiniciar el servidor glassfish y ejecutar.

    (Ex) C:\glassfish3\glassfish\domains\domain1\lib

    OriginalEl autor Sangeeth

Dejar respuesta

Please enter your comment!
Please enter your name here