Skip to main content

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index] [List Home]
Re: [eclipselink-users] Question about createEntityManagerFactory

Have you taken a look at:

http://eclipse.org/gemini/

or:

http://www.eclipse.org/gemini/jpa/

On 29/07/2012 9:42 AM, Xuehan Xu wrote:
Hi, everyone.
I'm using eclipselink under an OSGi environment.
My code is as follows:

EntityManager em =
Persistence.createEntityManagerFactory("checkpoint").createEntityManager();

I also had a file named "javax.persistence.spi.PersistenceProvider" under the
directory "META-INF/services", with the only line
"org.eclipse.persistence.jpa.PersistenceProvider" in it, and a file named
"persistence.xml" under the directory"META-INF/", the content of which is as
follows:

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

<persistence-unit name="checkpoint" transaction-type="RESOURCE_LOCAL">
<properties>
<property name="eclipselink.jdbc.url"
value="jdbc:mysql://localhost/secsuite_core" />
<property name="eclipselink.jdbc.driver" value="com.mysql.jdbc.Driver"/>
<property name="eclipselink.jdbc.user" value="root" />
<property name="eclipselink.jdbc.password" value="root" />
<property name="eclipselink.logging.level" value="OFF" />
<property name="eclipselink.ddl-generation" value="create-tables" />
</properties>
</persistence-unit>

</persistence>

When I tried to run the program, I got the following exception:

org.osgi.framework.BundleException: Exception in jpa_test.Activator.start() of
bundle jpa_test.
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:806)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
at
org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
at
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)
Caused by: javax.persistence.PersistenceException: No Persistence provider for
EntityManager named checkpoint
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at jpa_test.Activator.start(Activator.java:44)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
... 11 more
Root exception:
javax.persistence.PersistenceException: No Persistence provider for
EntityManager named checkpoint
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:84)
at javax.persistence.Persistence.createEntityManagerFactory(Persistence.java:54)
at jpa_test.Activator.start(Activator.java:44)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl$1.run(BundleContextImpl.java:783)
at java.security.AccessController.doPrivileged(Native Method)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.startActivator(BundleContextImpl.java:774)
at
org.eclipse.osgi.framework.internal.core.BundleContextImpl.start(BundleContextImpl.java:755)
at
org.eclipse.osgi.framework.internal.core.BundleHost.startWorker(BundleHost.java:370)
at
org.eclipse.osgi.framework.internal.core.AbstractBundle.resume(AbstractBundle.java:374)
at
org.eclipse.osgi.framework.internal.core.Framework.resumeBundle(Framework.java:1067)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:561)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.resumeBundles(StartLevelManager.java:546)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.incFWSL(StartLevelManager.java:459)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.doSetStartLevel(StartLevelManager.java:243)
at
org.eclipse.osgi.framework.internal.core.StartLevelManager.dispatchEvent(StartLevelManager.java:440)
at
org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:227)
at
org.eclipse.osgi.framework.eventmgr.EventManager$EventThread.run(EventManager.java:337)

I debugged into the JPA code, it seems that the problem is in the
method javax.persistence.spi.PersistenceProviderResolverHolder.DefaultPersistenceProviderResolver
<eclipse-javadoc:%E2%98%82=javax.persistence/src%3Cjavax.persistence.spi%7BPersistenceProviderResolverHolder.java%E2%98%83PersistenceProviderResolverHolder%E2%98%83DefaultPersistenceProviderResolver>.getProviderNames().
It seems that although the classloader retrieved using
Thread.currentThread().getContextClassLoader() is the same classloader as that
of my bundle, it always try to load resources from the bundle that contains the
class "javax.persistence.spi.PersistenceProviderResolverHolder"

How should I deal with this problem? I'm looking forward to the answer, thank
you very much:-)


_______________________________________________
eclipselink-users mailing list
eclipselink-users@xxxxxxxxxxx
https://dev.eclipse.org/mailman/listinfo/eclipselink-users


Back to the top