2010-12-01 11 views
5

Estoy desarrollando una aplicación java independiente que usa eclipselink. Está todo bien cuando ejecuto la aplicación desde eclipse IDE. Pero he exportado un archivo JAR ejecutable, y desde entonces no puedo hacer que eclipseLink funcione. he encontrado problema similar en el foro de la comunidad Eclipse here, pero aún no es demasiado práctico:eclipselink PersistenceUnitLoadingEception en JAR ejecutable

Por favor ayuda,

Mi excepción es la siguiente:

01 dec. 2010 22:47:31,199 INFO Configuration:97 - Iniciate database 
Exception in thread "main" java.lang.reflect.InvocationTargetException 
     at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
     at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source) 
     at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source) 
     at java.lang.reflect.Method.invoke(Unknown Source) 
     at org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader.main(JarRsrcLoa 
der.java:56) 
Caused by: Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.0.2.v 
20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingExcept 
ion 
Exception Description: An exception was thrown while searching for persistence a 
rchives with ClassLoader: [email protected] 
Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services 
- 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoad 
ingExceptionException Description: An exception was thrown while processing persistence.xml 
from URL: rsrc:../ 
Internal Exception: java.net.MalformedURLException 
     at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.ex 
ceptionSearchingForPersistenceResources(PersistenceUnitLoadingException.java:126 
) 
     at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa 
ctory(PersistenceProvider.java:133) 
     at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa 
ctory(PersistenceProvider.java:65) 
     at javax.persistence.Persistence.createEntityManagerFactory(Persistence. 
java:51) 
     at javax.persistence.Persistence.createEntityManagerFactory(Persistence. 
java:33) 
     at eu.agilelabs.pillAgent.db.dam.DataManagerImplJPA.(DataManagerIm 
plJPA.java:36) 
     at eu.agilelabs.pillAgent.db.dam.DataManagerImplJPA.getInstance(DataMana 
gerImplJPA.java:47) 
     at eu.agilelabs.configuration.Configuration.(Configuration.java:98 
) 
     at eu.agilelabs.configuration.Configuration.getInstance(Configuration.ja 
va:119) 
     at eu.agilelabs.pillAgent.core.Main.main(Main.java:15) 
     ... 5 more 
Caused by: Exception [EclipseLink-30004] (Eclipse Persistence Services - 2.0.2.v 
20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoadingExcept 
ion 
Exception Description: An exception was thrown while processing persistence.xml 
from URL: rsrc:../ 
Internal Exception: java.net.MalformedURLException 
     at org.eclipse.persistence.exceptions.PersistenceUnitLoadingException.ex 
ceptionProcessingPersistenceXML(PersistenceUnitLoadingException.java:117) 
     at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces 
sor.processPersistenceXML(PersistenceUnitProcessor.java:444) 
     at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces 
sor.processPersistenceArchive(PersistenceUnitProcessor.java:401) 
     at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces 
sor.getPersistenceUnits(PersistenceUnitProcessor.java:310) 
     at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe 
rsistenceUnitInfoInArchive(JPAInitializer.java:149) 
     at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe 
rsistenceUnitInfoInArchives(JPAInitializer.java:136) 
     at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.findPe 
rsistenceUnitInfo(JPAInitializer.java:125) 
     at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFa 
ctory(PersistenceProvider.java:98) 
     ... 13 more 
Caused by: java.net.MalformedURLException 
     at java.net.URL.(Unknown Source) 
     at java.net.URL.(Unknown Source) 
     at java.net.URL.(Unknown Source) 
     at com.sun.org.apache.xerces.internal.impl.XMLEntityManager.setupCurrent 
Entity(Unknown Source) 
     at com.sun.org.apache.xerces.internal.impl.XMLVersionDetector.determineD 
ocVersion(Unknown Source) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U 
nknown Source) 
     at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(U 
nknown Source) 
     at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(Unknown So 
urce) 
     at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(Un 
known Source) 
     at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.p 
arse(Unknown Source) 
     at org.eclipse.persistence.internal.jpa.deployment.PersistenceUnitProces 
sor.processPersistenceXML(PersistenceUnitProcessor.java:442) 
     ... 19 more 

creo que esta línea debe ser la clave:

