Dear Chuck Caldarale & Others,

Thank you for your response!

Chuck - Your e-mail was very informative... I did remove the
servlet-apis from my %CATALINA_HOME%/mywebapp/%WEB-INF/lib directory.
The only reason I had it there was because I use Eclipse for
development and its easier to configure the build path by clicking on
"Add Jar" rather than clicking on "Add External Jar". But I took  your
advice and removed it and now use "Add External Jar".

Here's my situation...

I changed my Ant build script to move the log4j.properties file into
my WEB-INF/classes dir. Also, my log4j-1.2.9.jar gets moved inside my
WEB-INF/lib dir. But for some odd reason, when I run Tomcat, it
doesn't seem to know where my log4j.properties file is! My
Log4jInitServlet seems to have the path wrong!

It looks inside:

C:\DevTools\tomcat\jakarta-tomcat-5.5.9\bin\WEB-INF\classes\log4j.properties

instead of:

C:\DevTools\tomcat\jakarta-tomcat-5.5.9\mywebapp\WEB-INF\classes\log4j.properties.

Furthermore, it throws a NullPointerException but at the same time,
right afterwards, it logs my XmlConfigInitServlet (I have it set
there!).

Here's what my console says:

--------------------------------------------------------------------------------------------------------

Dec 22, 2006 9:45:05 AM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deploying web application archive mywebapp.war
propFile path is: WEB-INF\classes\log4j.properties
log4j.properties not found,
C:\DevTools\tomcat\jakarta-tomcat-5.5.9\bin\WEB-INF\classes\log4j.properties
2006-12-22 09:45:07,653 ERROR
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mywebapp]]
- StandardWrapper.Throwable
java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:365)
        at java.util.Properties.load(Properties.java:293)
        at 
com.acme.mywebapp.logging.Log4jInitServlet.init(Log4jInitServlet.java:27)
        at javax.servlet.GenericServlet.init(GenericServlet.java:211)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
        at 
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
        at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
        at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:788)
        at 
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:677)
        at 
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
        at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
        at 
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
        at 
org.apache.catalina.core.StandardService.start(StandardService.java:450)
        at 
org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
2006-12-22 09:45:07,669 ERROR
[org.apache.catalina.core.ContainerBase.[Catalina].[localhost].[/mywebapp]]
- Servlet /mywebapp threw load() exception
java.lang.NullPointerException
        at java.util.Properties$LineReader.readLine(Properties.java:365)
        at java.util.Properties.load(Properties.java:293)
        at 
com.acme.mywebapp.logging.Log4jInitServlet.init(Log4jInitServlet.java:27)
        at javax.servlet.GenericServlet.init(GenericServlet.java:211)
        at 
org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1091)
        at 
org.apache.catalina.core.StandardWrapper.load(StandardWrapper.java:925)
        at 
org.apache.catalina.core.StandardContext.loadOnStartup(StandardContext.java:3857)
        at 
org.apache.catalina.core.StandardContext.start(StandardContext.java:4118)
        at 
org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:759)
        at 
org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:739)
        at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:524)
        at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:788)
        at 
org.apache.catalina.startup.HostConfig.deployWARs(HostConfig.java:677)
        at 
org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:473)
        at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1102)
        at 
org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:311)
        at 
org.apache.catalina.util.LifecycleSupport.fireLifecycleEvent(LifecycleSupport.java:119)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1020)
        at org.apache.catalina.core.StandardHost.start(StandardHost.java:718)
        at org.apache.catalina.core.ContainerBase.start(ContainerBase.java:1012)
        at 
org.apache.catalina.core.StandardEngine.start(StandardEngine.java:442)
        at 
org.apache.catalina.core.StandardService.start(StandardService.java:450)
        at 
org.apache.catalina.core.StandardServer.start(StandardServer.java:683)
        at org.apache.catalina.startup.Catalina.start(Catalina.java:537)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
        at java.lang.reflect.Method.invoke(Method.java:585)
        at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:271)
        at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:409)
2006-12-22 09:45:08,018 WARN
[com.acme.mywebapp.config.XmlConfigInitServlet] - Finished parsing the
config file.
Dec 22, 2006 9:45:09 AM org.apache.catalina.startup.Catalina start
INFO: Server startup in 4495 ms

--------------------------------------------------------------------------------------------------------

My Log4jInitServlet:

--------------------------------------------------------------------------------------------------------

