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

Reply via email to