Can anyone tell me which is right? Do shared resources across applications go in $CATALINA_HOME/common or $CATALINA_HOME/shared?
The HOWTO doc. says the shared dir. is the place to put these resources. http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html However, Paul tells me that I need to put jar files under $CATALINA_HOME/common directory since they can be seen by both engine and application and that $CATALINA_HOME/shared directory are only available to Catalina engine, not my applications. I do not have the WROX book he refers to. My test worked with a shared JAR file in the common dir. but failed with the JAR file in the shared dir. so it appears the doc. is wrong. Is this a known bug or am I reading the documentation wrong? Thanks. -----Original Message----- From: "Paul Hsu"<[EMAIL PROTECTED]> To: "Pat McGroin"<[EMAIL PROTECTED]> Date: Mon Mar 31 08:53:29 PST 2003 Subject: Re: shared resources >Todd, > >You are right based on HOWTO document. The information I provided to you is >from wrox's professional tomcat book. But your case seems tell us the HOWTO >document is wrong. How do you think? > > >Paul > > >----- Original Message ----- >From: "Pat McGroin" <[EMAIL PROTECTED]> >To: "Tomcat Users List" <[EMAIL PROTECTED]> >Cc: "Paul Hsu" <[EMAIL PROTECTED]> >Sent: Monday, March 31, 2003 8:10 AM >Subject: Re: Re: shared resources > > >> Paul, >> >> That worked *BUT* the documentation says otherwise: >> http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html >> >> "For classes and resources that must be shared across all web >applications, place unpacked classes and resources under >$CATALINA_HOME/shared/classes, or place JAR files containing those classes >and resources under $CATALINA_HOME/shared/lib." >> >> "This class loader contains additional classes that are made visible to >both Tomcat internal classes and to all web applications. Normally, >application classes should NOT be placed here." >> >> The $CATALINA_HOME/common/lib contains such JAR files as ant.jar and >servlet.jar so it does not seem like the place for my shared JAR files. >> >> Is the documentation wrong or is this a bug? >> Or am I just reading the documentation incorrectly? >> >> Thanks, >> Todd >> >> >> -----Original Message----- >> From: "Paul Hsu"<[EMAIL PROTECTED]> >> To: "Tomcat Users List"<[EMAIL PROTECTED]> >> Date: Sun Mar 30 19:20:44 PST 2003 >> Subject: Re: shared resources >> >> >Todd, >> > >> >You need to put your jar file under $CATALINA_HOME/common direcotry. >> >$CATALINA_HOME/shared directory are only available to Catalina engine, >not >> >application but /common can be seen by both engine and application. >> > >> >Paul >> >----- Original Message ----- >> >From: "Pat McGroin" <[EMAIL PROTECTED]> >> >To: <[EMAIL PROTECTED]> >> >Sent: Sunday, March 30, 2003 5:32 PM >> >Subject: Re: shared resources >> > >> > >> >> Craig, >> >> >> >> Thanks again for the information. >> >> The info. you've supplied has been very useful. >> >> However, my problem remains: >> >> >> >> I cannot access the class that resides in a JAR file (utilities.jar) in >> ><tomcat_home>/shared/lib and get a java.lang.NoClassDefFoundError >> >> >> >> I am spinning my wheels on this so hopefully some details will shed >some >> >light on my problem. I wrote a very simple servlet that attempts to use >the >> >class in the shared dir. >> >> >> >> ---- >> >> import com.myco.utilities.CASDate; >> >> import javax.servlet.http.HttpServlet; >> >> import javax.servlet.http.HttpServletRequest; >> >> import javax.servlet.http.HttpServletResponse; >> >> >> >> public class Test1 extends HttpServlet { >> >> // >> >> public void doGet(HttpServletRequest request, HttpServletResponse >> >response) throws javax.servlet.ServletException, java.io.IOException { >> >> >> >> System.out.println("GET method of Test1 invloked"); >> >> performTask(request, response); >> >> } >> >> // >> >> public void doPost(HttpServletRequest request, HttpServletResponse >> >response) throws javax.servlet.ServletException, java.io.IOException { >> >> >> >> System.out.println("POST method of Test1 invloked"); >> >> performTask(request, response); >> >> } >> >> /** >> >> * Test the use of a shared class. >> >> */ >> >> public void performTask(HttpServletRequest request, HttpServletResponse >> >response) { >> >> >> >> try { >> >> java.io.PrintWriter pw = response.getWriter(); >> >> CASDate today = new CASDate(); >> >> pw.println("CASDate today is " + today.toString()); >> >> pw.println("CASDate class loaded..."); >> >> } >> >> catch(Throwable theException) { >> >> System.out.println("Error..."); >> >> theException.printStackTrace(System.out); >> >> } >> >> } >> >> } >> >> ---- >> >> This is the utility class (some getXXX methods deleted for brevity): >> >> ---- >> >> package com.myco.utilities; >> >> >> >> import java.util.Calendar; >> >> import java.util.GregorianCalendar; >> >> >> >> public class CASDate { >> >> private int ccc = 0; >> >> private int yyy = 0; >> >> private int mmm = 0; >> >> private int ddd = 0; >> >> private int time = 0; >> >> /** >> >> * Default constructor is to create CAS date using the current date. >> >> */ >> >> public CASDate() { >> >> super(); >> >> GregorianCalendar cal = new GregorianCalendar(); >> >> ccc = 20; >> >> yyy = cal.get(Calendar.YEAR) - 2000; >> >> mmm = cal.get(Calendar.MONTH) + 1; >> >> ddd = cal.get(Calendar.DAY_OF_MONTH); >> >> } >> >> /** >> >> * Return a string in MM/DD/CCYY format. >> >> */ >> >> public String toString() { >> >> String returnValue = getMonth() + "/" + getDay() + "/" + >> >getYearAndCentury(); >> >> return returnValue; >> >> } >> >> } >> >> ---- >> >> >> >> The error I get is: >> >> java.lang.NoClassDefFoundError: com/myco/utilities/CASDate >> >> >> >> When I moved utilities.jar to <webapp>/WEB-INF/lib the error goes away. >> >> I hope this provides some clues as to what is going wrong. At this >point >> >it looks like a bug but I hope I'm wrong. I am using Tomcat 4.1.18. >> >> >> >> Any help is GREATLY appreciated. >> >> >> >> Thanks, >> >> Todd >> >> >> >> >> >> -----Original Message----- >> >> From: "Craig R. McClanahan"<[EMAIL PROTECTED]> >> >> To: "Pat McGroin"<[EMAIL PROTECTED]> >> >> Date: Thu Mar 27 13:53:24 PST 2003 >> >> Subject: Re: shared resources >> >> >> >> > >> >> > >> >> >On Thu, 27 Mar 2003, Pat McGroin wrote: >> >> > >> >> >> Date: Thu, 27 Mar 2003 12:57:03 -0800 (PST) >> >> >> From: Pat McGroin <[EMAIL PROTECTED]> >> >> >> To: Craig R. McClanahan <[EMAIL PROTECTED]> >> >> >> Subject: Re: Re: shared resources >> >> >> >> >> >> Craig, >> >> >> >> >> >> Thanks very much for the detailed reply. >> >> >> That is very useful information for getting at resource files. >> >> >> However, my problem is much simpler. I am simply getting >> >java.lang.NoClassDefFoundError errors when I try to use classes in JAR >files >> >in the <tomcat_home>/shared/lib directory. >> >> >> When I move the jar files to my <webapp root>/WEB-INF/lib the >classes >> >are loaded just fine and I don't see these errors. >> >> >> >> >> > >> >> >One likely cause for this sort of thing: if a class in your "problem >> >> >child" JAR file is itself loaded from the shared class loader, but >tries >> >> >to access a different class that is in the webapp class loader, you'll >> >get >> >> >exactly this sort of problem. >> >> > >> >> >Note that NoClassDefFound errors do *not* say that the class named in >the >> >> >exception report cannot be found (that would be a >> >ClassNotFoundException). >> >> >Instead, it means that one of the classes that this class depends on >> >> >cannot be found. >> >> > >> >> >> Thanks, >> >> >> Todd >> >> > >> >> >Craig >> >> > >> >> >> >> >> >> >> >> >> -----Original Message----- >> >> >> From: "Craig R. McClanahan"<[EMAIL PROTECTED]> >> >> >> To: "Tomcat Users List"<[EMAIL PROTECTED]> >> >> >> Date: Thu Mar 27 12:33:57 PST 2003 >> >> >> Subject: Re: shared resources >> >> >> >> >> >> > >> >> >> > >> >> >> >On Thu, 27 Mar 2003, Pat McGroin wrote: >> >> >> > >> >> >> >> Date: Thu, 27 Mar 2003 11:20:49 -0800 (PST) >> >> >> >> From: Pat McGroin <[EMAIL PROTECTED]> >> >> >> >> Reply-To: Tomcat Users List <[EMAIL PROTECTED]> >> >> >> >> To: [EMAIL PROTECTED] >> >> >> >> Subject: shared resources >> >> >> >> >> >> >> >> Hello. >> >> >> >> >> >> >> >> I am trying to reference a few JAR files from an out-of-process >> >Tomcat >> >> >> >> 4.1.18 application. >> >> >> >> >> >> >> >> The Tomcat 4.1 documentation says that unpacked shared classes >and >> >> >> >> resources will be loaded out of the <tomcat_root>/shared/classes >> >> >> >> directory and packed shared resources are loaded out of >> >> >> >> <tomcat_root>/shared/lib: >> >> >> >> >> >> >> >> >> >http://jakarta.apache.org/tomcat/tomcat-4.1-doc/class-loader-howto.html >> >> >> >> >> >> >> >> I put a few JAR files in <tomcat_root>/shared/lib but they are >never >> >> >> >> loaded. I can move them into my <webapp root>/WEB-INF/lib and >they >> >are >> >> >> >> loaded without problems. >> >> >> >> >> >> >> >> Am I misunderstanding how resources are found in Tomcat 4.1? The >> >> >> >> context I am using is not within <tomcat_home>/webapps. It is in >an >> >> >> >> entirely diferent directory. Could that be the problem? >> >> >> >> >> >> >> >> I posted a simliar question a few days ago but was not yet >properly >> >> >> >> subscribed so I apologize for the duplication. >> >> >> >> >> >> >> >> Thanks in advance for any help! >> >> >> >> >> >> >> > >> >> >> >When accessing resources with getResource()/getResourceAsStream(), >it >> >is >> >> >> >important to remember that there are two different implementations >of >> >> >> >these things, which operate quite differently: >> >> >> > >> >> >> >ServletContext.getResource() and >ServletContext.getResourceAsStream(): >> >> >> >* Can be used to access static resources within your web >application >> >> >> >* Resources is specified as a context-relative URI starting with >"/" >> >> >> >* For example, to read the web.xml file as a resource, you would >use >> >> >> > a resource path of "/WEB-INF/web.xml" >> >> >> >* It doesn't matter whether your webapp is running from an unpacked >> >> >> > directory or a WAR file, or where the directory/WAR is actually >> >> >> > located. >> >> >> > >> >> >> >ClassLoader.getResource() and ClassLoader.getResourceAsStream(): >> >> >> >* Can be used to access resources embedded within the class loader >> >> >> > (or class loader hierarchy) >> >> >> >* For a standalone app, that means somewhere on your classpath >> >> >> >* For a webapp installed in Tomcat 4.1, and assuming you're >starting >> >> >> > with the webapp class loader, it checks there and up the hierarchy >> >> >> > as described in the Tomcat documentation. >> >> >> >* Resource path must match the directory or package structure of >> >> >> > the resource to be retrieved. >> >> >> >* Resource resolution works just like class loading resolution in >> >> >> > terms of which class loader is searched first. >> >> >> > >> >> >> >To access a resource from a JAR file in shared/lib, then, you will >> >want to >> >> >> >make sure you're using the second kind of resource retrieval >methods. >> >> >> >After getting the right methods called, the next most common >problem >> >is >> >> >> >getting your resource path to match the nested directory structure >> >within >> >> >> >whatever JAR file is holding the resource. >> >> >> > >> >> >> >Craig ___________________________________________________ GO.com Mail Get Your Free, Private E-mail at http://mail.go.com --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]