package com.acme.mywebapp.logging;

import java.io.File;
import java.io.IOException;
import java.io.InputStream;
import java.util.Properties;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.PropertyConfigurator;

public class Log4jInitServlet extends HttpServlet {
        public void init() throws ServletException  {
            Properties  p  = new Properties();
            String file = getInitParameter("log4j-init-file");
            File propFile = new File(file);
            System.out.println("propFile path is: " + propFile);
            try {
                InputStream is = 
getServletContext().getResourceAsStream("propFile");
        
                if(!propFile.exists()){
                    System.out.println("log4j.properties not found, " +
propFile.getAbsolutePath());
                }
                p.load(is);
                    is.close();
            } catch(IOException e) {
                e.printStackTrace();
            }
       PropertyConfigurator.configureAndWatch(propFile.getAbsolutePath(),10000);
   }
}

--------------------------------------------------------------------------------------------------------

My 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>mywebapp</display-name>
   <description>
       My web app
   </description>

   <servlet>
     <servlet-name>MyWebAppServlet</servlet-name>
     <servlet-class>com.acme.mywebapp.MyWebAppServlet</servlet-class>
   </servlet>

   <servlet-mapping>
     <servlet-name>MyWebAppServlet</servlet-name>
     <url-pattern>/app</url-pattern>
   </servlet-mapping>

        <servlet>
      <servlet-name>log4j-init</servlet-name>
      <servlet-class>
  com.acme.mywebapp.logging.Log4jInitServlet
      </servlet-class>
      <init-param>
          <param-name>log4j-init-file</param-name>
          <param-value>WEB-INF/classes/log4j.properties</param-value>
      </init-param>
      <load-on-startup>1</load-on-startup>
  </servlet>      

  <servlet>
      <servlet-name>xml-config-init</servlet-name>
      <servlet-class>
  com.acme.mywebapp.config.XmlConfigInitServlet
      </servlet-class>
      <init-param>
          <param-name>xml-config-file</param-name>
          <param-value>/WEB-INF/attributes-config.xml</param-value>
      </init-param>
      <load-on-startup>2</load-on-startup>
  </servlet>

</web-app>

--------------------------------------------------------------------------------------------------------

My XmlConfigInitServlet class (as you can see that I am still using
getRealPath()) but will change it when I get my Log4jInitServlet
properly set up. For some odd reason, its logging what I have put in
here into my Tomcat's console. How could this be if Tomcat complained
that it couldn't find my log4j.properties file?

--------------------------------------------------------------------------------------------------------

package com.acme.mywebapp.config;

import java.io.File;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;

import org.apache.log4j.Logger;

import edu.ucsd.security.affiliates.model.AttributeBeanXmlConfigHelper;

public class XmlConfigInitServlet extends HttpServlet {
        
        public void init() throws ServletException {
                String prefix = getServletContext().getRealPath("/");
                String file = getInitParameter("xml-config-file");
                File xmlConfigFile = new File(prefix + file);
                if (!xmlConfigFile.exists()) {
                        System.out.println("attributes-config.xml not found, "
                                        + xmlConfigFile.getAbsolutePath());
                }
                try {

                        // Configure Digester from XML ruleset
                        AttributeBeanXmlConfigHelper.parse(xmlConfigFile);
                
                        Logger.getLogger(this.getClass()).warn("Finished parsing the 
config file.");

                } catch (Exception ex) {
                        ex.printStackTrace();
                }
        }
}

--------------------------------------------------------------------------------------------------------

Here's the contents of my log4j.properties file located under
mywebapp/WEB-INF/classes:

log4j.rootCategory=WARN, stdout

log4j.appender.stdout=org.apache.log4j.ConsoleAppender
log4j.appender.stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.stdout.layout.ConversionPattern=%d %p [%c] - %m%n

--------------------------------------------------------------------------------------------------------

From the looks of everything, obviously there's a pathing issue in my
Log4jInitServlet but I still don't understand how it can successfully
log my XmlConfigServlet if my log4j.properties is supposed to be
unavailable?!

Can anyone suggest a better way to use getResourceAsStream()? What I
am trying to do is set my undeployWars to false in server.xml so that
Tomcat can read my log4j.properties file and my xml config file
(attributes-config.xml) from within the war file.

Many, many thanks!

Sincerely yours,

James Dekker

---------------------------------------------------------------------
To start a new topic, e-mail: users@tomcat.apache.org
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to