Eclipselink:OSGi捆绑,继承和编织

时间:2016-05-17 07:20:17

标签: java jpa osgi eclipselink

我有三个捆绑包。在第一个包中我有persistence.xml。我有两个类:A和B. A扩展B.类A是@Entity,类B是@MappedSuperclass.Both类列在persistence.xml中。将导出2& dn和3&#rd包的包。

如果A类和B类在同一个包中 - 一切都好。但是,当第二个包中的A类和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"/>

我没有得到任何例外,但是B类的所有字段都被忽略了。如何解决这个问题?

1 个答案:

答案 0 :(得分:0)

问题出在第一个捆绑中。它没有从类B的bundle中导入包,因为它的代码对类B一无所知。所以我不得不在第一个包osgi指令导入包--B类包中添加清单文件。 EclipseLink中的问题是,即使记录级别为All,它也没有抛出任何关于未找到类的例外或类似的事情。