You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by vi...@apache.org on 2002/06/28 07:02:54 UTC
cvs commit: jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/util CustomWebappLoader.java CatalinaLogger.java
vinayc 2002/06/27 22:02:54
Added: sevak/src/java/org/apache/avalon/apps/sevak/util
CustomWebappLoader.java CatalinaLogger.java
Log:
Sevak - Catalina Wrapper
Revision Changes Path
1.1 jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/util/CustomWebappLoader.java
Index: CustomWebappLoader.java
===================================================================
/*
* Copyright (C) The Apache Software Foundation. All rights reserved.
*
* This software is published under the terms of the Apache Software License
* version 1.1, a copy of which has been included with this distribution in
* the LICENSE file.
*/
package org.apache.avalon.apps.sevak.util;
import org.apache.catalina.loader.WebappLoader;
import org.apache.catalina.LifecycleException;
/**
* Tomcat ClassLoader Hack to make Catalina run over Avalon/Phoenix .
*
* @author Vinay Chandran<vi...@yahoo.com>
* @version 1.0
*/
public class CustomWebappLoader extends WebappLoader
{
private boolean m_started = false;
/**
* Start this component, initializing our associated class loader.
*
* @exception LifecycleException if a lifecycle error occurs
*/
public void start() throws LifecycleException
{
//Prevent the LifecycleException by preventing any further calls made
// to the base implementation to ' start' again
if (m_started)
{
return;
}
m_started = true;
super.start();
}
/**
* Constructor
* @param classLoader ClassLoader
*/
public CustomWebappLoader(ClassLoader classLoader)
{
super(classLoader);
}
}
1.1 jakarta-avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/util/CatalinaLogger.java
Index: CatalinaLogger.java
===================================================================
/*
* ====================================================================
*
* The Apache Software License, Version 1.1
*
* Copyright (c) 1999 The Apache Software Foundation. All rights
* reserved.
*
* Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions
* are met:
*
* 1. Redistributions of source code must retain the above copyright
* notice, this list of conditions and the following disclaimer.
*
* 2. Redistributions in binary form must reproduce the above copyright
* notice, this list of conditions and the following disclaimer in
* the documentation and/or other materials provided with the
* distribution.
*
* 3. The end-user documentation included with the redistribution, if
* any, must include the following acknowlegement:
* "This product includes software developed by the
* Apache Software Foundation (http://www.apache.org/)."
* Alternately, this acknowlegement may appear in the software itself,
* if and wherever such third-party acknowlegements normally appear.
*
* 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
* Foundation" must not be used to endorse or promote products derived
* from this software without prior written permission. For written
* permission, please contact apache@apache.org.
*
* 5. Products derived from this software may not be called "Apache"
* nor may "Apache" appear in their names without prior written
* permission of the Apache Group.
*
* THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
* WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
* OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
* DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
* ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
* SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
* LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
* USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
* ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
* OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
* OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
* SUCH DAMAGE.
* ====================================================================
*
* This software consists of voluntary contributions made by many
* individuals on behalf of the Apache Software Foundation. For more
* information on the Apache Software Foundation, please see
* <http://www.apache.org/>.
*
* [Additional notices, if required by prior licensing conditions]
*
*/
package org.apache.avalon.apps.sevak.util;
//catalina imports
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
import java.io.CharArrayWriter;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import org.apache.avalon.framework.logger.LogEnabled;
import org.apache.catalina.Container;
import org.apache.catalina.LifecycleException;
/**
* Simple implementation of <b>Logger</b> that invokes Avalon Logger.
*
* @author Vinay Chandran<vi...@yahoo.com>
* @author Craig R. McClanahan
*/
public class CatalinaLogger implements LogEnabled, org.apache.catalina.Logger
{
/**
* The descriptive information about this implementation.
*/
private static final String m_info =
"org.apache.avalon.sevak.util.CatalinaLogger/1.0";
/** Avalon-Catalina Logger bridge*/
private org.apache.avalon.framework.logger.Logger m_avalonLogger = null;
/**
* Provide component with a logger.
*
* @param logger the logger
*/
public void enableLogging(org.apache.avalon.framework.logger.Logger logger)
{
m_avalonLogger = logger;
}
/**
* Writes the specified message to a servlet log file, usually an event
* log. The name and type of the servlet log is specific to the
* servlet container.
*
* @param msg A <code>String</code> specifying the message to be written
* to the log file
*/
public void log(String msg)
{
switch (getVerbosity())
{
case org.apache.catalina.Logger.FATAL :
m_avalonLogger.fatalError(msg);
break;
case org.apache.catalina.Logger.ERROR :
m_avalonLogger.error(msg);
break;
case org.apache.catalina.Logger.WARNING :
m_avalonLogger.warn(msg);
break;
case org.apache.catalina.Logger.INFORMATION :
m_avalonLogger.info(msg);
break;
case org.apache.catalina.Logger.DEBUG :
m_avalonLogger.debug(msg);
break;
}
}
// ****** Liberally copied from org.apache.catalina.logger.LoggerBase
// ----------------------------------------------------- Instance Variables
/**
* The Container with which this Logger has been associated.
*/
protected Container container = null;
/**
* The debugging detail level for this component.
*/
protected int debug = 0;
/**
* The property change support for this component.
*/
protected PropertyChangeSupport support = new PropertyChangeSupport(this);
/**
* The verbosity level for above which log messages may be filtered.
*/
protected int verbosity = ERROR;
/**
* @see org.apache.catalina.Logger#getContainer()
*/
// ------------------------------------------------------------- Properties
/**
* Return the Container with which this Logger has been associated.
* @return Container Return the container
*/
public Container getContainer()
{
return (container);
}
/**
* Set the Container with which this Logger has been associated.
*
* @param container The associated Container
*/
public void setContainer(Container container)
{
Container oldContainer = this.container;
this.container = container;
support.firePropertyChange("container", oldContainer, this.container);
}
/**
* Return the debugging detail level for this component.
* @return int
*/
public int getDebug()
{
return (this.debug);
}
/**
* Set the debugging detail level for this component.
*
* @param debug The new debugging detail level
*/
public void setDebug(int debug)
{
this.debug = debug;
}
/**
* Return descriptive information about this Logger implementation and
* the corresponding version number, in the format
* <code><description>/<version></code>.
* @return String
*/
public String getInfo()
{
return (m_info);
}
/**
* Return the verbosity level of this logger. Messages logged with a
* higher verbosity than this level will be silently ignored.
* @return int
*/
public int getVerbosity()
{
return (this.verbosity);
}
/**
* Set the verbosity level of this logger. Messages logged with a
* higher verbosity than this level will be silently ignored.
*
* @param verbosity The new verbosity level
*/
public void setVerbosity(int verbosity)
{
this.verbosity = verbosity;
}
/**
* Set the verbosity level of this logger. Messages logged with a
* higher verbosity than this level will be silently ignored.
*
* @param verbosity The new verbosity level, as a string
*/
public void setVerbosityLevel(String verbosity)
{
if ("FATAL".equalsIgnoreCase(verbosity))
{
this.verbosity = FATAL;
}
else if ("ERROR".equalsIgnoreCase(verbosity))
{
this.verbosity = ERROR;
}
else if ("WARNING".equalsIgnoreCase(verbosity))
{
this.verbosity = WARNING;
}
else if ("INFORMATION".equalsIgnoreCase(verbosity))
{
this.verbosity = INFORMATION;
}
else if ("DEBUG".equalsIgnoreCase(verbosity))
{
this.verbosity = DEBUG;
}
}
// --------------------------------------------------------- Public Methods
/**
* Add a property change listener to this component.
*
* @param listener The listener to add
*/
public void addPropertyChangeListener(PropertyChangeListener listener)
{
support.addPropertyChangeListener(listener);
}
/**
* Writes the specified exception, and message, to a servlet log file.
* The implementation of this method should call
* <code>log(msg, exception)</code> instead. This method is deprecated
* in the ServletContext interface, but not deprecated here to avoid
* many useless compiler warnings. This message will be logged
* unconditionally.
*
* @param exception An <code>Exception</code> to be reported
* @param msg The associated message string
*/
public void log(Exception exception, String msg)
{
log(msg, exception);
}
/**
* Writes an explanatory message and a stack trace for a given
* <code>Throwable</code> exception to the servlet log file. The name
* and type of the servlet log file is specific to the servlet container,
* usually an event log. This message will be logged unconditionally.
*
* @param msg A <code>String</code> that describes the error or
* exception
* @param throwable The <code>Throwable</code> error or exception
*/
public void log(String msg, Throwable throwable)
{
CharArrayWriter buf = new CharArrayWriter();
PrintWriter writer = new PrintWriter(buf);
writer.println(msg);
throwable.printStackTrace(writer);
Throwable rootCause = null;
if (throwable instanceof LifecycleException)
{
rootCause = ((LifecycleException) throwable).getThrowable();
}
else if (throwable instanceof ServletException)
{
rootCause = ((ServletException) throwable).getRootCause();
}
if (rootCause != null)
{
writer.println("----- Root Cause -----");
rootCause.printStackTrace(writer);
}
log(buf.toString());
}
/**
* Writes the specified message to the servlet log file, usually an event
* log, if the logger is set to a verbosity level equal to or higher than
* the specified value for this message.
*
* @param message A <code>String</code> specifying the message to be
* written to the log file
* @param verbosity Verbosity level of this message
*/
public void log(String message, int verbosity)
{
if (this.verbosity >= verbosity)
{
log(message);
}
}
/**
* Writes the specified message and exception to the servlet log file,
* usually an event log, if the logger is set to a verbosity level equal
* to or higher than the specified value for this message.
*
* @param message A <code>String</code> that describes the error or
* exception
* @param throwable The <code>Throwable</code> error or exception
* @param verbosity Verbosity level of this message
*/
public void log(String message, Throwable throwable, int verbosity)
{
if (this.verbosity >= verbosity)
{
log(message, throwable);
}
}
/**
* Remove a property change listener from this component.
*
* @param listener The listener to remove
*/
public void removePropertyChangeListener(PropertyChangeListener listener)
{
support.removePropertyChangeListener(listener);
}
}
--
To unsubscribe, e-mail: <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>