2012-02-12 27 views
4

我需要用EclipseLink开发一个OSGi包,它应该连接到PostgreSQL,但是我浪费了一大堆时间,无法完成工作。我收到“javax.persistence.PersistenceException:EntityManager命名空间没有持久性提供程序”。如何使用EclipseLink使PostgreSQL与OSGi协同工作

基本上,我遵循我在网上找到的教程的步骤。我使用Eclipse靛蓝

Manifest file : 
Manifest-Version: 1.0 
Meta-Persistence: persistence.xml 
JPA-PersistenceUnits: rooms 
Bundle-ClassPath: ., META-INF/persistence.xml 
Bundle-ManifestVersion: 2 
Bundle-Name: PMSTestTask 
Bundle-SymbolicName: PMSTestTask 
Bundle-Version: 1.0.0.qualifier 
Bundle-Activator: pmstesttask.Activator 
Bundle-ActivationPolicy: lazy 
Bundle-RequiredExecutionEnvironment: JavaSE-1.6 
Import-Package: javax.persistence;version="2.0.3", org.osgi.framework;version="1.3.0", org.postgresql 
Require-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。而得到这个

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" 
+0

您是否尝试在没有标签的情况下运行?提供者应该由EclipseLink隐含地初始化。 – 2012-02-13 07:38:00

+0

是的,我已经尝试没有,但它只是没有工作 – 2012-02-13 17:15:02

+0

你使用什么版本的春分?我知道Equinox 3.7.0不适用于EclipseLink 2.3.x. – 2012-02-13 22:37:04

回答

1

既然你实例化EMF自己(而不是例如使用企业级OSGi得到EMF注入),您必须将EclipseLink的类添加到包的类路径,否则Java可以不实例化指定的<provider>类,可能会引发此错误消息。

参见LazyLoadingRCP例子,特别是类加载器笔记为org.eclipse.persistence.example.jpa.rcp.comics束,或束的混凝土MANIFEST.MF(所述的EclipseLink类都包含与Require-Bundle)。

+0

谢谢,我已经在Manifest中添加了Require-Bundle,但它没有帮助。我想我错误地配置了Eclipse。我确实在Eclipse Build Path中有所有需要的jar,但是我收到如下错误:!ENTRY org.eclipse.persistence.jpa 4 0 2012-02-13 21:10:57.675 !MESSAGE FrameworkEvent错误 !STACK 0 org .osgi.framework.BundleException:捆绑包“org.eclipse.persistence.jpa_2.3.0.v20110604-r9504 [27]”无法解析。原因:缺少约束:Require-Bundle:org.eclipse.persistence.core; bundle-version =“2.3.0” – 2012-02-13 17:17:10

+0

错误消息非常明确,捆绑包org.eclipse.persistence.jpa无法启动,因为它需要bundle类org.eclipse.persistence.core,它似乎在您的类路径中缺失。 – Heri 2012-02-13 18:55:46

+0

是的,很明显,但persistence.core.jar也在类路径中 – 2012-02-14 05:08:42

相关问题