Shouldn't the struts ActionServlet be calling setClassLoader() or
setUseContextClassLoader()? When I move commons-digester.jar and
commons-collections.jar to the ejb classpath where they are available to
both EJBs and struts, the the digester can't find ActionFormBean and all of
the other struts classes that it looks for (because they are in the child
classloader of the ejb classloader). Moving struts.jar to the ejb classpath
would not help because the classes that extend the struts classes would not
be visable to the ActionServlet.

Maybe there should be an initparam option that tells the ActionServlet to
call setUseContextClassLoader?

Hal

-----Original Message-----
From: craigmcc@localhost [mailto:craigmcc@localhost]On Behalf Of Craig
R. McClanahan
Sent: Tuesday, December 11, 2001 3:05 PM
To: Struts Developers List; Deadman, Hal
Subject: Re: using digester and struts in an EAR file


On Tue, 11 Dec 2001, Deadman, Hal wrote:

> Date: Tue, 11 Dec 2001 14:43:21 -0500
> From: "Deadman, Hal" <[EMAIL PROTECTED]>
> Reply-To: Struts Developers List <[EMAIL PROTECTED]>,
>      "Deadman, Hal" <[EMAIL PROTECTED]>
> To: 'Struts Dev List' <[EMAIL PROTECTED]>
> Subject: using digester and struts in an EAR file
>
> I have a web app and ejb jar files combined in an ear file. If I want to
use
> struts in the war file and the digester in some of the ejbs, I have a
> problem because the war classloader is a child of the ejb classloader (at
> least in Weblogic 6.1) which means classes loaded by the ejb class loader
> can't see the webapp's classes including the classes in struts.jar.
>
> If I put the commons-digester.jar in the ejb classpath (via the
Manifest.mf
> Classpath:) then when the struts-config.xml is parsed the digester won't
be
> able to find struts classes. If I leave commons-digester.jar in the webapp
> lib directory then the ejbs that want to use it can't see the digester
> classes.
>
> Am I missing something? Is there any way that the Digester could be told
> which class loader to use when it instantiates objects that it's looking
> for? Maybe then the ActionServlet could tell the Digester to use the
> ActionServlet classloader which should allow the Digester to find all the
> classes in the webapp? Then I could include common-digester.jar in both
the
> ejb classpath and the webapp classpath.
>
> Has anyone else run into this problem?
>

I take it you are using nightly builds of Struts for this (and therefore
a current build of Digester from commons)?

If so, you have two options (assuming that commons-digester.jar is in a
shared repository in your server):

* Call digester.setClassLoader() to set the class loader you want Digester
  to use for loading application classes.  Normally, this would be the
  class loader for your web application, which can be more easily
  accessed by the second option -- but you can set any class loader
  you need.

* Call digester.setUseContextClassLoader(true) before calling parse().
  This tells Digester to use the thread context class loader (which will
  be the class loader for your web app) to load classes from, even if
  Digester itself is loaded from a shared class loader.


> Thanks, Hal
>

Craig

--
To unsubscribe, e-mail:   <mailto:[EMAIL PROTECTED]>
For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>

Reply via email to