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]

Reply via email to