我需要使用EclipseLink開發(fā)一個OSGi包,它應該連接到PostgreSQL,但是我浪費了很多時間并且無法使其工作.我收到這個“javax.persistence.PersistenceException:沒有為EntityManager命名的房間的持久性提供程序”.
基本上,我按照我在網上找到的教程的步驟.我使用Eclipse Indigo
Manifest file : Manifest-Version: 1.0Meta-Persistence: persistence.xmlJPA-PersistenceUnits: roomsBundle-ClassPath: ., META-INF/persistence.xmlBundle-ManifestVersion: 2Bundle-Name: PMSTestTaskBundle-SymbolicName: PMSTestTaskBundle-Version: 1.0.0.qualifierBundle-Activator: pmstesttask.ActivatorBundle-ActivationPolicy: lazyBundle-RequiredExecutionEnvironment: JavaSE-1.6Import-Package: javax.persistence;version="2.0.3", org.osgi.framework;version="1.3.0", org.postgresqlRequire-Bundle: org.eclipse.persistence.jpa;bundle-version="2.1.0", org.eclipse.persistence.jpa.osgi;bundle-version="2.3.0"
persistence.xml中
<?xml version="1.0" encoding="UTF-8" ?> <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" version="2.0" xmlns="http://java.sun.com/xml/ns/persistence"> <persistence-unit name="rooms" transaction-type="RESOURCE_LOCAL"> <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider> <class>test_task.domain.Room</class> <properties> <property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" /> <property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/Hotel_test_task" /> <property name="javax.persistence.jdbc.user" value="" /> <property name="javax.persistence.jdbc.password" value="" /> </properties> </persistence-unit> </persistence>
Activator.java
EntityManagerFactory emf = Persistence .createEntityManagerFactory("rooms"); EntityManager em = emf.createEntityManager();
更新. 0
添加了必需的bundle to manifest.得到了這個
org.osgi.framework.BundleException: The bundle "org.eclipse.persistence.jpa.osgi_2.3.0.v20110604-r9504 [26]" could not be resolved. Reason: Missing Constraint: Require-Bundle: org.eclipse.persistence.core; bundle-version="2.3.0"
解決方法:
由于您自己實例化EMF(并且不使用例如Enterprise OSGi來注入EMF),您必須將EclipseLink類添加到bundle的類路徑中,否則Java無法實例化指定的< provider>類,可能會導致此錯誤消息.
請參閱LazyLoadingRCP示例,尤其是org.eclipse.persistence.example.jpa.rcp.comics包的類加載器說明,或該包的具體MANIFEST.MF(Eclipse鏈接包含在Require-Bundle中).
來源:https://www.icode9.com/content-2-312351.html