Java OSGi中的OpenJPA未找到MySQL JDBC连接器捆绑包

Java OSGi中的OpenJPA未找到MySQL JDBC连接器捆绑包,java,jdbc,osgi,openjpa,aries,Java,Jdbc,Osgi,Openjpa,Aries,我目前正在Felix(v4.0.3)上进行一个OSGi项目。我需要使用JPA,所以我已经安装了ApacheAries JPA包。我还安装了OpenJPA,我需要它使用MySQL连接器捆绑包连接到MySQL数据库。不幸的是,它不起作用,OpenJPA说它找不到MySQL JDBC类,我也不知道什么坏了,也许我做错了什么。我将在下面解释我安装了什么,以及persistence.xml文件和我得到的实际异常 以下是我安装的Apache Aries捆绑包列表: org.apache.aries.jpa.

我目前正在Felix(v4.0.3)上进行一个OSGi项目。我需要使用JPA,所以我已经安装了ApacheAries JPA包。我还安装了OpenJPA,我需要它使用MySQL连接器捆绑包连接到MySQL数据库。不幸的是,它不起作用,OpenJPA说它找不到MySQL JDBC类,我也不知道什么坏了,也许我做错了什么。我将在下面解释我安装了什么,以及persistence.xml文件和我得到的实际异常

