【问题标题】:EclipseLink in OSGI Error No Persistence provider for EntityManager namedOSGI 中的 EclipseLink 错误 No Persistence provider for EntityManager named
【发布时间】:2014-09-30 01:00:39
【问题描述】:

我有一个使用 Gemini JPA (v1.2.0) 和 EclipseLink (v2.5.2) 的 RCP 3.7 应用程序 (Equinox OSGI)。我无法在 Manifest.MF 中获得正确的 Require-Bundle 组合来读取 persistence.xml。有没有人可以分享一个有效的 MANIFEST.MF?

我发现的所有其他问题都涉及旧版本的 EclipseLink 和不在发行版中的 Eclipselink.jar。我在 Gemini JPA 上阅读了文档,但没有找到指定的文档。

根据我也有的其他帖子

  • 在 startLevel = 3 处将 org.eclipse.gemini.jpa 添加到 autoStart=true
  • 在默认情况下将我的带有 persistence.xml 的包添加到 autoStart=true
  • 添加了 VM 参数 -DREFRESH_BUNDLES=false

感谢您花时间阅读我的问题!

MANIFEST.MF

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Meta-Persistence: META-INF/persistence.xml
Bundle-Blueprint: OSGI-INF/blueprint/*.xml
Bundle-Name: Local
Bundle-SymbolicName: com.vogelware.simple.local
Bundle-Version: 0.1.0.qualifier
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Import-Package: com.vogelware.simple.model,
 com.vogelware.simple.service,
 javax.persistence;version="2.1.0",
 org.osgi.service.component;version="1.1.0"
Require-Bundle: org.eclipse.gemini.jpa;bundle-version="1.2.0",
 org.eclipse.persistence.antlr;bundle-version="3.2.0",
 org.eclipse.persistence.asm;bundle-version="3.3.1",
 org.eclipse.persistence.core;bundle-version="2.5.2",
 org.eclipse.persistence.jpa;bundle-version="2.5.2",
 org.apache.derby;bundle-version="10.8.2"
Service-Component: OSGI-INF/PersonEntityService-local.xml
Bundle-ActivationPolicy: lazy

persistence.xml

<?xml version="1.0" encoding="UTF-8" ?>
<persistence version="1.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_1_0.xsd"> 

    <persistence-unit name="person" transaction-type="RESOURCE_LOCAL">
        <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>

        <class>com.vogelware.simple.Person</class>

        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby:D:\dev\projects\EASA-DB\motordb" />
        </properties>
    </persistence-unit>
</persistence> 

【问题讨论】:

    标签: jpa osgi eclipselink rcp


    【解决方案1】:

    他们有几个需要解决的问题。

    1. 没有 DB 提供程序 - 将 Gemini DBAccess 添加到项目中
    2. 加载了错误的 PersistenceProviderResolver - 加载的是静态内部类而不是 OSGiProviderResolver。由下面的#4 解决。
    3. DS 和 JPA 中的循环导致多个异常 - 添加了 VM 参数 -DREFRESH_BUNDLES=false
    4. 需要将捆绑包配置为 autoStart="true" startLevel="3"
      • javax.persistence
      • org.apache.derby
      • org.eclipse.gemini.dbaccess.derby
      • org.eclipse.gemini.dbutil
      • org.eclipse.gemini.jpa
      • org.eclipse.gemini.blueprint(如果使用)

    【讨论】:

      【解决方案2】:

      我想更正几点:

      1. 没有org.eclipse.gemini.dbutil,而是有org.eclipse.gemini.dbaccess.util。

      2. Eclipse Gemini JPA 的最新版本是 1.2.0.M1,所以 org.eclipse.gemini.jpa;bundle-version="1.2.0" 不适合我。

      这个 MANIFEST.MF 对我有用:

      Manifest-Version: 1.0
      Bundle-ManifestVersion: 2
      Bundle-SymbolicName: org.openhab.binding.mybinding;singleton:=true
      Bundle-Name: org.openhab.binding.mybinding
      Bundle-Version: 1.0.0.qualifier
      Bundle-RequiredExecutionEnvironment: JavaSE-1.8
      Meta-Persistence: META-INF/persistence.xml
      Import-Package: com.fasterxml.jackson.annotation,
       com.fasterxml.jackson.core,
       com.fasterxml.jackson.databind,
       javax.persistence,
       javax.servlet.http,
       javax.ws.rs.client,
       javax.ws.rs.core,
       org.eclipse.jetty.io,
       org.eclipse.jetty.server,
       org.eclipse.jetty.server.handler,
       org.eclipse.jetty.servlet,
       org.eclipse.jetty.util.component,
       org.eclipse.jetty.websocket.api,
       org.eclipse.jetty.websocket.api.annotations,
       org.eclipse.jetty.websocket.client,
       org.eclipse.jetty.websocket.common,
       org.eclipse.jetty.websocket.servlet,
       org.eclipse.paho.client.mqttv3,
       org.eclipse.paho.client.mqttv3.persist,
       org.eclipse.smarthome.config.core,
       org.eclipse.smarthome.core.library.types,
       org.eclipse.smarthome.core.thing,
       org.eclipse.smarthome.core.thing.binding,
       org.eclipse.smarthome.core.types,
       org.glassfish.hk2.osgiresourcelocator,
       org.glassfish.jersey,
       org.glassfish.jersey.client,
       org.glassfish.jersey.jackson,
       org.slf4j,
       org.testng,
       org.testng.annotations,
       com.google.common.collect
      Require-Bundle: org.eclipse.gemini.jpa,
       org.eclipse.persistence.antlr;bundle-version="3.2.0",
       org.eclipse.persistence.asm;bundle-version="3.3.1",
       org.eclipse.persistence.core;bundle-version="2.5.2",
       org.eclipse.persistence.jpa;bundle-version="2.5.2",
       org.apache.derby;bundle-version="10.8.2"
      Service-Component: OSGI-INF/*.xml
      

      这是我的persistence.xml:

          <persistence-unit name="supervisor-state" transaction-type="RESOURCE_LOCAL">
              <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
      
              <class>com.gadgetkeeper.hub.supervisor.model.ActivationInfo</class>
              <class>com.gadgetkeeper.hub.supervisor.model.SupervisorState</class>
              <class>com.gadgetkeeper.hub.supervisor.model.Version</class>
      
              <properties>
                  <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver"/>
                  <property name="javax.persistence.jdbc.url"
                            value="jdbc:derby:db/supervisordb;create=true"/>
                  <property name="javax.persistence.jdbc.user" value="supervisor"/>
                  <property name="javax.persistence.jdbc.password" value="supervisor"/>
      
                  <!-- EclipseLink should create the database schema automatically -->
                  <property name="eclipselink.ddl-generation" value="create-tables"/>
                  <property name="eclipselink.ddl-generation.output-mode"
                            value="database"/>
              </properties>
          </persistence-unit>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2023-02-26
        • 2016-01-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多