2010-12-01 6 views
5

Ich entwickle eine eigenständige Java-Anwendung, die Eclipselink verwendet. Es ist alles in Ordnung, wenn ich die App von Eclipse IDE ausführen. Aber ich habe eine ausführbare JAR-Datei exportiert und seitdem kann ich EclipseLink nicht mehr machen. Ich habe ähnliches Problem im Forum Eclipse-Community gefunden here, aber noch nicht zu praktisch:eclipselink PersistenceUnitLoadingEception in ausführbare Datei JAR

Bitte helfen,

Meine Ausnahme ist folgende:

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 

denke ich, diese Linie muss der Schlüssel sein:

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

ungerade, tritt der Fehler immer auf? Bitte geben Sie Ihre persistence.xml ein. Sind die JVM und das Betriebssystem identisch mit denen von Eclipse? Wie läuft es dir? – James

+0

Ich habe es geschafft, es zu lösen. Ich habe die Art geändert, wie Eclipse die JAR-Datei exportiert. Wenn es die benötigten Bibliotheken in das Glas entnimmt, funktioniert alles super. Trotzdem danke! – GaDo

+0

sollten Sie eine Antwort erstellen, die Sie anschließend akzeptieren. – MRalwasser

Antwort

3

Ich habe schaffte es, es zu lösen. Ich habe die Art geändert, wie Eclipse die JAR-Datei exportiert. Wenn es die benötigten Bibliotheken in das Glas entnimmt, funktioniert alles super. Trotzdem danke!

+0

Können Sie bitte genauer erklären, wie Sie es behoben haben – Kris

+0

Ich kann es bestätigen, indem ich die Option "Extrahiere benötigte Bibliotheken in generierte JAR" im "Runnable JAR file export" -Dialog löst das Problem. Vielen Dank. – joanlofe

0

Einige Hintergrundinformationen

Als Link sagt zur Verfügung gestellt haben, Eclipse scheint nicht Laden persistence.xml wenn die Eclipse Glas in Ihrer App Glas eingebettet ist, zu unterstützen.

Wie ich es verstehe, unterstützt nicht standardisiertes Java keine Runnable-Jars, die Klassen aus eingebetteten Jars laden. Mit dem in Eclipse erstellten Runnable-Jar können Sie diese Einschränkung überwinden, indem Sie dem Jar Ihrer App einen benutzerdefinierten Classloader (org.eclipse.jdt.internal.jarinjarloader.JarRsrcLoader) hinzufügen. Der benutzerdefinierte Classloader ist offenbar der Ort, an dem EclipseLink auf dieses Problem stößt.

Mit diesem gesagt, in Eclipse Helios, ich habe es mehr verwaltbar gefunden "Kopieren der erforderlichen Bibliotheken in einen Unterordner neben dem generierten JAR" statt "Extrahieren erforderliche Bibliotheken in generierte JAR".

Wenn Sie die Option zum Kopieren auswählen, bleibt das Eclipselink-Jar intakt, im Gegensatz zu Eclipse, das die verschiedenen .class-Dateien extrahiert und die JAR-Datei Ihrer Anwendung überlagert. Richtig, Ihre App wird nicht länger als ein einzelnes JAR verteilbar sein, aber vom Standpunkt der Verwaltbarkeit scheint dies besser zu sein als die Option zum Extrahieren von Bibliotheken.

0

Dieses Problem wird in Eclipse wurde 2.3.2 Fest Ich habe ein Upgrade und es ging weg

0

fand ich die jeweilige Lösung (dh, wenn Sie nicht Eclipse 2.3.2 verwenden), wie in Bug 364748 von Gado erwähnt die Lösung ist die folgende Zeile in MANIFEST.MF

Eclipse-BundleShape: dir 

Dies führt zu dem Plug-in wird exportiert als Verzeichnis und nicht als JAR-Datei hinzufügen, die persistence.xml zugänglich macht.

0

Ich verwendete EclipseLink 2.3.2, mit Eclipse Indigo, und bekam immer noch den Fehler.

Dann, wie ein Dummkopf, erkannte ich, dass ich "Package erforderliche Bibliotheken in generierte JAR" statt "Extrahieren benötigte Bibliotheken in generierte JAR" funktioniert.

Nicht sicher, was der Unterschied ist, obwohl ich festgestellt habe, dass einige meiner JARs nur funktionieren, wenn ich "Package required ..." verwende und andere nur funktionieren, wenn ich sie mit "Extract required" erstellt habe. . "

Nicht sicher, warum das ist. Letztendlich ist es mir egal, solange das resultierende JAR keine externen Abhängigkeiten hat.

BTW, die andere Option, die vorgeschlagen wurde (Änderung der JAR-Manifest-Datei) funktionierte nicht für mich. Ich extrahierte das Manifest (jar xf MYJAR.jar META-INF/MANIFEST.MF), fügte Eclipse-BundleShape: dir hinzu, injizierte es in das Glas (jar umf META-INF/MANIFEST.MF MYJAR.jar) und verifizierte, dass das Manifest geändert wurde. Derselbe Fehler.

0

Direkt am Projekt klicken -> Eigenschaften -> Java Build Path -> Auftrag und Export, und wählen Sie die Bibliotheken

Direkt am Projekt klicken -> Exportieren ... -> Runnable JAR-Datei -> Kopieren benötigte Bibliotheken in einen Unterordner neben dem generierten JAR Das funktionierte für mich.

Verwandte Themen