OSGi+;JPA(postgresql)
我试图在OSGi中使用JPA,但遇到了以下例外:OSGi+;JPA(postgresql),postgresql,jpa,osgi,eclipselink,Postgresql,Jpa,Osgi,Eclipselink,我试图在OSGi中使用JPA,但遇到了以下例外: javax.persistence.PersistenceException: No Persistence provider for EntityManager named test META-INF中有简单的实体类文件“persistence.xml”: <?xml version="1.0" encoding="UTF-8"?> <persistence version="2.0" xmlns="http://jav
javax.persistence.PersistenceException: No Persistence provider for EntityManager named test
META-INF中有简单的实体类文件“persistence.xml”:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.0" xmlns="http://java.sun.com/xml/ns/persistence" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/persistence http://java.sun.com/xml/ns/persistence/persistence_2_0.xsd">
<persistence-unit name="test" transaction-type="RESOURCE_LOCAL">
<provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
<class>org.test.Room</class>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/test"/>
<property name="javax.persistence.jdbc.password" value="12345"/>
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver"/>
<property name="javax.persistence.jdbc.user" value="postgres"/>
</properties>
</persistence-unit>
</persistence>
Manifest.mf:
Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Test
Bundle-SymbolicName: org.test
Bundle-Version: 1.0.0.qualifier
Bundle-Activator: org.test.Activator
Import-Package: javax.persistence;version="2.0.3",
org.osgi.framework;version="1.3.0",
org.postgresql;version="8.3.604"
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
和错误:
org.osgi.framework.BundleException:中的异常
bundle org.test的org.test.Activator.start()。在
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:734)
在
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
在
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
在
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
在
org.eclipse.osgi.framework.internal.core.framework.resumeBundle(framework.java:1131)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.resumeBundles(startevelmanager.java:559)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.resumeBundles(startevelmanager.java:544)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.incFWSL(startevelmanager.java:457)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.dosetstartevel(startevelmanager.java:243)
在
org.eclipse.osgi.framework.internal.core.startEvelManager.dispatchEvent(startEvelManager.java:438)
在
org.eclipse.osgi.framework.internal.core.startEvelManager.dispatchEvent(startEvelManager.java:1)
在
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
在
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
原因:javax.persistence.PersistenceException:无持久性
名为测试的EntityManager的提供程序位于
persistence.persistence.createEntityManagerFactory(未知
来源)在
persistence.persistence.createEntityManagerFactory(未知
org.test.Activator.start(Activator.java:23)的
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
位于java.security.AccessController.doPrivileged(本机方法)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
... 12更多根异常:
javax.persistence.PersistenceException:没有名为test的EntityManager的持久性提供程序
persistence.persistence.createEntityManagerFactory(未知
来源)在
persistence.persistence.createEntityManagerFactory(未知
org.test.Activator.start(Activator.java:23)的
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:711)
位于java.security.AccessController.doPrivileged(本机方法)
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:702)
在
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:683)
在
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:381)
在
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:389)
在
org.eclipse.osgi.framework.internal.core.framework.resumeBundle(framework.java:1131)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.resumeBundles(startevelmanager.java:559)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.resumeBundles(startevelmanager.java:544)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.incFWSL(startevelmanager.java:457)
在
org.eclipse.osgi.framework.internal.core.startevelmanager.dosetstartevel(startevelmanager.java:243)
在
org.eclipse.osgi.framework.internal.core.startEvelManager.dispatchEvent(startEvelManager.java:438)
在
org.eclipse.osgi.framework.internal.core.startEvelManager.dispatchEvent(startEvelManager.java:1)
在
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
在
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:340)
xml在一个简单的java项目中正常工作,但在OSGi插件中我遇到了这个问题。怎么了?您需要将persistence.xml路径添加为MANIFEST.MF头,如下所示:
Meta-Persistence: META-INF/persistence.xml
尽管对于EclipseLink,可能需要以下标题(标题值是以逗号分隔的PU名称列表):
在您的清单中看不到您在
persistence.xml
TryDynamicImport-Package:org.eclipse.*.
中提到的持久性提供程序类的导入谢谢您的回答,但我仍然有这个错误good stuff=)OSGi是非常详细的,企业规范中有很多关于JPA的信息,您可能会发现这些信息非常有用
Meta-Persistence: META-INF/persistence.xml
JPA-PersistenceUnits: test