В настоящее время я работаю над проектом OSGi на Felix (v4.0.3 ). Мне нужно использовать JPA, поэтому я установил пакеты Apache Aries JPA. Я также установил OpenJPA, и мне нужно, чтобы он подключался к базе данных MySQL с помощью пакета MySQL Connector. К сожалению, это не работает, OpenJPA говорит, что не может найти класс MySQL JDBC, и я не могу понять, что не работает, возможно, я делаю что-то не так. Ниже я объясню, что именно я установил вместе с файлом persistence.xml и фактическим исключением, которое я получаю.
Вот список пакетов Apache Aries, которые я установил:
Затем я установил зависимости этих пакетов Apache Aries JPA.Я скачал их из Springsource:
Я также установил OpenJPA и все его зависимости. Я нашел связки от 2 до 5(commons -*)в папке lib загруженной папки apache -openjpa -2.2.0 . Я скачал Serp здесь , потому что jar, найденный в папке lib, не был пакетом OSGi. Наконец я нашел два последних пакета (#7 и #8 )в Springsource:
После того, как я, наконец, установил OpenJPA, мне по-прежнему требовался пакет драйверов MySQL JDBC, который я также получил из репозитория Springsource вместе с его общими -зависимостью ведения журнала :
На данный момент список установленных пакетов становится довольно большим. Я сказал, что установил OpenJPA, но это только потому, что я не мог понять, как использовать любой другой провайдер с Aries. Сначала я хотел использовать EclipseLink, но, видимо, Apache Aries не определяет его как провайдера, и согласно этому блогу вам нужно сделать еще один пакет, содержащий собственный активатор, чтобы Aries заметил EclipseLink.Я попробовал это, но это не сработало, поэтому вместо этого я вернулся к использованию OpenJPA.
Итак, теперь у меня есть два вопроса:
ИЛИ альтернативно:
Вот файл persistence.xml, который я использую:
org.apache.openjpa.persistence.PersistenceProviderImpl
org.project.dao.entity.UserEntity
Ошибка возникает, когда выполняется следующий конструктор моего класса DAO:
@PersistenceContext(unitName="userManager.model")
private EntityManager em;
private EntityManagerFactory emf;
public UserDAOBean() {
em = emf.createEntityManager();
}
Вот ошибка, которую я получаю, когда OpenJPA не находит MySQL. Конечно, стоит отметить, что и URL, и имя пользователя/пароль работают :
org.apache.openjpa.persistence.PersistenceException: There were errors initializing your configuration: 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)
. Я вырезал исключение (, оно продолжается и продолжается )до этого момента:
Caused by: java.lang.ClassNotFoundException: com.mysql.jdbc.Driver not found by org.apache.openjpa [12]
at org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1460)
at org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:72)
at org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1843)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:169)
at org.apache.openjpa.jdbc.schema.DataSourceFactory.newDataSource(DataSourceFactory.java:85)
... 108 more
PS :Я не мог размещать ссылки на Aries, OpenJPA или EclipseLink из-за ограничения на спам, извините :/