After discussion with Paul Hammant, applied this patch to allow phoenix-embedded Servlets to take advantage of LogEnabled and Initializable life-cycle methods. Changes are to the jetty-sevak block.
Created a new class called AvalonContext to pass into the constructors of the numerous Jetty wrapper classes. This is in place of the ServiceManager and holds both a ServiceManager and an Avalon Logger). New class attached: sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/AvalonContext.java Patch file attached: avalon-apps-sevak.patch Ben Hogan http://lizardsoftware.com/ Index: sevak/src/java/org/apache/avalon/apps/sevak/Sevak.java =================================================================== RCS file: /home/cvspublic/avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/Seva k.java,v retrieving revision 1.4 diff -u -r1.4 Sevak.java --- sevak/src/java/org/apache/avalon/apps/sevak/Sevak.java 12 Jan 2003 14:17:40 -0000 1.4 +++ sevak/src/java/org/apache/avalon/apps/sevak/Sevak.java 7 Feb 2003 15:18:51 -0000 @@ -8,6 +8,7 @@ package org.apache.avalon.apps.sevak; import org.apache.avalon.framework.service.ServiceManager; +import org.apache.avalon.apps.sevak.blocks.jetty.AvalonContext; import java.io.File; @@ -33,10 +34,10 @@ * Deploy the given Web Application * @param context Context for the the webapp * @param pathToWebAppFolder path can be a war-archive or exploded directory - * @param serviceManager The service manager to use for (optional) Serviceable servlets. + * @param avalonContext the context that is applied to the servlet on instantiation. * @throws SevakException Thrown when context already exists */ - void deploy(String context, File pathToWebAppFolder, ServiceManager serviceManager) throws SevakException; + void deploy(String context, File pathToWebAppFolder, AvalonContext avalonContext) throws SevakException; /** Index: sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/JettySevak.java =================================================================== RCS file: /home/cvspublic/avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/bloc ks/jetty/JettySevak.java,v retrieving revision 1.14 diff -u -r1.14 JettySevak.java --- sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/JettySevak.java 6 Feb 2003 16:43:46 -0000 1.14 +++ sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/JettySevak.java 7 Feb 2003 15:18:52 -0000 @@ -102,7 +102,7 @@ private int m_minThreads; private int m_maxThreads; private File m_sarRootDir; - private ServiceManager m_serviceManager; + private AvalonContext m_avalonContext; /** * @param serviceManager @@ -112,7 +112,7 @@ */ public void service( ServiceManager serviceManager ) throws ServiceException { - m_serviceManager = serviceManager; + m_avalonContext = new AvalonContext(serviceManager, getLogger()); } /** @@ -161,7 +161,7 @@ Log.instance().add( phoenixLogSink ); RequestLogger logger = ( RequestLogger ) - m_serviceManager.lookup( RequestLogger.ROLE ); + m_avalonContext.getServiceManager().lookup( RequestLogger.ROLE ); m_server.setRequestLog( new JettyRequestLogAdapter( logger ) ); } @@ -203,17 +203,17 @@ */ public void deploy( String context, File pathToWebAppFolder ) throws SevakException { - deploy( context, pathToWebAppFolder, m_serviceManager ); + deploy( context, pathToWebAppFolder, m_avalonContext ); } /** * Deploy a webapp * @param context the contxct for the webapp * @param pathToWebAppFolder the path to it - * @param serviceManager The service manager to use for (optional) Serviceable servlets. + * @param avalonContext The optional context to apply to servlets (LogEnabled, Serviceable). * @throws SevakException if a problem */ - public void deploy( String context, File pathToWebAppFolder, ServiceManager serviceManager ) + public void deploy( String context, File pathToWebAppFolder, AvalonContext avalonContext ) throws SevakException { String webAppURL = null; @@ -224,7 +224,7 @@ // This still does not work. WebApplicationContext ctx = - new SevakWebApplicationContext( serviceManager, m_sarRootDir, webAppURL ); + new SevakWebApplicationContext( avalonContext, m_sarRootDir, webAppURL ); ctx.setContextPath( context ); m_server.addContext( m_hostName, ctx ); Index: sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakServletHolder. java =================================================================== RCS file: /home/cvspublic/avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/bloc ks/jetty/SevakServletHolder.java,v retrieving revision 1.2 diff -u -r1.2 SevakServletHolder.java --- sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakServletHolder. java 10 Jan 2003 00:33:32 -0000 1.2 +++ sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakServletHolder. java 7 Feb 2003 15:18:52 -0000 @@ -9,8 +9,9 @@ import org.mortbay.jetty.servlet.ServletHolder; import org.apache.avalon.framework.service.Serviceable; -import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.service.ServiceException; +import org.apache.avalon.framework.logger.LogEnabled; +import org.apache.avalon.framework.activity.Initializable; /** * @@ -24,25 +25,28 @@ */ public class SevakServletHolder extends ServletHolder { - private ServiceManager m_serviceManager; + private AvalonContext m_avalonContext; /** * Construct a Servlet Holder - * @param serviceManager the service manager + * @param avalonContext the context that is applied to the servlet on instantiation. * @param handler the handler * @param name the name * @param className the class name * @param forcedPath the forced path */ - public SevakServletHolder(ServiceManager serviceManager, SevakWebApplicationHandler handler, String name, String className, String forcedPath) + public SevakServletHolder(AvalonContext avalonContext, SevakWebApplicationHandler handler, String name, String className, String forcedPath) { // this constructor public or protected... super(handler, name, className, forcedPath); - m_serviceManager = serviceManager; + m_avalonContext = avalonContext; } /** - * Create a new instance + * Create a new instance of a servlet, currently applying the following lifecycle: + * If a servlet is Servicable then the serviceManager is set on the servlet. + * If a servlet is LogEnabled then the logger is set on the servlet. + * If a servlet is Initializable then the initialize method is invoked. * @return the instance * @throws InstantiationException if a prob * @throws IllegalAccessException if a prob @@ -52,14 +56,36 @@ throw new InstantiationException("No class for " + this); else { Object instance = _class.newInstance(); + if (instance instanceof LogEnabled) { + try + { + ((LogEnabled) instance).enableLogging(m_avalonContext.getLogger()); + } + catch (Exception e) + { + throw new InstantiationException("Exception during enableLogging for servlet " + + _class.getName() + ":" + e.getMessage()); + } + } if (instance instanceof Serviceable) { try { - ((Serviceable) instance).service(m_serviceManager); + ((Serviceable) instance).service(m_avalonContext.getServiceManager()); } catch (ServiceException e) { throw new InstantiationException("Service Exception for servlet " + + _class.getName() + ":" + e.getMessage()); + } + } + if (instance instanceof Initializable) { + try + { + ((Initializable) instance).initialize(); + } + catch (Exception e) + { + throw new InstantiationException("Exception during initialize for servlet " + _class.getName() + ":" + e.getMessage()); } } Index: sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Context.java =================================================================== RCS file: /home/cvspublic/avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/bloc ks/jetty/SevakWebApplicationContext.java,v retrieving revision 1.3 diff -u -r1.3 SevakWebApplicationContext.java --- sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Context.java 10 Jan 2003 00:33:32 -0000 1.3 +++ sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Context.java 7 Feb 2003 15:18:52 -0000 @@ -8,9 +8,6 @@ package org.apache.avalon.apps.sevak.blocks.jetty; import org.mortbay.jetty.servlet.WebApplicationContext; -import org.mortbay.jetty.servlet.ServletHandler; -import org.mortbay.jetty.servlet.WebApplicationHandler; -import org.apache.avalon.framework.service.ServiceManager; import java.io.IOException; import java.io.File; @@ -32,16 +29,16 @@ private File m_sarRoot; private File m_phoenixLib; - private ServiceManager m_serviceManager; + private AvalonContext m_avalonContext; - public SevakWebApplicationContext(ServiceManager serviceManager, File sarRoot, String webAppURL) throws IOException + public SevakWebApplicationContext(AvalonContext avalonContext, File sarRoot, String webAppURL) throws IOException { super(webAppURL); m_sarRoot = sarRoot; m_phoenixLib = new File(sarRoot.getParentFile().getParentFile(),"lib"); - m_serviceManager = serviceManager; + m_avalonContext = avalonContext; - addHandler(0, new SevakWebApplicationHandler(m_serviceManager)); + addHandler(0, new SevakWebApplicationHandler(m_avalonContext)); } Index: sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Handler.java =================================================================== RCS file: /home/cvspublic/avalon-apps/sevak/src/java/org/apache/avalon/apps/sevak/bloc ks/jetty/SevakWebApplicationHandler.java,v retrieving revision 1.1 diff -u -r1.1 SevakWebApplicationHandler.java --- sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Handler.java 9 Jan 2003 07:42:49 -0000 1.1 +++ sevak/src/java/org/apache/avalon/apps/sevak/blocks/jetty/SevakWebApplication Handler.java 7 Feb 2003 15:18:52 -0000 @@ -9,7 +9,6 @@ import org.mortbay.jetty.servlet.WebApplicationHandler; import org.mortbay.jetty.servlet.ServletHolder; -import org.apache.avalon.framework.service.ServiceManager; /** * @@ -23,11 +22,11 @@ */ public class SevakWebApplicationHandler extends WebApplicationHandler { - ServiceManager m_serviceManager; + AvalonContext m_avalonContext; - public SevakWebApplicationHandler(ServiceManager serviceManager) + public SevakWebApplicationHandler(AvalonContext avalonContext) { - m_serviceManager = serviceManager; + m_avalonContext = avalonContext; } public ServletHolder newServletHolder(String name, String servletClass, String forcedPath) @@ -35,7 +34,7 @@ if(_nameMap.containsKey(name)) { throw new IllegalArgumentException("Named servlet already exists: " + name); } else { - ServletHolder holder = new SevakServletHolder(m_serviceManager, this, name, servletClass, forcedPath); + ServletHolder holder = new SevakServletHolder(m_avalonContext, this, name, servletClass, forcedPath); _nameMap.put(holder.getName(), holder); return holder; }
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]