Internal Exception: Exception [EclipseLink-30004] (Eclipse Persistence Services 
- 2.0.2.v20100323-r6872): org.eclipse.persistence.exceptions.PersistenceUnitLoad 
ingExceptionException Description: An exception was thrown while processing persistence.xml 
from URL: rsrc:../
+0

impar, ¿el error siempre ocurre? Por favor incluya su persistence.xml. ¿JVM y OS son los mismos que su Eclipse? ¿Cómo lo estás ejecutando? – James

+0

He logrado resolverlo. Cambié la forma en que eclipse exporta el archivo jar. Si extrae las bibliotecas necesarias en el contenedor, todo funciona bien. ¡Gracias de todos modos! – GaDo

+0

debe crear una respuesta que luego acepte. – MRalwasser

Respuesta

3

Tengo logró resolverlo. Cambié la forma en que eclipse exporta el archivo jar. Si extrae las bibliotecas necesarias en el contenedor, todo funciona bien. ¡Gracias de todos modos!

+0

¿Puede explicar con más detalle cómo lo corrigió? – Kris

+0

Lo puedo confirmar, seleccionando la opción "Extraer las bibliotecas necesarias en el JAR generado" en el cuadro de diálogo "Exportar archivo JAR ejecutable" resuelve el problema. Gracias. – joanlofe

0

Algunos información de fondo

Como el enlace que nos ha facilitado dice, EclipseLink no parece apoyar persistence.xml de carga cuando el frasco EclipseLink está incrustado en el tarro de su aplicación.

Según tengo entendido, Java estándar no personalizada no admite archivos ejecutables que cargan clases desde archivos jar incrustados. El jar ejecutable que crea Eclipse puede superar esa limitación agregando un cargador de clases personalizado (org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader) al jar de su aplicación. El cargador de clases personalizado aparentemente es donde EclipseLink se encuentra con este problema.

Dicho esto, en Eclipse Helios, me pareció más manejable "Copiar las bibliotecas necesarias en una subcarpeta junto al JAR generado" en lugar de "Extraer las bibliotecas necesarias en el JAR generado".

Elegir la opción de copia mantiene el frasco eclipselink intacto, a diferencia de Eclipse extrayendo los diversos archivos .class y abarrotando el frasco de la aplicación. Es cierto que su aplicación ya no se podrá distribuir como un único contenedor, pero desde el punto de vista de la capacidad de administración, esto parece ser mejor que la opción de extracción de bibliotecas.

0

Este problema se ha solucionado en EclipseLink 2.3.2 He actualizado y se fue

0

he encontrado la solución respectiva (es decir, si no está utilizando EclipseLink 2.3.2), como se ha mencionado por gado en Bug 364748 , la solución es añadir la siguiente línea en MANIFIEST.MF

Eclipse-BundleShape: dir 

Esto conduce al plug-in de ser exportados como directorio en lugar como archivo JAR, lo que hace persistence.xml accesible.

0

Estaba usando EclipseLink 2.3.2, con Eclipse Indigo, y seguía recibiendo el error.

Luego, como un tonto, me di cuenta de que estaba eligiendo "Paquetes necesarios bibliotecas en JAR generado" en lugar de "Extraer las bibliotecas necesarias en el JAR generado" trabaja.

No estoy seguro de cuál es la diferencia, aunque me he dado cuenta de que algunos de mis JAR solo funcionan cuando creo cuando uso "Paquete requerido ...", y otros solo funcionan cuando los creo con "Extracto requerido ... . ".

No estoy seguro de por qué es así. En última instancia, realmente no me importa, siempre y cuando el JAR resultante no tenga dependencias externas.

Por cierto, la otra opción que se propuso (la modificación del archivo de manifiesto JAR) no funcionó para mí. Extraje el manifext (jar xf MYJAR.jar META-INF/MANIFEST.MF), agregué Eclipse-BundleShape: dir, lo inyecté en el contenedor (jar umf META-INF/MANIFEST.MF MYJAR.jar) y verifiqué que el manifiesto había cambiado. Mismo error.

0

Haga clic derecho sobre el proyecto -> Propiedades - Path> Java Build -> Orden y exportación, y seleccionar las bibliotecas

Haga clic derecho sobre el proyecto -> Exportar ... -> archivo JAR Ejecutable -> Copiar bibliotecas requeridas en una subcarpeta junto al JAR generado Esto funcionó para mí.

Cuestiones relacionadas