commons-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Rahul Akolkar" <rahul.akol...@gmail.com>
Subject Re: Digester 1.8 classloader issue when using tomcat
Date Sun, 04 Jan 2009 18:35:44 GMT
On Sun, Jan 4, 2009 at 10:47 AM, rmenon <rmenon.us@gmail.com> wrote:
>
> Thank you
> Now I understand what Rahul meant by "portable".  Chances of our changing
> web servers is slim.
>
> Well, if I had not used digester, I could have put the common war file in
> the shared/lib.  I am ok with not sharing digester itself but the fact that
> all the digester constructed classes need to be put in WEB-INF/lib seems to
> be a severe restriction to me.
<snip/>

Rather, its a strong recommendation.

Have you tried using the thread context class loader?

-Rahul


> By the way, has anyone done an analysis of how much it costs to duplicate
> the war files in terms of memory?
>
> Thanx again for the reply to you and Rahul.
>
> Menon
>
> jwcarman wrote:
>>
>> BeanUtils (which Digester uses) uses static variables, so sharing that
>> particular stuff across webapps can cause some trouble.  As Rahul
>> said, just put the stuff in your WEB-INF/lib directory.  It's more
>> portable that way (you can just plop your war file down in any other
>> web server if it's constructed this way).
>>
>> On Sat, Jan 3, 2009 at 5:27 PM, rmenon <rmenon.us@gmail.com> wrote:
>>>
>>>
>>>
>>> Rahul Akolkar wrote:
>>>>
>>>> On Sat, Jan 3, 2009 at 3:51 PM, rmenon <rmenon.us@gmail.com> wrote:
>>>>>
>>>>> Well,
>>>>> Can you please elaborate a bit more? My question is why should we
>>>>> reload
>>>>> the
>>>>> same classes multiple times for a jar file that is shared by multiple
>>>>> web
>>>>> apps?
>>>> <snip/>
>>>>
>>>> Generally you want your apps to be self-contained. The servlet
>>>> specification talks about the web app and its directory structure,
>>>> shared stuff is often container specific (I did mention portability).
>>>>
>>>>
>>>> Well, from what I understand, at least in tomcat (which is what we use),
>>>> there is a shared/lib
>>>> directory for jars that are common across applications. These jars need
>>>> not be container specific.
>>>>
>>>>
>>>> And I am not sure what you mean portability? Could you explain a bit
>>>> more?
>>>>
>>>>> Also, if I do not use digester, then this is not an issue - so what
>>>>> are people who use digester doing (apart from duplicating war files)?
>>>> <snap/>
>>>>
>>>> I think you mean duplicating libraries in war files for different web
>>>> apps with similar application dependencies.
>>>>
>>>> I meant duplicating a jar file that is shared across applications in
>>>> each
>>>> of the applications's WEB-INF/lib
>>>> directories. I would think that there should be a way to put them in
>>>> shared/lib directory and still be able to use digester to construct
>>>> them.
>>>>
>>>>
>>>>> I do
>>>>> not like the idea of duplicating same war files for each web app - so
>>>>> is
>>>>> there a good reason to do that (apart from being a workaround for
>>>>> problems
>>>>> with digester.)
>>>>>
>>>> <snap/>
>>>>
>>>> I still think you mean adding the same jars to each WEB-INF/lib -- its
>>>> portable and its safe.
>>>>
>>>> -Rahul
>>>>
>>>>
>>>>>
>>>>>
>>>>> Rahul Akolkar wrote:
>>>>>>
>>>>>> On Sat, Jan 3, 2009 at 3:44 PM, rmenon <rmenon.us@gmail.com>
wrote:
>>>>>>>
>>>>>>> Can you please elaborate? Are you suggesting that I should just
>>>>>>> package
>>>>>>> all
>>>>>>> three jar files in WEB-INF/lib?
>>>>>>>
>>>>>> <snip/>
>>>>>>
>>>>>> If they are needed by the said web app, yes.
>>>>>>
>>>>>> -Rahul
>>>>>>
>>>>>>
>>>>>>> Rahul Akolkar wrote:
>>>>>>>>
>>>>>>>> On Sat, Jan 3, 2009 at 2:14 PM, rmenon <rmenon.us@gmail.com>
wrote:
>>>>>>>>>
>>>>>>>>> Hi
>>>>>>>>> I have three jar files: common, webapp-common, my-webapp.jar.
>>>>>>>>> common- can be used by non web apps
>>>>>>>>> webapp-common - common stuff shared by web apps.
>>>>>>>>> my-webapp.jar - a particular web app.
>>>>>>>>>
>>>>>>>>>  I am using digester to build my classes for the app
my-webapp.jar.
>>>>>>>>> In
>>>>>>>>> the
>>>>>>>>> digester rules, I have classes that are in all three
jar files.
>>>>>>>>> Now,
>>>>>>>>> ideally
>>>>>>>>> speaking, I should be able to put the webapp-cmmon and
common jar
>>>>>>>>> files
>>>>>>>>> in
>>>>>>>>> the shared/lib and the my-webapp.jar in WEB-INF/lib.
However, that
>>>>>>>>> results
>>>>>>>>> in the digester failing with "NoClassDefFoundException".
The
>>>>>>>>> problem
>>>>>>>>> goes
>>>>>>>>> away if we put all three jars in the WEB-INF/lib since
the digester
>>>>>>>>> class
>>>>>>>>> loader can see those classes. However, the common jar
is already in
>>>>>>>>> the
>>>>>>>>> shared/lib being used by other apps. I added some new
"common"
>>>>>>>>> stuff
>>>>>>>>> for
>>>>>>>>> the
>>>>>>>>> my-webapp.jar and hence running into this issue.
>>>>>>>>>
>>>>>>>>> My latest thinking is to separate out the portion of
the classes
>>>>>>>>> being
>>>>>>>>> used
>>>>>>>>> by the my-webapp.jar from the common jar file into its
own jar.
>>>>>>>>> Then
>>>>>>>>> I
>>>>>>>>> can
>>>>>>>>> bundle the webapp-common ahd my-webapp.jar in to the
WEBINF/lib and
>>>>>>>>> retain
>>>>>>>>> the common jar in the shared/lib. Is there a better approach?
What
>>>>>>>>> is
>>>>>>>>> the
>>>>>>>>> best practice in this scenario. Does someone have an
idea of
>>>>>>>>> overhead
>>>>>>>>> in
>>>>>>>>> terms of performance etc if we "duplicate" jar files
in each app
>>>>>>>>> instead
>>>>>>>>> of
>>>>>>>>> sharing them in common/lib? What I do not like about
this issue is
>>>>>>>>> that
>>>>>>>>> I
>>>>>>>>> think this issue would not be there if I was creating
objects
>>>>>>>>> without
>>>>>>>>> using
>>>>>>>>> digester - so a way to use the approach (where I can
access the
>>>>>>>>> common
>>>>>>>>> classes from digester) would be really ideal in my opinion.
>>>>>>>>>
>>>>>>>>> I did search the google and also this forum - I note
that someone
>>>>>>>>> suggested
>>>>>>>>> to always bundle each jar files within the web app itself
>>>>>>>>> separately.
>>>>>>>>> What
>>>>>>>>> is the rationale for that?
>>>>>>>>>
>>>>>>>> <snip/>
>>>>>>>>
>>>>>>>> Portability, potential trouble with statics etc. Also, digester
>>>>>>>> itself
>>>>>>>> (and beanutils in particular) should never be shared.
>>>>>>>>
>>>>>>>> -Rahul
>>>>>>>>
>>>>

---------------------------------------------------------------------
To unsubscribe, e-mail: user-unsubscribe@commons.apache.org
For additional commands, e-mail: user-help@commons.apache.org


Mime
View raw message