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

Reply via email to