在OSGI中使用EclipseLink JPA(卡拉夫)

在OSGI中使用EclipseLink JPA(卡拉夫),jpa,osgi,eclipselink,karaf,eclipse-gemini,Jpa,Osgi,Eclipselink,Karaf,Eclipse Gemini,我正在使用EclipseLink作为我的JPA实现(在KARAF中)- install -s mvn:org.eclipse.persistence/org.eclipse.persistence.antlr/2.5.0 install -s mvn:org.eclipse.persistence/org.eclipse.persistence.asm/2.5.0 install -s mvn:org.eclipse.persistence/org.eclipse.persistence.cor

我正在使用EclipseLink作为我的JPA实现(在KARAF中)-

install -s mvn:org.eclipse.persistence/org.eclipse.persistence.antlr/2.5.0
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.asm/2.5.0
install -s mvn:org.eclipse.persistence/org.eclipse.persistence.core/2.5.0
install -s mvn:org.apache.geronimo.specs/geronimo-jpa_2.0_spec/1.1
install -s mvn:org.osgi/org.osgi.compendium/4.2.0
install -s mvn:org.osgi/org.osgi.enterprise/4.2.0
org.eclipse.gemini.dbaccess.derby_1.0.0.M1-incubation.jar
org.eclipse.gemini.jpa.weaving_1.0.0.RC1.jar
org.eclipse.gemini.jpa_1.0.0.RC1.jar
我的
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="resource" transaction-type="RESOURCE_LOCAL">
    <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
        <class>myPkg.entity.Resource</class>
        <properties>
            <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.EmbeddedDriver" 
                /> <property name="javax.persistence.jdbc.url" value="jdbc:derby:DB;create=true" 
                />

            <!-- <property name="javax.persistence.jdbc.driver" value="org.apache.derby.jdbc.ClientDriver" />
            <property name="javax.persistence.jdbc.url" value="jdbc:derby://localhost:1527/D:\DB;create=true" /> -->


            <property name="javax.persistence.jdbc.user" value="test" />
            <property name="javax.persistence.jdbc.password" value="test" />
            <property name="eclipselink.logging.level" value="OFF" />

            <!-- EclipseLink should create the database schema automatically -->
            <property name="eclipselink.ddl-generation" value="create-tables" />
            <property name="eclipselink.ddl-generation.output-mode"
                value="database" />
            <property name="connection.autocommit" value="false" />
            <property name="eclipselink.persistence-context.flush-mode" value="commit" /> 
            <!-- <property name="eclipselink.allow-zero-id" value="true"/> -->
        </properties>
    </persistence-unit>
</persistence>
我的应用程序出现以下错误:-

Reason: Missing Constraint: Import-Package: org.apache.derby.client.am; version="0.0.0"
Could not find data source factory in registry: org.apache.derby.jdbc.ClientDriver

我不熟悉在OSGI中使用eclipseLink,这里缺少什么?

以下是org.eclipse.gemini.dbaccess.derby_1.0.0.M1-cultation.jar清单的内容:

二进制文件上仍有两个未解析的依赖项:

  • org.apache.derby.client.am
  • org.apache.derby.jdbc
两者都缺少版本号,这就是消息状态为0.0.0的原因

这两个包是derbyclient.jar文件的一部分,在Derby二进制文件中作为OSGi包提供。问题是这个包的Export-Package子句只公开org.apache.derby.jdbc包


一个简单的解决方案是:它公开两个必需的包。请注意,它还依赖于。首先,请确保已使用Karaf安装了regions功能,因为如果您使用的是<4版本(尚未发布),则默认情况下会安装Apache Aries Blueprint实现。因此,如果你想坚持双子座,这将干扰。因此,请确保已安装区域。其次,我认为安装eclipse链接包有一个特性。可能需要查看一下,以使正确的捆绑包对齐

如果你坚持白羊座的蓝图,那就更简单了。只需安装以下功能:

feature:install jpa jta jndi 

如果您想使用Derby,可能还需要安装jdbc特性。这将为您提供一组用于连接数据库和/或创建数据源的命令。如果使用datasource命令,就可以为derby数据库创建一个datasource,如果需要,它将安装正确的工作derby客户端JAR

ApacheKaraf4.0.0已经发布,这个版本的karaf提供了eclipseLink支持

feature:install eclipselink

因此,使用eclipseLink时不需要使用外部适配器

,那么我该怎么做呢。。?我的应用程序没有运行下载derby归档并在容器中部署derbyclient.jar文件。它将提供JDBC组件作为导出包(JAR MANIFEST.MF中的Export package子句)。这将解决您的错误。然后,您可能会面临org.apache.derby.client.am包的依赖性问题,因为它在类路径中可用,但在Export-package子句中没有公开。在这种情况下,您可能需要重新打包捆绑包,但这是可以使用的。准备使用:它公开了两个必需的包。哪个存储库具有eclipseLink功能?功能:安装命令区分大小写-功能:安装eclipseLink
feature:install eclipselink