Some Eclipse Foundation services are deprecated, or will be soon. Please ensure you've read this important communication.

Bug 314684

Summary: Possible ClassCircularityError in PersistenceWeaver.transform()
Product: z_Archived Reporter: Frank Schwarz <fs5>
Component: EclipselinkAssignee: Nobody - feel free to take it <nobody>
Status: NEW --- QA Contact:
Severity: normal    
Priority: P3 CC: tom.ware
Version: unspecified   
Target Milestone: ---   
Hardware: All   
OS: All   
Whiteboard:

Description Frank Schwarz CLA 2010-05-27 10:42:31 EDT
Build Identifier: 2.0.2

There is a possible ClassCircularityError in PersistenceWeaver.transform(). It will occur when there is a lazy class initialization from inside this method. In the present case it is cause by loading the class "org.eclipse.persistence.internal.helper.Helper"

java.lang.ClassCircularityError: org/eclipse/persistence/logging/SessionLogEntry
	at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3678)
	at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3650)
	at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3626)
	at org.eclipse.persistence.internal.sessions.AbstractSession.log(AbstractSession.java:3575)
	at org.eclipse.persistence.internal.jpa.weaving.PersistenceWeaver.transform(PersistenceWeaver.java:126)
	at org.eclipse.persistence.internal.jpa.deployment.osgi.equinox.EquinoxWeaver.transform(EquinoxWeaver.java:40)
	at org.eclipse.persistence.jpa.equinox.weaving.WeaverRegistry.processClass(WeaverRegistry.java:80)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:575)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:550)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:481)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:469)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:449)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:393)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:469)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:422)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:410)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
	at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:160)
	at org.eclipse.persistence.jpa.PersistenceProvider.createEntityManagerFactory(PersistenceProvider.java:65)
	at demo.eclipselink.app.Activator.start(Activator.java:25)
	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)


There should be a guard at the beginning of this method to return null for all possible classes that the "transform"-method can trigger to by lazily loaded.

Reproducible: Always

Steps to Reproduce:
This error can be provoked by creating a persistence unit without any classes used in an OSGI-context. This can easily happen if you forget to declare the Export-Packages-header on your PU-bundle. It is clearly a user error, but the exception you will see is highly misleading.
Comment 1 Tom Ware CLA 2010-06-07 14:36:45 EDT
Setting target and priority.  See the following page for details of the meanings of these fields:

http://wiki.eclipse.org/EclipseLink/Development/Bugs/Guidelines
Comment 2 Eclipse Webmaster CLA 2022-06-09 10:31:38 EDT
The Eclipselink project has moved to Github: https://github.com/eclipse-ee4j/eclipselink