Hello,
I just started fishing some weeks ago and I had similar difficulties.
I don't know if there is an elegant way to catch some nice fish, but I can
explain you the way I got it to work. I think it is a problem of Tomcats
caches. (Not really a problem, because once an application is developped,
the servlets won't change very often).
Tomcat has a ${tomcat-home}\work directory, were it keeps many files of wich
I do not really understand very much. But it happens that after I deleted
this directory (or a relevant subpath - for tomcat 3.2 this is something
like work\localhost_8080%2Fmyapplication), my changes to servlets were
visible. Sometimes a simple restart helped, too.
All this fishing experiance was done with Tomcat 3.3 and 3.2 but I think it
should be similar with Tomcat 4.
Have a fine fish meal.
Peter
> Hello,
> Tomcat 4.0.3 is apparently not reloading a recompiled servlet. According
> to the docs, this should be the default behavior.
> Interestingly, it WILL load a new servlet.
> I have 2 questions, of the "where's my fish" sort and of the "how do I
> fish" sort.
> Where's my fish: why isn't Tomcat reloading my changed servlet? I have
> verified that the class file has changed by checking the timestamp, so
> I'm pretty sure it's not a build problem.
> How do I fish: what is a reasonable way to troubleshoot this problem?
> While I would love to have a fish right now, I am perfectly willing to
> learn how to fish and catch my own.
> Some fishing I've already done:
> 1) tried restarting tomcat. Picks up the new class!
> 2) tried restarting the browser. No go.
> 3) examined the tomcat logs. Nothing interesting.
> 4) examined the servlet class file in the webapps dir. Yup, it sure
> changed.
> 5) tried adding a second servlet. Tomcat picks it up!
> 6) tried changing the second servlet. No go.
> I *suspect* that in the murky depths of this problem swims an enormous
> caching flounder. Is its name Tomcat 4.0.3? Is it IE 5? Either way, I
> want to hook it, filet it, and have it for dinner tonight.
> Thanks for your help,
> Josh Rehman
> Here are some more facts for you:
> Hardware: Dell Inspiron 7000 Laptop - P2-366 256M/10G
> OS: MS Windows 2000 (NT5) Professional SP2 1024x768x64k
> Java: Sun J2SE 1.3.1_01 - c:\java\jdk131
> Tomcat: 4.0.3 - c:\java\jakarta-tomcat-4.0.3
> %CATALINA_HOME%\conf\web.xml is stock
> %CATALINA_HOME%\conf\server.xml is stock
> Environment variables:
> CATALINA_HOME=C:\java\jakarta-tomcat-4.0.3
> JAVA_HOME=c:\java\jdk131_01
> JIKES_HOME=c:\java\jikes114
> ANT_HOME=c:\java\ant14
> Project organization:
> Deploy root: %CATALINA_HOME%\webapps\tomcat40
> \WEB-INF\web.xml
> \WEB-INF\classes\joshbrain\tomcat40\FirstServlet.class
> \WEB-INF\classes\joshbrain\tomcat40\SecondServlet.class
> Contents of web.xml:
> <!DOCTYPE web-app
> PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
> "http://java.sun.com/dtd/web-app_2_3.dtd">
> <web-app>
> <display-name>Tomcat 4.0.3 Evaluation Application</display-name>
> <description>
> This is version 1.0 of a simple evaluation application
> written by Josh Rehman ([EMAIL PROTECTED]).
> </description>
> <context-param>
> <param-name>webmaster</param-name>
> <param-value>[EMAIL PROTECTED]</param-value>
> <description>
> The EMAIL address of the administrator to whom questions
> and comments about this application should be addressed.
> </description>
> </context-param>
> <servlet>
> <servlet-name>first</servlet-name>
> <servlet-class>joshbrain.tomcat.FirstServlet</servlet-class>
> </servlet>
> <servlet>
> <servlet-name>second</servlet-name>
> <servlet-class>joshbrain.tomcat.SecondServlet</servlet-class>
> </servlet>
> <servlet-mapping>
> <servlet-name>first</servlet-name>
> <url-pattern>/first</url-pattern>
> </servlet-mapping>
> <servlet-mapping>
> <servlet-name>second</servlet-name>
> <url-pattern>/second</url-pattern>
> </servlet-mapping>
> <session-config>
> <session-timeout>30</session-timeout> <!-- 30 minutes -->
> </session-config>
> </web-app>
> Contents of FirstServlet.java (SecondServlet similar):
> /*
> * FirstServlet.java
> *
> * Created on March 18, 2002, 4:56 PM
> */
> package joshbrain.tomcat;
> import javax.servlet.*;
> import javax.servlet.http.*;
> /**
> *
> * @author Josh Rehman
> * @version
> */
> public class FirstServlet extends HttpServlet
> {
> public void init(ServletConfig config) throws ServletException
> {
> super.init(config);
> }
> protected void processRequest(HttpServletRequest request,
> HttpServletResponse response)
> throws ServletException, java.io.IOException
> {
> response.setContentType("text/html");
> java.io.PrintWriter out = response.getWriter();
> out.println("<html>");
> out.println("<head>");
> out.println("<title>Servlet</title>");
> out.println("</head>");
> out.println("<body>");
> out.println("<b>This is the string that will change!</b>");
> out.println("</body>");
> out.println("</html>");
> out.close();
> }
> protected void doGet(HttpServletRequest request, HttpServletResponse
> response)
> throws ServletException, java.io.IOException
> {
> processRequest(request, response);
> }
> protected void doPost(HttpServletRequest request,
> HttpServletResponse response)
> throws ServletException, java.io.IOException
> {
> processRequest(request, response);
> }
> }
> My ant build script:
> <project name="Tomcat 4.0.3 Evaluation" default="compile" basedir=".">
> <property file="build.properties"/>
> <property file="${user.home}/build.properties"/>
> <property name="app.name" value="tomcat40"/>
> <property name="app.version" value="1.0"/>
> <property name="build.home" value="build"/>
> <!--<property name="catalina.home" value="../../../.."/> UPDATE THIS!
> -->
> <property name="deploy.home"
> value="${catalina.home}/webapps/${app.name}"/>
> <property name="dist.home" value="dist"/>
> <property name="compile.debug" value="true"/>
> <property name="compile.deprecation" value="false"/>
> <property name="compile.optimize" value="true"/>
> <path id="compile.classpath">
> <pathelement location="${catalina.home}/common/classes"/>
> <fileset dir="${catalina.home}/common/lib">
> <include name="*.jar"/>
> </fileset>
> <pathelement location="${catalina.home}/classes"/>
> <fileset dir="${catalina.home}/lib">
> <include name="*.jar"/>
> </fileset>
> </path>
> <target name="all" depends="clean,compile"
> description="Clean build and dist, then compile"/>
> <target name="clean"
> description="Delete old build and dist directories">
> <delete dir="${build.home}"/>
> <delete dir="${dist.home}"/>
> </target>
> <target name="compile" depends="prepare"
> description="Compile Java sources">
> <!-- Compile Java classes as necessary -->
> <mkdir dir="${build.home}/WEB-INF/classes"/>
> <javac srcdir="src"
> destdir="${build.home}/WEB-INF/classes"
> debug="${compile.debug}"
> deprecation="${compile.deprecation}"
> optimize="${compile.optimize}">
> <classpath refid="compile.classpath"/>
> </javac>
> <!-- Copy associated resource files -->
> <copy todir="${build.home}/WEB-INF/classes">
> <fileset dir="src" includes="**/*.properties"/>
> </copy>
> </target>
> <target name="deploy" depends="compile"
> description="Deploy application to servlet container">
> <!-- Copy the contents of the build directory -->
> <mkdir dir="${deploy.home}"/>
> <copy todir="${deploy.home}">
> <fileset dir="${build.home}"/>
> </copy>
> </target>
> <target name="dist" depends="deploy,javadoc"
> description="Create binary distribution">
> <!-- Copy documentation subdirectory -->
> <copy todir="${dist.home}/doc">
> <fileset dir="doc"/>
> </copy>
> <!-- Create application JAR file -->
> <jar jarfile="${dist.home}/${app.name}.war"
> basedir="${deploy.home}"/>
> <!-- Copy additional files to ${dist.home} as necessary -->
> </target>
> <target name="javadoc" depends="compile" description="Create Javadoc
> API documentation">
> <mkdir dir="${dist.home}/doc/api"/>
> <javadoc sourcepath="src"
> destdir="${dist.home}/doc/api"
> packagenames="*">
> <classpath refid="compile.classpath"/>
> </javadoc>
> </target>
> <target name="prepare">
> <!-- Create build directory and copy static content -->
> <mkdir dir="${build.home}"/>
> <copy todir="${build.home}">
> <fileset dir="web"/>
> </copy>
> </target>
> </project>
> Contents of my proj_home\build.properties file:
> catalina.home=c\:/java/jakarta-tomcat-4.0.3
> build.compiler=jikes
> For development, I am using Netbeans 3.3.1. However, I am NOT using the
> integrated Tomcat 3.2 container.
> Here are the log contents generated in the following way:
> Delete all logs
> Start tomcat
> Browse to http://localhost:8080/first
> Browse to http://localhost:8080/second
> Modify FirstServlet
> Ant all, ant deploy
> Browse to http://localhost:8080/first
> Verify no change
> Stop tomcat
> I have attached the log files to this message.
--
To unsubscribe: <mailto:[EMAIL PROTECTED]>
For additional commands: <mailto:[EMAIL PROTECTED]>
Troubles with the list: <mailto:[EMAIL PROTECTED]>