001    /*
002     * Copyright (C) The Apache Software Foundation. All rights reserved.
003     *
004     * This software is published under the terms of the Apache Software License
005     * version 1.1, a copy of which has been included with this distribution in
006     * the LICENSE file.
007     * 
008     * $Id: MessageDrivenObjectSupport.java 155459 2005-02-26 13:24:44Z dirkv $
009     */
010    package org.apache.commons.messagelet;
011    
012    import javax.servlet.ServletContext;
013    import javax.servlet.ServletException;
014    
015    import org.apache.commons.logging.Log;
016    import org.apache.commons.logging.LogFactory;
017    
018    /** <p><code>MessageDrivenObjectSupport</code> is an abstract base
019      * class for implementing your own MessageDrivenObject instance
020      * with some useful implementation level methods.</p>
021      *
022      * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
023      * @version $Revision: 155459 $
024      */
025    public abstract class MessageDrivenObjectSupport implements MessageDrivenObject {
026    
027        
028        /** The Log to which logging calls will be made. */
029        private Log log = LogFactory.getLog( getClass() );
030        
031        /**
032         * The ServletContext with which this dispatcher is associated.
033         */
034        private ServletContext context;
035    
036    
037        
038        public MessageDrivenObjectSupport() {
039        }
040    
041        public ServletContext getServletContext() {
042            return context;
043        }
044        
045        /** 
046         * This method allows the init() method to be overriden without having to 
047         * call the super.init( ServletContext ) method first. This is similar
048         * to the init() method in {@link javax.servlet.GenericServlet}.
049         */
050        public void init() throws ServletException {
051        }
052        
053        // MessageDrivenObject methods
054        //-------------------------------------------------------------------------        
055        public void init(ServletContext context) throws ServletException {
056            this.context = context;
057            init();
058        }
059    
060        public void destroy() {
061            this.context = null;
062        }
063    
064        
065        
066        // Implementation methods
067        //-------------------------------------------------------------------------        
068    
069        /**
070         * Provides access to a logger which can use JDK 1.4 logging, log4j or logkit 
071         * under the covers.
072         */
073        protected Log getLog() {
074            return log;
075        }
076        
077        /** Logs a message to the current ServletContext */
078        protected void log( String message ) {
079            if ( context == null ) {
080                log.error( "No Servletcontext available so cannot use it for logging" );
081                log.info( message );
082            }
083            else {
084                context.log( message );
085            }
086        }
087        
088        /** Logs a message and exception the current ServletContext */
089        protected void log( String message, Throwable t) {
090            if ( context == null ) {
091                log.error( "No Servletcontext available so cannot use it for logging" );
092                log.error( message, t );
093            }
094            else {
095                context.log( message, t );
096            }
097        }    
098    }