Return-Path: Delivered-To: apmail-commons-user-archive@www.apache.org Received: (qmail 94681 invoked from network); 4 Jan 2009 18:36:17 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 4 Jan 2009 18:36:17 -0000 Received: (qmail 76165 invoked by uid 500); 4 Jan 2009 18:36:13 -0000 Delivered-To: apmail-commons-user-archive@commons.apache.org Received: (qmail 76108 invoked by uid 500); 4 Jan 2009 18:36:13 -0000 Mailing-List: contact user-help@commons.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: "Commons Users List" Delivered-To: mailing list user@commons.apache.org Received: (qmail 76097 invoked by uid 99); 4 Jan 2009 18:36:12 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Jan 2009 10:36:12 -0800 X-ASF-Spam-Status: No, hits=-0.0 required=10.0 tests=SPF_PASS X-Spam-Check-By: apache.org Received-SPF: pass (athena.apache.org: domain of rahul.akolkar@gmail.com designates 64.233.182.184 as permitted sender) Received: from [64.233.182.184] (HELO nf-out-0910.google.com) (64.233.182.184) by apache.org (qpsmtpd/0.29) with ESMTP; Sun, 04 Jan 2009 18:36:06 +0000 Received: by nf-out-0910.google.com with SMTP id e27so2079720nfd.30 for ; Sun, 04 Jan 2009 10:35:44 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=gamma; h=domainkey-signature:received:received:message-id:date:from:to :subject:in-reply-to:mime-version:content-type :content-transfer-encoding:content-disposition:references; bh=8LYKOhGVYaZCBZ+54AI6I/WuNPf/j2WrVCLYkWF1OLU=; b=qAeCK85YUekxxgH3lXoTBbh2niiL7nxzOauoXOnu2up+TY4TuGg0QjdUY6V+BASztv HCjQaDJkVwwX3phS6qEbbZbPsgw3d6C/DogUQ+cOC6uxZXbsWcDc+zsCF99eytzE6SHr z/E50r1ePsyOIvI26X/XtIpwG+Zkh1HTzQfPc= DomainKey-Signature: a=rsa-sha1; c=nofws; d=gmail.com; s=gamma; h=message-id:date:from:to:subject:in-reply-to:mime-version :content-type:content-transfer-encoding:content-disposition :references; b=dIpOc0B9IjPb7rjEKNnV6OEYoh0Cq87ETfliwWGMZ94XRF6W6SOFtmAgz1t4HByoZ5 EEacgdzwtHenelRwq9eulGcIISaPL+qiuXIrG9C4U7Atmic/hWodt28/lIJEJGimN1G/ rDXvCWuRf7LqatqGZBAEWQ5onz2uwoOcpsUYY= Received: by 10.210.125.13 with SMTP id x13mr10267261ebc.48.1231094144843; Sun, 04 Jan 2009 10:35:44 -0800 (PST) Received: by 10.210.53.9 with HTTP; Sun, 4 Jan 2009 10:35:44 -0800 (PST) Message-ID: Date: Sun, 4 Jan 2009 13:35:44 -0500 From: "Rahul Akolkar" To: "Commons Users List" Subject: Re: Digester 1.8 classloader issue when using tomcat In-Reply-To: <21277655.post@talk.nabble.com> MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 7bit Content-Disposition: inline References: <21268177.post@talk.nabble.com> <21269147.post@talk.nabble.com> <21269213.post@talk.nabble.com> <21270210.post@talk.nabble.com> <21277655.post@talk.nabble.com> X-Virus-Checked: Checked by ClamAV on apache.org On Sun, Jan 4, 2009 at 10:47 AM, rmenon 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. 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 wrote: >>> >>> >>> >>> Rahul Akolkar wrote: >>>> >>>> On Sat, Jan 3, 2009 at 3:51 PM, rmenon 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? >>>> >>>> >>>> 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)? >>>> >>>> >>>> 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.) >>>>> >>>> >>>> >>>> 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 wrote: >>>>>>> >>>>>>> Can you please elaborate? Are you suggesting that I should just >>>>>>> package >>>>>>> all >>>>>>> three jar files in WEB-INF/lib? >>>>>>> >>>>>> >>>>>> >>>>>> If they are needed by the said web app, yes. >>>>>> >>>>>> -Rahul >>>>>> >>>>>> >>>>>>> Rahul Akolkar wrote: >>>>>>>> >>>>>>>> On Sat, Jan 3, 2009 at 2:14 PM, rmenon 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? >>>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> 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