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

Bug 367574

Summary: java.lang.NullPointerException in WeavingHookTransformer
Product: [RT] Gemini.JPA Reporter: Christoph Laeubrich <laeubi>
Component: CoreAssignee: Michael Keith <michael.keith>
Status: CLOSED WORKSFORME QA Contact:
Severity: normal    
Priority: P3    
Version: unspecified   
Target Milestone: 1.1.0 M1   
Hardware: PC   
OS: Linux   
Whiteboard:

Description Christoph Laeubrich CLA 2011-12-27 07:53:42 EST
Build Identifier: gemini-jpa-1.0.0.RC3

java.lang.NullPointerException
	at org.eclipse.gemini.jpa.weaving.WeavingHookTransformer.weave(WeavingHookTransformer.java:111)
	at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.call(WovenClassImpl.java:129)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHookPrivileged(ServiceRegistry.java:1239)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.notifyHooksPrivileged(ServiceRegistry.java:1222)
	at org.eclipse.osgi.internal.baseadaptor.weaving.WovenClassImpl.callHooks(WovenClassImpl.java:157)
	at org.eclipse.osgi.internal.baseadaptor.weaving.WeavingHookConfigurator.processClass(WeavingHookConfigurator.java:68)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.defineClass(ClasspathManager.java:596)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findClassImpl(ClasspathManager.java:567)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClassImpl(ClasspathManager.java:490)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass_LockClassLoader(ClasspathManager.java:478)
	at org.eclipse.osgi.baseadaptor.loader.ClasspathManager.findLocalClass(ClasspathManager.java:458)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.findLocalClass(DefaultClassLoader.java:216)
	at org.eclipse.osgi.internal.loader.BundleLoader.findLocalClass(BundleLoader.java:400)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClassInternal(BundleLoader.java:476)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:429)
	at org.eclipse.osgi.internal.loader.BundleLoader.findClass(BundleLoader.java:417)
	at org.eclipse.osgi.internal.baseadaptor.DefaultClassLoader.loadClass(DefaultClassLoader.java:107)
	at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
	at org.eclipse.osgi.internal.loader.BundleLoader.loadClass(BundleLoader.java:345)
	at org.eclipse.osgi.framework.internal.core.BundleHost.loadClass(BundleHost.java:229)
	at org.eclipse.osgi.framework.internal.core.AbstractBundle.loadClass(AbstractBundle.java:1207)
	at org.eclipse.equinox.internal.ds.model.ServiceComponent.createInstance(ServiceComponent.java:480)
	at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.createInstance(ServiceComponentProp.java:271)
	at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.build(ServiceComponentProp.java:332)
	at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponent(InstanceProcess.java:588)
	at org.eclipse.equinox.internal.ds.ServiceReg.getService(ServiceReg.java:53)
	at org.eclipse.osgi.internal.serviceregistry.ServiceUse$1.run(ServiceUse.java:138)
	at java.security.AccessController.doPrivileged(Native Method)
	at org.eclipse.osgi.internal.serviceregistry.ServiceUse.getService(ServiceUse.java:136)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.getService(ServiceRegistrationImpl.java:468)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.getService(ServiceRegistry.java:467)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.getService(BundleContextImpl.java:594)
	at org.eclipse.equinox.internal.ds.InstanceProcess.getService(InstanceProcess.java:686)
	at org.eclipse.equinox.internal.ds.model.ComponentReference.bind(ComponentReference.java:338)
	at org.eclipse.equinox.internal.ds.model.ServiceComponentProp.bindReference(ServiceComponentProp.java:441)
	at org.eclipse.equinox.internal.ds.InstanceProcess.dynamicBind(InstanceProcess.java:415)
	at org.eclipse.equinox.internal.ds.Resolver.getEligible(Resolver.java:319)
	at org.eclipse.equinox.internal.ds.SCRManager.serviceChanged(SCRManager.java:221)
	at org.eclipse.osgi.internal.serviceregistry.FilteredServiceListener.serviceChanged(FilteredServiceListener.java:104)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.dispatchEvent(BundleContextImpl.java:861)
	at org.eclipse.osgi.framework.eventmgr.EventManager.dispatchEvent(EventManager.java:230)
	at org.eclipse.osgi.framework.eventmgr.ListenerQueue.dispatchEventSynchronous(ListenerQueue.java:148)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEventPrivileged(ServiceRegistry.java:819)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.publishServiceEvent(ServiceRegistry.java:771)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistrationImpl.register(ServiceRegistrationImpl.java:130)
	at org.eclipse.osgi.internal.serviceregistry.ServiceRegistry.registerService(ServiceRegistry.java:214)
	at org.eclipse.osgi.framework.internal.core.BundleContextImpl.registerService(BundleContextImpl.java:433)
	at org.eclipse.equinox.internal.ds.InstanceProcess.registerService(InstanceProcess.java:504)
	at org.eclipse.equinox.internal.ds.InstanceProcess.buildComponents(InstanceProcess.java:259)
	at org.eclipse.equinox.internal.ds.Resolver.buildNewlySatisfied(Resolver.java:441)
	at org.eclipse.equinox.internal.ds.Resolver.enableComponents(Resolver.java:213)
	at org.eclipse.equinox.internal.ds.SCRManager.performWork(SCRManager.java:800)
	at org.eclipse.equinox.internal.ds.SCRManager$QueuedJob.dispatch(SCRManager.java:767)
	at org.eclipse.equinox.internal.ds.WorkThread.run(WorkThread.java:89)
	at java.lang.Thread.run(Thread.java:662)


Reproducible: Always
Comment 1 Michael Keith CLA 2012-01-03 09:44:42 EST
Need more info.

1) What are the characteristics of the domain class(es) being woven?
2) Attach a sample reproducible test case if possible. With no other information we have no way of reproducing this problem.
3) The runtime environment (in PDE or standalone OSGi)
4) Please run with the GEMINI_DEBUG_WEAVING system property set (e.g. -DGEMINI_DEBUG_WEAVING=true) and post the output

Thanks.
Comment 2 Michael Keith CLA 2012-03-27 09:44:50 EDT
Any update on this bug?
Comment 3 Christoph Laeubrich CLA 2012-03-27 12:20:31 EDT
1) What are the characteristics of the domain class(es) being woven?
I used simple DAO clases with one one to many relationship

2) Attach a sample reproducible test case if possible. 
I'll try to create one if i encounter the problem next time

3) The runtime environment (in PDE or standalone OSGi)
Standalone OSGi with EclipseLink and Eclipse Gemini running in an equinox container

4) Please run with the GEMINI_DEBUG_WEAVING system property set (e.g.
-DGEMINI_DEBUG_WEAVING=true) and post the output

I'll try to do this nex time. Sadly I refactored the code where the problem occured due to changes in the system architecture, I hope the stacktrace still would give any usefull hints.
Comment 4 Michael Keith CLA 2012-05-28 14:14:22 EDT
I have looked over the WeavingHookTransformer.weave() method a number of times and I can't see anything that could produce an NPE except in a condition where one of the get methods of the WovenClass returned null. None of those methods should ever return null, though, so it's possible that Equinox has/had a timing issue that caused the woven class state to not be fully formed. Unless it happens again, though, I'm not sure how we would be able to pin down the offending conditions.

Closing because I'm having a hard time believing it is a Gemini JPA bug. If it ever re-occurs then please reopen and we can take a look at what the root cause might be.