Alas, I am getting a little further, but still getting a deadlock. Below
please find the relavent stack traces. Here is my take on what they might
mean, in case it is interesting to you:
There are two relavent threads. One (the first stack trace) is trying to
load a class needed by a stateless session bean in an effor to deploy the
bean. The class does not exist in the bean's jar file, instead it exists in
a another archive called picasso.zip. The other (the second stack trace),
was spawned by a class found in picasso.zip. It is trying to load a class
from (I suspect) a third party jar file called osji.jar. Because there is a
seperate class loader for each archive, the deadlock becomes possible. Does
this sound right? (I am not really an expert at class loading, but learning
as I go :).
What makes this problem quite tricky (it seems to me) is that in both
threads the UnifiedClassLoader instance is _already locked_ by the time
_any_ of its methods are even executed.
What about this: instead of
/**
* We intercept the load class to know exactly the dependencies
* of the underlying jar.
*
* <p>Forwards request to {@link UnifiedLoaderRepository}.
*/
public Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized(this)
{
return repository.loadClass(name, resolve, this);
}
}
What if we did this:
/**
* We intercept the load class to know exactly the dependencies
* of the underlying jar.
*
* <p>Forwards request to {@link UnifiedLoaderRepository}.
*/
public Class loadClass(String name, boolean resolve)
throws ClassNotFoundException
{
synchronized(this.getClass())
{
return repository.loadClass(name, resolve, this);
}
}
Another observation: startup appears to be taking noticably longer than it
did with JBoss 2.4.x, even in parts of the startup process where I suspect
it is mostly just executing my code. The CPU just spikes like crazy.
Whenever I do a thread dump to check what it is up to, it always appears to
be trying to load a class. Startup time isn't the most important thing in
the world, but it does impact the speed of development (although I suspect
that if I really understood the power of the deploy/undeploy functionality
of JBoss 3, I wouldn't need to restart the server nearly so often...).
Anyway, I hope all of this helps. I'll be available all week to run any
tests you'd like, but then I start traveling for almost a month...
Alarik
"main" prio=5 tid=0xc7d640 nid=0x157 waiting for monitor entry
[0x93fd000..0x93ffdc0]
at java.lang.ClassLoader.loadClass(ClassLoader.java:286)
- waiting to lock <3329c48> (a
org.jboss.mx.loading.UnifiedClassLoader)
at
org.jboss.mx.loading.UnifiedClassLoader.loadClassLocally(UnifiedClassLoader.
java:180)
at
org.jboss.mx.loading.UnifiedLoaderRepository.loadClass(UnifiedLoaderReposito
ry.java:178)
at
org.jboss.mx.loading.UnifiedClassLoader.loadClass(UnifiedClassLoader.java:21
7)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
- locked <330edc0> (a org.jboss.mx.loading.UnifiedClassLoader)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:195)
at com.odi.ClassInfo.lookupClassInfoByName(ClassInfo.java:608)
at com.odi.ClassInfo.lookupClassInfoByName(ClassInfo.java:589)
at com.odi.ClassInfo.findAndRegister(ClassInfo.java:502)
at com.odi.ClassInfo.get(ClassInfo.java:483)
at
com.sknt.picasso.lib.gui.TableConfiguration.getClassInfoInstance(TableConfig
uration.java)
at
com.sknt.picasso.lib.gui.TableConfiguration.<clinit>(TableConfiguration.java
)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at $Proxy99.<clinit>(Unknown Source)
at java.lang.reflect.Constructor.newInstance(Native Method)
at java.lang.reflect.Proxy.newProxyInstance(Proxy.java:562)
at org.jboss.proxy.ejb.ProxyFactory.bindProxy(ProxyFactory.java:323)
at org.jboss.proxy.ejb.ProxyFactory.start(ProxyFactory.java:185)
at
org.jboss.ejb.StatelessSessionContainer.start(StatelessSessionContainer.java
:206)
at org.jboss.ejb.Container.invoke(Container.java:794)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at
org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.jav
a:867)
at $Proxy0.start(Unknown Source)
at
org.jboss.system.ServiceController.start(ServiceController.java:341)
- locked <327ce58> (a org.jboss.system.ServiceController)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy96.start(Unknown Source)
at org.jboss.ejb.EjbModule.startService(EjbModule.java:440)
at
org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:162)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at
org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.jav
a:867)
at $Proxy0.start(Unknown Source)
at
org.jboss.system.ServiceController.start(ServiceController.java:341)
- locked <327ce58> (a org.jboss.system.ServiceController)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy5.start(Unknown Source)
at org.jboss.ejb.EJBDeployer.start(EJBDeployer.java:394)
- locked <36b3ef8> (a org.jboss.ejb.EJBDeployer)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:690)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:525)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:488)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy4.deploy(Unknown Source)
at
org.jboss.deployment.scanner.URLDeploymentScanner.deploy(URLDeploymentScanne
r.java:405)
at
org.jboss.deployment.scanner.URLDeploymentScanner.scanDirectory(URLDeploymen
tScanner.java:586)
at
org.jboss.deployment.scanner.URLDeploymentScanner.scan(URLDeploymentScanner.
java:465)
- locked <36b9090> (a java.util.Collections$SynchronizedList)
- locked <36b8aa8> (a
org.jboss.deployment.scanner.URLDeploymentScanner)
at
org.jboss.deployment.scanner.AbstractDeploymentScanner.startService(Abstract
DeploymentScanner.java:237)
at
org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport.java:162)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at
org.jboss.system.ServiceController$ServiceProxy.invoke(ServiceController.jav
a:867)
at $Proxy0.start(Unknown Source)
at
org.jboss.system.ServiceController.start(ServiceController.java:341)
- locked <327ce58> (a org.jboss.system.ServiceController)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at org.jboss.util.jmx.MBeanProxy.invoke(MBeanProxy.java:174)
at $Proxy3.start(Unknown Source)
at org.jboss.deployment.SARDeployer.start(SARDeployer.java:281)
at org.jboss.deployment.MainDeployer.start(MainDeployer.java:690)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:525)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:488)
at org.jboss.deployment.MainDeployer.deploy(MainDeployer.java:470)
at java.lang.reflect.Method.invoke(Native Method)
at
org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(ReflectedMBeanDispat
cher.java:284)
at
org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:492)
at org.jboss.system.server.ServerImpl.doStart(ServerImpl.java:320)
at org.jboss.system.server.ServerImpl.start(ServerImpl.java:218)
at org.jboss.Main.boot(Main.java:142)
at org.jboss.Main$1.run(Main.java:375)
at java.lang.Thread.run(Thread.java:484)
"Thread-29" prio=5 tid=0xb59a6b0 nid=0xe6 waiting for monitor entry
[0xc6af000..0xc6afdc0]
at java.lang.ClassLoader.loadClass(ClassLoader.java:286)
- waiting to lock <330edc0> (a
org.jboss.mx.loading.UnifiedClassLoader)
at
org.jboss.mx.loading.UnifiedClassLoader.loadClassLocally(UnifiedClassLoader.
java:180)
at
org.jboss.mx.loading.UnifiedLoaderRepository.loadClass(UnifiedLoaderReposito
ry.java:178)
at
org.jboss.mx.loading.UnifiedClassLoader.loadClass(UnifiedClassLoader.java:21
7)
at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
- locked <3329c48> (a org.jboss.mx.loading.UnifiedClassLoader)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:120)
at com.odi.imp.Server.create(Server.java:106)
at com.odi.imp.ObjectManager.<init>(ObjectManager.java:4093)
at com.odi.Session.create(Session.java:502)
- locked <3887ac0> (a java.util.Hashtable)
at
com.sknt.picasso.lib.PicassoServerEnv.startJMS(PicassoServerEnv.java:393)
at
com.sknt.picasso.lib.PicassoServerEnv$TestJMS.run(PicassoServerEnv.java:771)
- locked <44893c8> (a com.sknt.picasso.lib.PicassoServerEnv$TestJMS)
at java.lang.Thread.run(Thread.java:484)
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]]On Behalf Of marc
> fleury
> Sent: Wednesday, April 24, 2002 10:36 AM
> To: [EMAIL PROTECTED]
> Subject: Re: [JBoss-dev] Workaround for JUNG's RFE and load deadlock
>
>
> Done,
>
> Dave please test
>
> Jung, thanks man
>
> marcf
>
>
> * * *
>
> View thread online:
> http://jboss.org/forums/thread.jsp?forum=66&thread=13851
>
> _______________________________________________
> Jboss-development mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-development
>
_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development