> This is going to cause other problems. What if I have two wars that
> uses struts and each have a different version of the same action class
> because they are different releases of the same web application. If a
> struts.jar is referred to by a war manifest is should be only loaded
> by the servlet container class loader. That it is at the war level is
> just a packaging choice to avoid duplication of the jar in the wars.

So how do you recommend this be fixed?  The servlet containers do not appear
to utilize the Class-Path entry of the war's manifest.  I could create a
URLClassLoader that loads the war, the WEB-INF/classes and lib, and all
manifest entries.  It's parent classloader would be a UnifiedClassLoader
(perhaps the current thread's context loader?).

> This again comes back to the fact that the packaging structure should
> not be the sole dictator of the class loading heirarchy.

I agree.  I think each deployment type should be able to dictate what url's
to expose to the UnifiedClassLoader, and which to keep privately within
child URLClassLoaders.  A simple hacked solution would be to remove the
createClassLoaders from DepoymentInfo, and place that responsibility in the
init methods of SubDeployer (with SubDeployerSupport providing the default
implementation).  I have been looking into a Deployer refactoring anyway...
I'll put some time into it this weekend, and present a list of requirements
/ proposed design for discussion.

-Larry

> Scott Stark
> Chief Technology Officer
> JBoss Group, LLC
> xxxxxxxxxxxxxxxxxxxxxxxx
> ----- Original Message -----
> From: "Larry Sanderson" <[EMAIL PROTECTED]>
> To: <[EMAIL PROTECTED]>
> Sent: Friday, April 19, 2002 8:42 AM
> Subject: Re: [JBoss-dev] [ jboss-Bugs-544848 ] EAR Deployments don't work
>
>
> > > I'm also running into a problem that may be related
> > > to this. I have a .war (or the .war embedded in a .ear
> > > properly referenced in application.xml ...
> > >
> > OK - A few questions.  From where are you accessing this resource (i.e.
> the location of the directory or jar file where the accessing class
lives).
> Is it in your WEB-INF/lib, WEB-INF/classes, sitting next to the war file?
> I'm going to assume that it is in the WEB-INF/lib directory, since the
only
> change I made since RC1 would affect nested archives (usually located in
> WEB-INF/lib).
> >
> > Second question... Have you ever tried this scenario with 3.0 beta,
prior
> to RC1?  I am interested to know if that worked.  From what I can tell
from
> the class history, I don't think this would have worked, but I may be
> mistaken.
> >
> > A brief explanation of the classloader hierarchy:
> > JBoss has a custom ClassLoader called the UnifiedClassLoader.
> ClassLoaders normally have a parent-child hierarchy, such that a child
> ClassLoader can "see" all classes loaded by the parent, but the parent
> cannot "see" those classes loaded by the child.  The UnifiedClassLoader
> throws that concept out the window. Any class loaded by a
UnifiedClassLoader
> can "see" every other class loaded by another UnifiedClassLoader,
regardless
> of the parent child relationship.
> >
> > My original changes (in the RC1 release):
> > The problem with war files is that Jetty and Tomcat use their own
> Classloaders to load up the war file.  (This includes the lib and classes
> directories within WEB-INF).  Since they are not using the
> UnifiedClassLoader, all of JBoss's normal classes can not see any of the
> files within the web archive.  So, if struts.jar was located "next to" the
> war file, it would be loaded by JBoss and the UnifiedClassLoader, and when
> it came time to access your struts Actions (within your war file's lib or
> classes directories), it would get a ClassNotFoundException.  This was the
> original problem on this thread.
> >
> > My most recent change:
> > Since all classes need to be able to see each other, the obvious
solution
> is to use the UnifiedClassLoader to load all classes.  The "fix" I put in
> since RC1 was released was to use the UnifiedClassLoader on all nested
> deployable archives.  This is (I think) exactly the way things were done
> prior to my work.  The only problem is that it left out the
WEB-INF/classes
> directory.
> >
> > The fix:
> > I just need to load WEB-INF/classes with a UnifiedClassLoader and your
> problem should be solved.  This is a fairly simple fix, and I will get it
in
> today.  I need to create some test cases to check all this, but that will
> have to wait for the weekend (Is it Friday already?)
> >
> > Sorry for the confusion.
> >
> > -Larry
> >
> > * * *
> >
> > View thread online:
> http://jboss.org/forums/thread.jsp?forum=66&thread=13076
> >
> > _______________________________________________
> > 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
>


_______________________________________________
Jboss-development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to