Re: shared resources - a final answer?

2003-04-01 Thread Pat McGroin
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

Re: Re: shared resources

2003-03-31 Thread Pat McGroin
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

RE: Re: shared resources

2003-03-31 Thread Shapira, Yoav

Howdy,
I believe the documentation is correct.

If you've searched this list's archives for topics like this one, you'll
find they come up all the time ;(.  I usually chime in with the
following:

What do you gain from sharing a jar across webapps?  With some notable
exceptions, e.g. a JDBC driver you want pooled using a pool defined in
server.xml, you don't gain much from sharing a jar.  Your deployment
becomes more complicated, and you can't use a true war file approach.
Disk space is cheap.  My philosophy is to not share jars in locations
like common/lib or shared/lib unless absolutely necessary.  Yes, this
does force you to pay extra attention to what versions of jars are
deployed along with your webapps, but this is something you have to pay
attention to anyways.

Yoav Shapira
Millennium ChemInformatics


-Original Message-
From: Pat McGroin [mailto:[EMAIL PROTECTED]
Sent: Monday, March 31, 2003 11:10 AM
To: Tomcat Users List
Cc: Paul Hsu
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

Re: Re: shared resources

2003-03-31 Thread Pat McGroin
Hello.

If the docs are correct, then why are my JAR files in $CATALINA_HOME/shared/lib not 
being loaded?
The utility class in the JAR file was loaded just fine when I placed the JAR in 
$CATALINA_HOME/common/lib, but the docs say this is not the right place to put it.

I need to share a few utility classes and a JDBC driver across all apps and would 
rather keep them in 1 place.

This looks like a bug.  I am using Tomcat 4.1.18 and am going to try 4.1.24 to see if 
that helps.
Has anyone else seen this behavior?

Thanks.


-Original Message-
From: Shapira, Yoav[EMAIL PROTECTED]
To: Tomcat Users List[EMAIL PROTECTED]
Date: Mon Mar 31 08:53:39 PST 2003
Subject: Re: shared resources


Howdy,
I believe the documentation is correct.

If you've searched this list's archives for topics like this one, you'll
find they come up all the time ;(.  I usually chime in with the
following:

What do you gain from sharing a jar across webapps?  With some notable
exceptions, e.g. a JDBC driver you want pooled using a pool defined in
server.xml, you don't gain much from sharing a jar.  Your deployment
becomes more complicated, and you can't use a true war file approach.
Disk space is cheap.  My philosophy is to not share jars in locations
like common/lib or shared/lib unless absolutely necessary.  Yes, this
does force you to pay extra attention to what versions of jars are
deployed along with your webapps, but this is something you have to pay
attention to anyways.

Yoav Shapira
Millennium ChemInformatics


-Original Message-
From: Pat McGroin [mailto:[EMAIL PROTECTED]
Sent: Monday, March 31, 2003 11:10 AM
To: Tomcat Users List
Cc: Paul Hsu
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

Re: shared resources

2003-03-30 Thread Pat McGroin
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

Re: shared resources

2003-03-30 Thread Paul Hsu
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

shared resources

2003-03-27 Thread Pat McGroin
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! 


___
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]



Re: shared resources

2003-03-27 Thread Craig R. McClanahan


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

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