DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT <http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11784>. ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND INSERTED IN THE BUG DATABASE.
http://nagoya.apache.org/bugzilla/show_bug.cgi?id=11784 Failure in loading class with destroy method of Servlet Summary: Failure in loading class with destroy method of Servlet Product: Tomcat 4 Version: 4.0.4 Final Platform: PC OS/Version: Windows 9x Status: NEW Severity: Normal Priority: Other Component: Catalina AssignedTo: [EMAIL PROTECTED] ReportedBy: [EMAIL PROTECTED] We are implementing Tomcat in our Production environment (on AIX 4.3.3), and have been facing a problem. In our Servlet init() function, we load a class dynamically using Class.forName(). The class being loaded resides in our WEB- INF/classes directory. The init() method works fine. But when we load another class in our destroy() method, we get a ClassNotFoundException. Both classes reside in the same WEB-INF/classes directory. This problem occurs only when the classes are in WEB-INF/classes directory. If we put the classes in a JAR file and place the JAR file in WEB-INF/lib, the problem goes away. I managed to reproduce the problem on my PC (running on Windows 98) by creating a small test servlet. The code for the servlet and the helper classes are given below: Try class: ---------- import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class Try extends HttpServlet { public void init() throws ServletException { getServletContext().log("Try initialized"); try { Class.forName("Test1"); } catch(Exception e) { getServletContext().log("Caught exception" + e); } } public void destroy() { getServletContext().log("Try destroyed"); try { Class.forName("Test2"); } catch(Exception e) { getServletContext().log("Caught exception" + e); } } public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/plain"); PrintWriter writer = response.getWriter(); writer.println("Hello World"); } } Test1 class: ------------ public class Test1 { public void sayHello() { System.out.println("In Test1"); } } Test2 class: ------------ public class Test2 { public void sayHello() { System.out.println("In Test2"); } } Output from log file: --------------------- 2002-08-16 23:39:09 StandardHost[localhost]: Installing web application at context path /dm from URL file:C:\Program Files\Apache Tomcat 4.0\webapps\dm 2002-08-16 23:39:09 WebappLoader[/dm]: Deploying class repositories to work directory C:\Program Files\Apache Tomcat 4.0\work\Standalone\localhost\dm 2002-08-16 23:39:09 StandardManager[/dm]: Seeding random number generator class java.security.SecureRandom 2002-08-16 23:39:09 StandardManager[/dm]: Seeding of random number generator has been completed 2002-08-16 23:39:09 ContextConfig[/dm]: Missing application web.xml, using defaults only 2002-08-16 23:39:09 ContextConfig[/dm]: Added certificates -> request attribute Valve 2002-08-16 23:39:09 StandardWrapper[/dm:default]: Loading container servlet default 2002-08-16 23:39:09 default: init 2002-08-16 23:39:09 StandardWrapper[/dm:invoker]: Loading container servlet invoker 2002-08-16 23:39:09 invoker: init 2002-08-16 23:39:09 jsp: init 2002-08-16 23:39:09 Internal Error: File /WEB-INF/web.xml not found 2002-08-16 23:39:18 org.apache.catalina.INVOKER.Try: init 2002-08-16 23:39:18 Try initialized 2002-08-16 23:39:45 StandardHost[localhost]: Removing web application at context path /manager 2002-08-16 23:39:45 StandardHost[localhost]: Removing web application at context path /dm 2002-08-16 23:39:45 Try destroyed 2002-08-16 23:39:45 Caught exceptionjava.lang.ClassNotFoundException: Test2 -- To unsubscribe, e-mail: <mailto:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>
