2014-09-22 68 views
0

我想在OSGI环境(Apache ServiceMix)中使用DataNucleus实现JPA。我遵循这里提到的指南 - http://www.datanucleus.org/products/datanucleus/jpa/osgi.html(在“JPA和OSGi”的名称下的部分) 根据这里的文档,我使用DataNucleus JPA jar。安装MVN:org.datanucleus/DataNucleus将-JPA/2.1.7使用DataNucleus 4.0.0实现JPA的OSGI包版本

的OSGi:启动bundleId

由于这个罐子出口持久性提供

OSGi的 - 所以我如下部署在ServiceMix的这个jar ,我已经正确地将persistence.xml文件中的提供程序更改为org.datanucleus.jpa.PersistenceProviderImpl(由上述包导出),而不是通常的org.datanucleus.api.jpa.PersistenceProviderImpl,它位于正常的J2EE JPA APP。

我也有DataNucleus将核心捆绑在我的ServiceMix,这是使用以下我的ServiceMix安装在运行 -

的OSGi:安装MVN:org.datanucleus/DataNucleus将核心/ 4.0.0释放

的OSGi:启动bundleId

请注意:我DONOT有我的ServiceMix的运行DataNucleus将-API JPA束,按照该文档中,DataNucleus将-JPA捆绑将导出必要的类,因此DataNucleus将-API JPA捆绑将不是必需的。

在运行时,我得到所致以下错误:抛出java.lang.ClassNotFoundException:org.datanucleus.PersistenceConfiguration不org.datanucleus.jpa发现[261]

我已经注意到的是,DataNucleus将核心版本4.0.0-release没有这个类,但是这个类存在于所有以前的版本(3.2.15)中。

我无法将DataNucleus Core Version 3.2.XX部署到我的ServiceMix上,因为我有其他使用DataNucleus Core 4.0.0-release的软件包,并且由于Singleton创建问题而无法使用这两个软件包。

请让我知道,如果你需要我发布我的代码,我会这样做。 请帮助

干杯, 作者Abhijit

+1

当你说你想使用DataNucleus v4.x时,为什么要使用“datanucleus-jpa”v2.1.x? v2.x很久没有被支持了。 – 2014-09-22 12:28:47

+0

解决方法是加载META-INF/services/javax.persistence.spi.PersistenceProvider中的实现类,以便将持久性提供程序导出为OSGi服务。 DataNucleus JPA jar是最新版本2.1.7的版本。 – 2014-09-22 12:32:58

+0

不,它不是“最新版本”。这是一个古老的版本。 “datanucleus-api-jpa”是当前支持的神器,如阅读文档 – 2014-09-22 12:33:53

回答

0

综上所述,您使用的不正确/无效的罐子。在DataNucleus的v2中删除了“datanucleus-jpa”。所有最近的版本使用“datanucleus-api-jpa”(或者如果使用JDO,则是“datanucleus-api-jdo”)。对于4.0.x的DataNucleus zip文件的简单下载将非常清楚地显示出来。