Hi guys,
I was hoping if someone could tell me if a fix has already been put in for the java deadlock issue with WeakHashMap(). it seems to be a known issue based on what I've been able to research so far.
The fix seems to be to replace <code>WeakHashMap()</code> with <code>Collections.synchronizedMap(new WeakHashMap())</code>
I would be glad to fix it myself and rebuilding AspectWerkz if I have to, but I'd prefer to use an official distribution.
Thank you.
Axel
Weblogic 9 log is shown below:
Found one Java-level deadlock:
=============================
"[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'":
waiting to lock monitor 0x00258e48 (object 0x75810818, a java.util.WeakHashMap),
which is held by "[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'"
"[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'":
waiting to lock monitor 0x00258bc0 (object 0x758000b0, a sun.misc.Launcher$AppClassLoader),
which is held by "[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'"
Java stack information for the threads listed above:
===================================================
"[STANDBY] ExecuteThread: '4' for queue: 'weblogic.kernel.Default (self-tuning)'":
at org.codehaus.aspectwerkz.definition.SystemDefinitionContainer.getHierarchicalDefinitionsFor(SystemDefinitionContainer.java:311)
- waiting to lock <0x75810818> (a java.util.WeakHashMap)
at org.codehaus.aspectwerkz.definition.SystemDefinitionContainer.getDefinitionsFor(SystemDefinitionContainer.java:225)
at org.codehaus.aspectwerkz.transform.inlining.ContextImpl.<init>(ContextImpl.java:99)
at org.codehaus.aspectwerkz.transform.inlining.InliningWeavingStrategy.newContext(InliningWeavingStrategy.java:259)
at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor._preProcess(AspectWerkzPreProcessor.java:166)
at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor.preProcess(AspectWerkzPreProcessor.java:148)
at com.intersperse.instrumentation.weblogic.WeblogicClassPreprocessor.preProcess(WeblogicClassPreprocessor.java:82)
at org.codehaus.aspectwerkz.hook.PreProcessorAdapter.transform(PreProcessorAdapter.java:50)
at sun.instrument.TransformerManager.transform(TransformerManager.java:122)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at java.net.URLClassLoader.defineClass(URLClassLoader.java:260)
at java.net.URLClassLoader.access$100(URLClassLoader.java:56)
at java.net.URLClassLoader$1.run(URLClassLoader.java:195)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x758000b0> (a sun.misc.Launcher$AppClassLoader)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:268)
- locked <0x758000b0> (a sun.misc.Launcher$AppClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:319)
- locked <0x758000b0> (a sun.misc.Launcher$AppClassLoader)
at weblogic.cluster.MulticastSender.isHeartbeatMessage(MulticastSender.java:306)
at weblogic.cluster.MulticastSender.prepare(MulticastSender.java:279)
at weblogic.cluster.MulticastSender.send(MulticastSender.java:156)
- locked <0x7651c598> (a weblogic.cluster.MulticastSender)
at weblogic.cluster.AttributeManager.sendAttributes(AttributeManager.java:46)
at weblogic.cluster.OutboundService.start(OutboundService.java:33)
at weblogic.t3.srvr.SubsystemRequest.run(SubsystemRequest.java:64)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)
"[ACTIVE] ExecuteThread: '0' for queue: 'weblogic.kernel.Default (self-tuning)'":
at weblogic.utils.io.FilenameEncoder.getSafeFile0(FilenameEncoder.java:244)
at weblogic.utils.io.FilenameEncoder.getSafeFile(FilenameEncoder.java:165)
at weblogic.utils.classloaders.DirectoryClassFinder.getSource(DirectoryClassFinder.java:35)
at weblogic.utils.classloaders.JarClassFinder.getSource(JarClassFinder.java:45)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.application.utils.CompositeWebAppFinder.getSource(CompositeWebAppFinder.java:71)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.utils.classloaders.MultiClassFinder.getSource(MultiClassFinder.java:67)
at weblogic.utils.classloaders.CodeGenClassFinder.getSource(CodeGenClassFinder.java:33)
at weblogic.utils.classloaders.GenericClassLoader.findResource(GenericClassLoader.java:209)
at weblogic.utils.classloaders.GenericClassLoader.getResourceInternal(GenericClassLoader.java:161)
at weblogic.utils.classloaders.GenericClassLoader.getResource(GenericClassLoader.java:187)
at weblogic.utils.classloaders.ChangeAwareClassLoader.getResource(ChangeAwareClassLoader.java:112)
at org.codehaus.aspectwerkz.definition.SystemDefinitionContainer.registerClassLoader(SystemDefinitionContainer.java:121)
- locked <0x75810818> (a java.util.WeakHashMap)
at org.codehaus.aspectwerkz.definition.SystemDefinitionContainer.getHierarchicalDefinitionsFor(SystemDefinitionContainer.java:317)
- locked <0x75810818> (a java.util.WeakHashMap)
at org.codehaus.aspectwerkz.definition.SystemDefinitionContainer.getDefinitionsFor(SystemDefinitionContainer.java:225)
at org.codehaus.aspectwerkz.transform.inlining.ContextImpl.<init>(ContextImpl.java:99)
at org.codehaus.aspectwerkz.transform.inlining.InliningWeavingStrategy.newContext(InliningWeavingStrategy.java:259)
at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor._preProcess(AspectWerkzPreProcessor.java:166)
at org.codehaus.aspectwerkz.transform.AspectWerkzPreProcessor.preProcess(AspectWerkzPreProcessor.java:148)
at com.intersperse.instrumentation.weblogic.WeblogicClassPreprocessor.preProcess(WeblogicClassPreprocessor.java:82)
at org.codehaus.aspectwerkz.hook.PreProcessorAdapter.transform(PreProcessorAdapter.java:50)
at sun.instrument.TransformerManager.transform(TransformerManager.java:122)
at sun.instrument.InstrumentationImpl.transform(InstrumentationImpl.java:155)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(ClassLoader.java:620)
at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:124)
at weblogic.utils.classloaders.GenericClassLoader.defineClass(GenericClassLoader.java:338)
at weblogic.utils.classloaders.GenericClassLoader.findLocalClass(GenericClassLoader.java:291)
- locked <0x3ae890b8> (a weblogic.utils.classloaders.ChangeAwareClassLoader)
at weblogic.utils.classloaders.GenericClassLoader.findClass(GenericClassLoader.java:259)
at weblogic.utils.classloaders.ChangeAwareClassLoader.findClass(ChangeAwareClassLoader.java:54)
- locked <0x3ae890b8> (a weblogic.utils.classloaders.ChangeAwareClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
- locked <0x3ae890b8> (a weblogic.utils.classloaders.ChangeAwareClassLoader)
at java.lang.ClassLoader.loadClass(ClassLoader.java:251)
at weblogic.utils.classloaders.GenericClassLoader.loadClass(GenericClassLoader.java:179)
at weblogic.utils.classloaders.ChangeAwareClassLoader.loadClass(ChangeAwareClassLoader.java:35)
- locked <0x3ae890b8> (a weblogic.utils.classloaders.ChangeAwareClassLoader)
at weblogic.servlet.internal.WebAnnotationProcessorImpl.processAnnotations(WebAnnotationProcessorImpl.java:76)
at weblogic.servlet.internal.WebAppServletContext.processAnnotations(WebAppServletContext.java:1270)
at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:408)
at weblogic.servlet.internal.WebAppServletContext.<init>(WebAppServletContext.java:452)
at weblogic.servlet.internal.HttpServer.loadWebApp(HttpServer.java:402)
- locked <0x75c61a28> (a weblogic.servlet.internal.HttpServer)
at weblogic.servlet.internal.WebAppModule.registerWebApp(WebAppModule.java:582)
at weblogic.servlet.internal.WebAppModule.prepare(WebAppModule.java:298)
at weblogic.application.internal.flow.ScopedModuleDriver.prepare(ScopedModuleDriver.java:176)
at weblogic.application.internal.flow.ModuleListenerInvoker.prepare(ModuleListenerInvoker.java:93)
at weblogic.application.internal.flow.DeploymentCallbackFlow$1.next(DeploymentCallbackFlow.java:360)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)
at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:56)
at weblogic.application.internal.flow.DeploymentCallbackFlow.prepare(DeploymentCallbackFlow.java:46)
at weblogic.application.internal.BaseDeployment$1.next(BaseDeployment.java:615)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)
at weblogic.application.internal.BaseDeployment.prepare(BaseDeployment.java:191)
at weblogic.application.internal.BackgroundDeploymentService$1.next(BackgroundDeploymentService.java:164)
at weblogic.application.utils.StateMachineDriver.nextState(StateMachineDriver.java:26)
at weblogic.application.internal.BackgroundDeploymentService$BackgroundDeployAction.run(BackgroundDeploymentService.java:119)
at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:464)
at weblogic.work.ExecuteThread.execute(ExecuteThread.java:200)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:172)