以下是我安装的Apache Aries捆绑包列表:

  • org.apache.aries.jpa.api-0.3.jar
  • org.apache.aries.jpa.container.context-0.3.jar
  • org.apache.aries.jpa.container-0.3.jar
  • org.apache.aries.util-0.4.jar
  • 然后我安装了这些ApacheAries JPA包的依赖项。我从Springsource下载了它们:

  • com.springsource.javax.transaction-1.1.0.jar
  • com.springsource.org.apache.log4j-1.2.16.jar
  • com.springsource.slf4j.api-1.6.1.jar
  • com.springsource.slf4j.log4j-1.6.1.jar
  • javax.persistence_2.0.4.v201112161009.jar(如果有问题,这一个来自EclipseLink)
  • 我还安装了OpenJPA及其所有依赖项。我在apache-openjpa-2.2.0下载文件夹的lib文件夹中找到了2到5个bundle(commons-*)。我下载了Serp,因为在lib文件夹中找到的jar不是OSGi包。最后,我在Springsource中找到了最后两个bundle(#7和#8):

  • openjpa-2.2.0.jar
  • commons-collections-3.2.1.jar
  • commons-dbcp-1.4.jar
  • commons-lang-2.4.jar
  • commons-pool-1.5.4.jar
  • org.apache.servicemix.bundles.serp-1.13.1_4.jar
  • com.springsource.javax.servlet-2.5.0.jar
  • com.springsource.org.objectweb.asm-3.2.0.jar
  • 一旦我最终安装了OpenJPA,我仍然需要MySQL JDBC驱动程序包,我还从Springsource存储库及其commons日志依赖项中获得了该包:

  • com.springsource.com.mysql.jdbc-5.1.6.jar
  • com.springsource.org.apache.commons.logging-1.1.1.jar
  • 现在,已安装的捆绑包列表变得相当大。我说我安装了OpenJPA,但这只是因为我不知道如何在Aries上使用其他提供商。我最初想使用EclipseLink,但显然ApacheAries没有将其作为一个提供者来检测,根据我的说法,您必须制作另一个包,其中包含您自己的activator,以便Aries注意到EclipseLink。我试过了,但没有成功,所以我转而使用OpenJPA

    现在我有两个问题:

    • 如何让OpenJPA注意到我的MySQL包
    或者:

    • 我怎样才能让阿帕奇白羊座注意到日食
    下面是我使用的persistence.xml文件:

    <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="userManager.model" transaction-type="RESOURCE_LOCAL">
        <provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
        <class>org.project.dao.entity.UserEntity</class>
        <properties>
            <property name="openjpa.ConnectionDriverName" value="com.mysql.jdbc.Driver" />
            <property name="openjpa.ConnectionURL" value="jdbc:mysql://localhost:3306/usermanager?autoReconnect=true" />
            <property name="openjpa.ConnectionUserName" value="root" />
            <property name="openjpa.ConnectionPassword" value="root" />            
        </properties>
    </persistence-unit>
    </persistence>
    
    以下是OpenJPA找不到MySQL时出现的错误。当然,值得一提的是,URL和用户名/密码都可以工作:

    <openjpa-2.2.0-r422266:1244990 nonfatal general error> org.apache.openjpa.persistence.PersistenceException: There were errors initializing your configuration: <openjpa-2.2.0-r422266:1244990 fatal user error> org.apache.openjpa.util.UserException: A connection could not be obtained for driver class "com.mysql.jdbc.Driver" and URL "jdbc:mysql://localhost:3306/usermanager?autoReconnect=true".  You may have specified an invalid URL.
    at org.apache.openjpa.jdbc.schema.DataSourceFactory.newConnectException(DataSourceFactory.java:255)
    at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:123)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.createConnectionFactory(JDBCConfigurationImpl.java:844)
    at org.apache.openjpa.jdbc.conf.JDBCConfigurationImpl.getConnectionFactory(JDBCConfigurationImpl.java:732)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at org.apache.openjpa.lib.conf.ConfigurationImpl.instantiateAll(ConfigurationImpl.java:295)
    at org.apache.openjpa.conf.OpenJPAConfigurationImpl.instantiateAll(OpenJPAConfigurationImpl.java:1671)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.makeReadOnly(AbstractBrokerFactory.java:646)
    at org.apache.openjpa.kernel.AbstractBrokerFactory.newBroker(AbstractBrokerFactory.java:203)
    at org.apache.openjpa.kernel.DelegatingBrokerFactory.newBroker(DelegatingBrokerFactory.java:156)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:227)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:154)
    at org.apache.openjpa.persistence.EntityManagerFactoryImpl.createEntityManager(EntityManagerFactoryImpl.java:60)
    at org.apache.aries.jpa.container.impl.CountingEntityManagerFactory.createEntityManager(CountingEntityManagerFactory.java:64)
    at javax.persistence.EntityManagerFactory$$Proxy.createEntityManager(Unknown Source)
    

    PS:由于垃圾邮件限制,我无法发布到Aries、OpenJPA或EclipseLink的链接,很抱歉://

    使用JNDI数据源可能比直接使用jdbc连接更幸运。有一个blog.datasource包,它使用Blueprint注册一个数据源。所需捆绑包的列表比您当前拥有的要长,但是您可以从blog assembly/target目录或pom.xml复制它们


    或者,白羊座有一个org.apache.Aries.jpa.eclipselink.adapter,它的功能与您链接到的文章相同。白羊座用它来测试日食,所以它肯定会起作用。你也可以看看白羊座的测试,看看它是如何使用的,看看是否有一个日食测试你可以复制。

    多亏了霍莉·康明斯,在又一个小时的研究之后,我找到了解决问题的方法。我将在下面详细说明,这将是一个非常长的回答

    如果您想在ApacheAries中使用EclipseLink(我发现安装它比OpenJPAForOSGi简单很多,因为它只包含在5个包中),您必须直接从Apache签出EclipseLink-Aries适配器,因为它还没有发布

    转到适当的文件夹并执行以下命令以获取该文件夹:

    svn checkout https://svn.apache.org/repos/asf/aries/trunk/jpa/jpa-container-eclipselink-adapter/
    
    您应该得到一个名为jpa container eclipselink adapter的文件夹。现在,假设您正在使用Linux并安装了Maven,请运行以下命令:

    cd jpa-container-eclipselink-adapter
    mvn clean install
    
    一旦Maven成功编译了适配器的源代码,您将使用路径在Maven存储库中找到它

    <maven-repo>/org/apache/aries/jpa/org.apache.aries.jpa.eclipselink.adapter/0.3.1-SNAPSHOT/org.apache.aries.jpa.eclipselink.adapter-0.3.1-SNAPSHOT.jar
    
    也可以使用setter注入EMF。以下是帮助您使用Blueprint的更多资源:

    可选:请小心,如果使用Felix,添加javax.transaction捆绑包将导致“使用约束冲突”,因为系统捆绑包(捆绑包0)也会导出此API。您必须在config.properties中更改以下行,以防止其导出:

    #org.osgi.framework.system.packages=
    
    您必须在这里输入上一个捆绑导出的所有包的列表。不幸的是,无法“删除”包,您必须重新定义要导出的包的整个列表。这是我的,我希望它有帮助(是的,它很长很长):


    当使用双子座蓝图dbAccess插件()时,事情可能会更简单,我认为它也适用于白羊座。对于MySQL,请确保包含连接器插件(例如)。如果blueprint.xml(使用上面的示例)配置正确(如上所述),这应该足以使数据库启动并运行

    <maven-repo>/org/apache/aries/jpa/org.apache.aries.jpa.eclipselink.adapter/0.3.1-SNAPSHOT/org.apache.aries.jpa.eclipselink.adapter-0.3.1-SNAPSHOT.jar
    
    <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="userManager" transaction-type="RESOURCE_LOCAL">
            <provider>org.eclipse.persistence.jpa.PersistenceProvider</provider>
            <non-jta-data-source>osgi:service/javax.sql.DataSource/(osgi.jndi.service.name=jdbc/userManagerDS)</non-jta-data-source>
            <class>com.example.dao.entity.UserEntity</class>
            <exclude-unlisted-classes>true</exclude-unlisted-classes>
            <properties>  
                <!-- 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>
    </persistence>
    
            <bean id="dataSource" class="com.mysql.jdbc.jdbc2.optional.MysqlDataSource">
            <property name="url" value="jdbc:mysql://localhost:3306/usermanager?autoReconnect=true" />
            <property name="user" value="root" />
            <property name="password" value="root" />
        </bean>
    
        <service id="MySQLDataSource" interface="javax.sql.DataSource" ref="dataSource">
            <service-properties>
                <entry key="osgi.jndi.service.name" value="jdbc/userManagerDS" />
            </service-properties>
        </service>
    
        <service id="userDAOService" interface="com.example.dao.remote.UserDAORemote">
            <bean class="com.example.dao.beans.UserDAOBean">
                <jpa:unit index="0" unitname="userManager" />
            </bean>
        </service>
    </blueprint>
    
    private EntityManager em;
    private EntityManagerFactory emf;
    
    public UserDAOBean(EntityManagerFactory emf) {
        this.emf = emf;
        this.em = emf.createEntityManager();
    }
    
    #org.osgi.framework.system.packages=
    
    org.osgi.framework.system.packages=org.osgi.framework;version=1.6.0, org.osgi.framework.launch;version=1.0.0, org.osgi.framework.wiring;version=1.0.0, org.osgi.framework.startlevel;version=1.0.0, org.osgi.framework.hooks.bundle;version=1.0.0, org.osgi.framework.hooks.resolver;version=1.0.0, org.osgi.framework.hooks.service;version=1.1.0, org.osgi.framework.hooks.weaving;version=1.0.0, org.osgi.service.packageadmin;version=1.2.0, org.osgi.service.startlevel;version=1.1.0, org.osgi.service.url;version=1.0.0, org.osgi.util.tracker;version=1.5.0, javax.accessibility;version=0.0.0.1_006_JavaSE, javax.activation;version=0.0.0.1_006_JavaSE, javax.activity;version=0.0.0.1_006_JavaSE, javax.annotation.processing;version=0.0.0.1_006_JavaSE, javax.annotation;version=0.0.0.1_006_JavaSE, javax.crypto.interfaces;version=0.0.0.1_006_JavaSE, javax.crypto.spec;version=0.0.0.1_006_JavaSE, javax.crypto;version=0.0.0.1_006_JavaSE, javax.imageio.event;version=0.0.0.1_006_JavaSE, javax.imageio.metadata;version=0.0.0.1_006_JavaSE, javax.imageio.plugins.bmp;version=0.0.0.1_006_JavaSE, javax.imageio.plugins.jpeg;version=0.0.0.1_006_JavaSE, javax.imageio.spi;version=0.0.0.1_006_JavaSE, javax.imageio.stream;version=0.0.0.1_006_JavaSE, javax.imageio;version=0.0.0.1_006_JavaSE, javax.jws.soap;version=0.0.0.1_006_JavaSE, javax.jws;version=0.0.0.1_006_JavaSE, javax.lang.model.element;version=0.0.0.1_006_JavaSE, javax.lang.model.type;version=0.0.0.1_006_JavaSE, javax.lang.model.util;version=0.0.0.1_006_JavaSE, javax.lang.model;version=0.0.0.1_006_JavaSE, javax.management.loading;version=0.0.0.1_006_JavaSE, javax.management.modelmbean;version=0.0.0.1_006_JavaSE, javax.management.monitor;version=0.0.0.1_006_JavaSE, javax.management.openmbean;version=0.0.0.1_006_JavaSE, javax.management.relation;version=0.0.0.1_006_JavaSE, javax.management.remote.rmi;version=0.0.0.1_006_JavaSE, javax.management.remote;version=0.0.0.1_006_JavaSE, javax.management.timer;version=0.0.0.1_006_JavaSE, javax.management;version=0.0.0.1_006_JavaSE, javax.naming.directory;version=0.0.0.1_006_JavaSE, javax.naming.event;version=0.0.0.1_006_JavaSE, javax.naming.ldap;version=0.0.0.1_006_JavaSE, javax.naming.spi;version=0.0.0.1_006_JavaSE, javax.naming;version=0.0.0.1_006_JavaSE, javax.net.ssl;version=0.0.0.1_006_JavaSE, javax.net;version=0.0.0.1_006_JavaSE, javax.print.attribute.standard;version=0.0.0.1_006_JavaSE, javax.print.attribute;version=0.0.0.1_006_JavaSE, javax.print.event;version=0.0.0.1_006_JavaSE, javax.print;version=0.0.0.1_006_JavaSE, javax.rmi.CORBA;version=0.0.0.1_006_JavaSE, javax.rmi.ssl;version=0.0.0.1_006_JavaSE, javax.rmi;version=0.0.0.1_006_JavaSE, javax.script;version=0.0.0.1_006_JavaSE, javax.security.auth.callback;version=0.0.0.1_006_JavaSE, javax.security.auth.kerberos;version=0.0.0.1_006_JavaSE, javax.security.auth.login;version=0.0.0.1_006_JavaSE, javax.security.auth.spi;version=0.0.0.1_006_JavaSE, javax.security.auth.x500;version=0.0.0.1_006_JavaSE, javax.security.auth;version=0.0.0.1_006_JavaSE, javax.security.cert;version=0.0.0.1_006_JavaSE, javax.security.sasl;version=0.0.0.1_006_JavaSE, javax.sound.midi.spi;version=0.0.0.1_006_JavaSE, javax.sound.midi;version=0.0.0.1_006_JavaSE, javax.sound.sampled.spi;version=0.0.0.1_006_JavaSE, javax.sound.sampled;version=0.0.0.1_006_JavaSE, javax.sql.rowset.serial;version=0.0.0.1_006_JavaSE, javax.sql.rowset.spi;version=0.0.0.1_006_JavaSE, javax.sql.rowset;version=0.0.0.1_006_JavaSE, javax.sql;version=0.0.0.1_006_JavaSE, javax.swing.border;version=0.0.0.1_006_JavaSE, javax.swing.colorchooser;version=0.0.0.1_006_JavaSE, javax.swing.event;version=0.0.0.1_006_JavaSE, javax.swing.filechooser;version=0.0.0.1_006_JavaSE, javax.swing.plaf.basic;version=0.0.0.1_006_JavaSE, javax.swing.plaf.metal;version=0.0.0.1_006_JavaSE, javax.swing.plaf.multi;version=0.0.0.1_006_JavaSE, javax.swing.plaf.synth;version=0.0.0.1_006_JavaSE, javax.swing.plaf;version=0.0.0.1_006_JavaSE, javax.swing.table;version=0.0.0.1_006_JavaSE, javax.swing.text.html.parser;version=0.0.0.1_006_JavaSE, javax.swing.text.html;version=0.0.0.1_006_JavaSE, javax.swing.text.rtf;version=0.0.0.1_006_JavaSE, javax.swing.text;version=0.0.0.1_006_JavaSE, javax.swing.tree;version=0.0.0.1_006_JavaSE, javax.swing.undo;version=0.0.0.1_006_JavaSE, javax.swing;version=0.0.0.1_006_JavaSE, javax.tools;version=0.0.0.1_006_JavaSE, javax.transaction.xa;version=0.0.0.1_006_JavaSE, javax.transaction;version=0.0.0.1_006_JavaSE, javax.xml.bind.annotation.adapters;version=0.0.0.1_006_JavaSE, javax.xml.bind.annotation;version=0.0.0.1_006_JavaSE, javax.xml.bind.attachment;version=0.0.0.1_006_JavaSE, javax.xml.bind.helpers;version=0.0.0.1_006_JavaSE, javax.xml.bind.util;version=0.0.0.1_006_JavaSE, javax.xml.bind;version=0.0.0.1_006_JavaSE, javax.xml.crypto.dom;version=0.0.0.1_006_JavaSE, javax.xml.crypto.dsig.dom;version=0.0.0.1_006_JavaSE, javax.xml.crypto.dsig.keyinfo;version=0.0.0.1_006_JavaSE, javax.xml.crypto.dsig.spec;version=0.0.0.1_006_JavaSE, javax.xml.crypto.dsig;version=0.0.0.1_006_JavaSE, javax.xml.crypto;version=0.0.0.1_006_JavaSE, javax.xml.datatype;version=0.0.0.1_006_JavaSE, javax.xml.namespace;version=0.0.0.1_006_JavaSE, javax.xml.parsers;version=0.0.0.1_006_JavaSE, javax.xml.soap;version=0.0.0.1_006_JavaSE, javax.xml.stream.events;version=0.0.0.1_006_JavaSE, javax.xml.stream.util;version=0.0.0.1_006_JavaSE, javax.xml.stream;version=0.0.0.1_006_JavaSE, javax.xml.transform.dom;version=0.0.0.1_006_JavaSE, javax.xml.transform.sax;version=0.0.0.1_006_JavaSE, javax.xml.transform.stax;version=0.0.0.1_006_JavaSE, javax.xml.transform.stream;version=0.0.0.1_006_JavaSE, javax.xml.transform;version=0.0.0.1_006_JavaSE, javax.xml.validation;version=0.0.0.1_006_JavaSE, javax.xml.ws.handler.soap;version=0.0.0.1_006_JavaSE, javax.xml.ws.handler;version=0.0.0.1_006_JavaSE, javax.xml.ws.http;version=0.0.0.1_006_JavaSE, javax.xml.ws.soap;version=0.0.0.1_006_JavaSE, javax.xml.ws.spi;version=0.0.0.1_006_JavaSE, javax.xml.ws.wsaddressing;version=0.0.0.1_006_JavaSE, javax.xml.ws;version=0.0.0.1_006_JavaSE, javax.xml.xpath;version=0.0.0.1_006_JavaSE, javax.xml;version=0.0.0.1_006_JavaSE, org.ietf.jgss;version=0.0.0.1_006_JavaSE, org.omg.CORBA.DynAnyPackage;version=0.0.0.1_006_JavaSE, org.omg.CORBA.ORBPackage;version=0.0.0.1_006_JavaSE, org.omg.CORBA.TypeCodePackage;version=0.0.0.1_006_JavaSE, org.omg.CORBA.portable;version=0.0.0.1_006_JavaSE, org.omg.CORBA;version=0.0.0.1_006_JavaSE, org.omg.CORBA_2_3.portable;version=0.0.0.1_006_JavaSE, org.omg.CORBA_2_3;version=0.0.0.1_006_JavaSE, org.omg.CosNaming.NamingContextExtPackage;version=0.0.0.1_006_JavaSE, org.omg.CosNaming.NamingContextPackage;version=0.0.0.1_006_JavaSE, org.omg.CosNaming;version=0.0.0.1_006_JavaSE, org.omg.Dynamic;version=0.0.0.1_006_JavaSE, org.omg.DynamicAny.DynAnyFactoryPackage;version=0.0.0.1_006_JavaSE, org.omg.DynamicAny.DynAnyPackage;version=0.0.0.1_006_JavaSE, org.omg.DynamicAny;version=0.0.0.1_006_JavaSE, org.omg.IOP.CodecFactoryPackage;version=0.0.0.1_006_JavaSE, org.omg.IOP.CodecPackage;version=0.0.0.1_006_JavaSE, org.omg.IOP;version=0.0.0.1_006_JavaSE, org.omg.Messaging;version=0.0.0.1_006_JavaSE, org.omg.PortableInterceptor.ORBInitInfoPackage;version=0.0.0.1_006_JavaSE, org.omg.PortableInterceptor;version=0.0.0.1_006_JavaSE, org.omg.PortableServer.CurrentPackage;version=0.0.0.1_006_JavaSE, org.omg.PortableServer.POAManagerPackage;version=0.0.0.1_006_JavaSE, org.omg.PortableServer.POAPackage;version=0.0.0.1_006_JavaSE, org.omg.PortableServer.ServantLocatorPackage;version=0.0.0.1_006_JavaSE, org.omg.PortableServer.portable;version=0.0.0.1_006_JavaSE, org.omg.PortableServer;version=0.0.0.1_006_JavaSE, org.omg.SendingContext;version=0.0.0.1_006_JavaSE, org.omg.stub.java.rmi;version=0.0.0.1_006_JavaSE, org.w3c.dom.bootstrap;version=0.0.0.1_006_JavaSE, org.w3c.dom.events;version=0.0.0.1_006_JavaSE, org.w3c.dom.ls;version=0.0.0.1_006_JavaSE, org.w3c.dom;version=0.0.0.1_006_JavaSE, org.xml.sax.ext;version=0.0.0.1_006_JavaSE, org.xml.sax.helpers;version=0.0.0.1_006_JavaSE, org.xml.sax;version=0.0.0.1_006_JavaSE