Eclipselink:OSGi 捆绑包、继承和编织
Eclipselink: OSGi bundles, inheritance and weaving
我有三个包裹。在第一个捆绑包中,我有 persistence.xml。我有两个 classes:A 和 B。A 扩展 B。Class A 是 @Entity,Class B 是 @MappedSuperclass.Both classes 已列出在 persistence.xml。导出 2'dn 和 3'rd 包的包。
如果 class A 和 class B 在同一个包中 - 一切正常。但是,当第二个捆绑包中的 class A 和第三个捆绑包中的 class B 时,我得到:
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: org.eclipse.gemini.jpa.classloader.CompositeClassLoader@20c0a64d
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)
当我设置在persistence.xml
<property name="eclipselink.weaving" value="false"/>
我没有收到任何异常,但是 class B 中的所有字段都被忽略了。如何解决这个问题?
问题出在第一个包中。它没有从带有 class B 的包中导入包,因为它的代码对 class B 一无所知。所以我不得不在第一个 bundle osgi 指令导入包的清单文件中添加 - classB包。 EclipseLink 中的问题是它没有抛出任何关于 class not found 或类似的异常,即使日志记录级别为 All.
我有三个包裹。在第一个捆绑包中,我有 persistence.xml。我有两个 classes:A 和 B。A 扩展 B。Class A 是 @Entity,Class B 是 @MappedSuperclass.Both classes 已列出在 persistence.xml。导出 2'dn 和 3'rd 包的包。
如果 class A 和 class B 在同一个包中 - 一切正常。但是,当第二个捆绑包中的 class A 和第三个捆绑包中的 class B 时,我得到:
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: org.eclipse.gemini.jpa.classloader.CompositeClassLoader@20c0a64d
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)
当我设置在persistence.xml
<property name="eclipselink.weaving" value="false"/>
我没有收到任何异常,但是 class B 中的所有字段都被忽略了。如何解决这个问题?
问题出在第一个包中。它没有从带有 class B 的包中导入包,因为它的代码对 class B 一无所知。所以我不得不在第一个 bundle osgi 指令导入包的清单文件中添加 - classB包。 EclipseLink 中的问题是它没有抛出任何关于 class not found 或类似的异常,即使日志记录级别为 All.