Ich habe drei Bündel. Im ersten Paket habe ich persistence.xml. Und ich habe zwei Klassen: A und B. A erweitert B. Klasse A ist @Entity, Klasse B ist @ MappedSuperclass.Both Klassen sind in persistence.xml aufgeführt. Pakete der 2'dn und 3'd Bundles werden exportiert.Eclipselink: OSGi Bündel, Vererbung und Weben
Wenn Klasse A und Klasse B im selben Paket sind - alles in Ordnung. Wenn jedoch der Klasse A in der zweiten Bündel und der Klasse B, die das dritte Paket ist erhalte ich:
WARNING: EMFProxy invocation on method createEntityManager failed: Exception: Exception [EclipseLink-30005] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.PersistenceUnitLoadingException
Exception Description: An exception was thrown while searching for persistence archives with ClassLoader: [email protected]
Internal Exception: javax.persistence.PersistenceException: Exception [EclipseLink-28018] (Eclipse Persistence Services - 2.6.3.v20160428-59c81c5): org.eclipse.persistence.exceptions.EntityManagerSetupException
Exception Description: Predeployment of PersistenceUnit [myPersistenceUnit] failed.
Internal Exception: java.lang.NullPointerException
java.lang.NullPointerException: null
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.createClassDetails(TransformerFactory.java:270)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.addClassDetailsForMappedSuperClasses(TransformerFactory.java:124)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.buildClassDetailsAndModifyProject(TransformerFactory.java:180)
at org.eclipse.persistence.internal.jpa.weaving.TransformerFactory.createTransformerAndModifyProject(TransformerFactory.java:84)
at org.eclipse.persistence.internal.jpa.EntityManagerSetupImpl.predeploy(EntityManagerSetupImpl.java:1972)
at org.eclipse.persistence.internal.jpa.deployment.JPAInitializer.callPredeploy(JPAInitializer.java:100)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactoryImpl(PersistenceProvider.java:104)
at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:188)
at org.eclipse.gemini.jpa.ProviderWrapper.createEntityManagerFactory(ProviderWrapper.java:128)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.createEMF(EMFServiceProxyHandler.java:151)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.syncGetEMFAndSetIfAbsent(EMFServiceProxyHandler.java:127)
at org.eclipse.gemini.jpa.proxy.EMFServiceProxyHandler.invoke(EMFServiceProxyHandler.java:73)
at com.sun.proxy.$Proxy8.createEntityManager(Unknown Source)
Als ich in persistence.xml gesetzt
<property name="eclipselink.weaving" value="false"/>
Ich habe keine Ausnahmen, aber Alle Felder der Klasse B werden ignoriert. Wie man dieses Problem löst?
Setzen Sie die EclipseLink-Protokollierung auf den Feinsten oder alle und überprüfen Sie die Protokolle, während EclipseLink während der Bereitstellung jede Klasse lädt, um zu sehen, ob alle Klassen übernommen werden. Es sollte dann Warnungen oder Fehler anzeigen, die verhindern könnten, dass das "B" geladen wird. – Chris
@Chris Vielen Dank für Ihre Zeit. Es hat nicht geholfen, aber es hat einen Hinweis gegeben - ich habe bemerkt, dass irgendwelche Klassen von einem des Bündels ignoriert werden und schließlich den Grund herausgefunden haben. Siehe meine Antwort. –
@Chris By the way, ist die irgendeine Möglichkeit machen einige Maven-Bundle persistence.xml Klassen lesen und fehlende Pakete zu manifes hinzufügen? Oder andere gute Lösungen? –