[ 
https://issues.apache.org/jira/browse/FELIX-3907?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=13589751#comment-13589751
 ] 

Richard S. Hall commented on FELIX-3907:
----------------------------------------

Even if we allowed the class loader to remain accessible, this just leads to 
other errors. For example, if you invoke a method on a held instance that 
causes it to try to load another class from the bundle (one that hasn't been 
loaded yet), then it will fail with some sort of zip file not open exception 
(it may have even already been deleted).

In other words, once you are in this state everything is really fragile. If you 
have threads that are still trying to do stuff, this is generally a sign that 
someone is either a) not stopping threads when they should (i.e., when their 
creating bundle is stopped) or b) not releasing objects obtained from stale 
bundles.

You cannot expect class loading to continue normally for a refreshed bundle.
                
> NullPointerException in BundleWiringImpl when m_disposed is true.
> -----------------------------------------------------------------
>
>                 Key: FELIX-3907
>                 URL: https://issues.apache.org/jira/browse/FELIX-3907
>             Project: Felix
>          Issue Type: Bug
>          Components: Framework
>    Affects Versions: framework-4.2.0
>         Environment: Windows
>            Reporter: Jad Naous
>
> NullPointerException caused by lines 1472-1474 of 
> {{org.apache.felix.framework.BundleWiringImpl}} when {{this.m_disposed == 
> true}}. I don't know why {{this.m_disposed}} is true, but I'm guessing it's 
> some sort of race condition. Stack trace follows:
> {noformat}
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer 
> java.lang.NullPointerException: null
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> org.apache.felix.framework.BundleWiringImpl.findClassOrResourceByDelegation(BundleWiringImpl.java:1472)
>  ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> org.apache.felix.framework.BundleWiringImpl.access$400(BundleWiringImpl.java:75)
>  ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> org.apache.felix.framework.BundleWiringImpl$BundleClassLoader.loadClass(BundleWiringImpl.java:1923)
>  ~[felix.jar:na]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.lang.ClassLoader.loadClass(ClassLoader.java:247) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.lang.Class.getDeclaredFields0(Native Method) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.lang.Class.privateGetDeclaredFields(Class.java:2291) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.lang.Class.getDeclaredField(Class.java:1880) ~[na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.events.RuntimeRecording.getClassId(RuntimeRecording.java:156)
>  ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.events.RuntimeRecording.writeAsJson(RuntimeRecording.java:118)
>  ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.client.ControllerClient.processRequest(ControllerClient.java:160)
>  ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.client.ControllerClient.putData(ControllerClient.java:131) 
> ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.client.ControllerManager.putData(ControllerManager.java:177) 
> ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> com.nerati.agent.client.ControllerSendTask.run(ControllerSendTask.java:119) 
> ~[agent-main-0.0.5-SNAPSHOT.jar:0.0.5-SNAPSHOT]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:439) 
> [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.FutureTask$Sync.innerRunAndReset(FutureTask.java:317) 
> [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.FutureTask.runAndReset(FutureTask.java:150) [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$101(ScheduledThreadPoolExecutor.java:98)
>  [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.runPeriodic(ScheduledThreadPoolExecutor.java:180)
>  [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:204)
>  [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
>  [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
>  [na:1.6.0_37]
> (  Thread-5) [DEBUG] ntegration.NeratiDeployer  at 
> java.lang.Thread.run(Thread.java:662) [na:1.6.0_37]
> {noformat}

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to