donaldp 2002/11/09 00:41:04 Modified: component build.xml default.properties component/src/java/org/apache/avalon/excalibur/component DefaultComponentFactory.java component/src/java/org/apache/avalon/excalibur/component/servlet AbstractServiceManagerServlet.java Added: component/src/java/org/apache/avalon/excalibur/component ComponentProxyGenerator.java Log: Move ComponentPorxyGenerator into component package. This results in a decoupling from container. Revision Changes Path 1.27 +6 -8 jakarta-avalon-excalibur/component/build.xml Index: build.xml =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/build.xml,v retrieving revision 1.26 retrieving revision 1.27 diff -u -r1.26 -r1.27 --- build.xml 24 Sep 2002 20:39:52 -0000 1.26 +++ build.xml 9 Nov 2002 08:41:03 -0000 1.27 @@ -16,7 +16,6 @@ <pathelement location="${logkit.jar}"/> <pathelement location="${avalon-framework.jar}"/> <pathelement location="${excalibur-collections.jar}"/> - <pathelement location="${excalibur-container.jar}"/> <pathelement location="${excalibur-logger.jar}"/> <pathelement location="${excalibur-instrument.jar}"/> <pathelement location="${excalibur-instrument-manager.jar}"/> @@ -26,7 +25,7 @@ <!-- Optional jars --> <pathelement location="${servlet.jar}"/> - + <pathelement path="${java.class.path}"/> </path> @@ -58,7 +57,7 @@ <classpath refid="project.class.path"/> </available> </target> - + <!-- Check that if we want servlet logging support, our logkit.jar has it enabled too --> <target name="dependencies.servlet" if="servlet.present"> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkRequiredClass"> @@ -76,7 +75,6 @@ <target name="dependencies" depends="dependencies.optional" description="Check dependencies" unless="skip.dependencies"> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkCommon"/> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkLogkit"/> - <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkContainer"/> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkFramework"/> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkInstrument"/> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkInstrumentManager"/> @@ -94,7 +92,7 @@ <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkTestcase"/> <ant antfile="${depchecker.prefix}/depchecker.xml" target="checkInstrument"/> </target> - + <target name="servlet-warn" unless="servlet.present" description="Outputs a warning if javax.servlet.* classes are missing during compilation"> <echo>*********************************************************************************</echo> @@ -204,7 +202,7 @@ </zipfileset> </jar> </target> - + <!-- Creates all the .jar file --> <target name="jar" depends="compile, prepare-conf, jar-servlet" description="Generates the jar files"> @@ -447,10 +445,10 @@ <fileset dir="${build.docs}"> <include name="**"/> </fileset> - </copy> + </copy> </target> - + <target name="site" depends="javadocs, docs" description=" Places Docs ready for hosting on website"> <mkdir dir="../site/dist/docs/${dir-name}"/> 1.15 +0 -5 jakarta-avalon-excalibur/component/default.properties Index: default.properties =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/default.properties,v retrieving revision 1.14 retrieving revision 1.15 diff -u -r1.14 -r1.15 --- default.properties 24 Sep 2002 20:39:52 -0000 1.14 +++ default.properties 9 Nov 2002 08:41:03 -0000 1.15 @@ -38,11 +38,6 @@ excalibur-collections.lib=${excalibur-collections.home} excalibur-collections.jar=${excalibur-collections.lib}/excalibur-collections-1.0.jar -# ----- Excalibur Container ----- -excalibur-container.home=${basedir}/../container -excalibur-container.lib=${excalibur-container.home}/build/lib -excalibur-container.jar=${excalibur-container.lib}/excalibur-container-1.0.jar - # ----- Excalibur logger, version 1.0 or later ----- excalibur-logger.home=${basedir}/../logger/dist excalibur-logger.lib=${excalibur-logger.home} 1.16 +1 -2 jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/DefaultComponentFactory.java Index: DefaultComponentFactory.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/DefaultComponentFactory.java,v retrieving revision 1.15 retrieving revision 1.16 diff -u -r1.15 -r1.16 --- DefaultComponentFactory.java 9 Nov 2002 08:36:27 -0000 1.15 +++ DefaultComponentFactory.java 9 Nov 2002 08:41:03 -0000 1.16 @@ -29,7 +29,6 @@ import org.apache.avalon.framework.service.Serviceable; import org.apache.avalon.framework.service.WrapperServiceManager; import org.apache.avalon.framework.thread.ThreadSafe; -import org.apache.excalibur.container.legacy.ComponentProxyGenerator; import org.apache.excalibur.instrument.InstrumentManageable; import org.apache.excalibur.instrument.InstrumentManager; import org.apache.excalibur.instrument.Instrumentable; 1.1 jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/ComponentProxyGenerator.java Index: ComponentProxyGenerator.java =================================================================== /* ==================================================================== * The Apache Software License, Version 1.1 * * Copyright (c) 2002 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 acknowledgment: * "This product includes software developed by the * Apache Software Foundation (http://www.apache.org/)." * Alternately, this acknowledgment may appear in the software * itself, if and wherever such third-party acknowledgments * normally appear. * * 4. The names "Jakarta", "Avalon", 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 [EMAIL PROTECTED] * * 5. Products derived from this software may not be called "Apache", * nor may "Apache" appear in their name, without prior written * permission of the Apache Software Foundation. * * 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/>. */ package org.apache.avalon.excalibur.component; import java.lang.reflect.InvocationHandler; import java.lang.reflect.Method; import java.lang.reflect.Proxy; import java.lang.reflect.InvocationTargetException; import org.apache.avalon.framework.component.Component; /** * Create a Component proxy. Requires JDK 1.3+ * * @author <a href="mailto:bloritsch@;apache.org">Berin Loritsch</a> */ public final class ComponentProxyGenerator { private final ClassLoader m_classLoader; /** * Initialize the ComponentProxyGenerator with the default classloader. * The default classloader is the Thread context classloader. */ public ComponentProxyGenerator() { this( Thread.currentThread().getContextClassLoader() ); } /** * Initialize the ComponentProxyGenerator with the supplied classloader. * If the supplied class loader is null, we use the Thread context class * loader. If that is null, we use this class's classloader. */ public ComponentProxyGenerator( final ClassLoader parentClassLoader ) { m_classLoader = ( null == parentClassLoader ) ? ( ( null == Thread.currentThread().getContextClassLoader() ) ? getClass().getClassLoader() : Thread.currentThread().getContextClassLoader() ) : parentClassLoader; } /** * Get the Component wrapped in the proxy. The role must be the service * interface's fully qualified classname to work. */ public Component getProxy( String role, Object service ) throws Exception { Class serviceInterface = m_classLoader.loadClass( role ); return (Component)Proxy.newProxyInstance( m_classLoader, new Class[]{Component.class, serviceInterface}, new ComponentInvocationHandler( service ) ); } /** * Internal class to handle the wrapping with Component */ private final static class ComponentInvocationHandler implements InvocationHandler { private final Object m_delagate; public ComponentInvocationHandler( final Object delegate ) { if( null == delegate ) { throw new NullPointerException( "delegate" ); } m_delagate = delegate; } public Object invoke( final Object proxy, final Method meth, final Object[] args ) throws Throwable { try { return meth.invoke( m_delagate, args ); } catch( final InvocationTargetException ite ) { throw ite.getTargetException(); } } } } 1.2 +29 -33 jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/AbstractServiceManagerServlet.java Index: AbstractServiceManagerServlet.java =================================================================== RCS file: /home/cvs/jakarta-avalon-excalibur/component/src/java/org/apache/avalon/excalibur/component/servlet/AbstractServiceManagerServlet.java,v retrieving revision 1.1 retrieving revision 1.2 diff -u -r1.1 -r1.2 --- AbstractServiceManagerServlet.java 7 Nov 2002 09:50:41 -0000 1.1 +++ AbstractServiceManagerServlet.java 9 Nov 2002 08:41:04 -0000 1.2 @@ -9,23 +9,19 @@ import java.io.IOException; import java.util.ArrayList; - import javax.servlet.ServletConfig; import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; - import org.apache.avalon.excalibur.logger.LoggerManager; - -import org.apache.avalon.framework.service.ServiceManager; import org.apache.avalon.framework.logger.Logger; - +import org.apache.avalon.framework.service.ServiceManager; import org.apache.excalibur.instrument.CounterInstrument; import org.apache.excalibur.instrument.Instrument; -import org.apache.excalibur.instrument.Instrumentable; import org.apache.excalibur.instrument.InstrumentManager; +import org.apache.excalibur.instrument.Instrumentable; import org.apache.excalibur.instrument.ValueInstrument; /** @@ -44,7 +40,7 @@ private String m_referenceName; private ServiceManager m_serviceManager; private Logger m_logger; - + /** Instrumentable Name assigned to this Instrumentable */ private String m_instrumentableName; @@ -56,13 +52,13 @@ /** Flag which is to used to keep track of when the Instrumentable has been registered. */ private boolean m_registered; - + /** Counts the number of times the service is requested. */ private CounterInstrument m_instrumentRequests; - + /** Records the amount of time execute takes to be processed. */ private ValueInstrument m_instrumentTime; - + /*--------------------------------------------------------------- * Constructors *-------------------------------------------------------------*/ @@ -77,18 +73,18 @@ { //System.out.println( "AbstractServiceManagerServlet( " + referenceName + " )" ); m_referenceName = referenceName; - + // Set up Instrumentable like AbstractInstrumentable m_registered = false; m_instrumentList = new ArrayList(); m_childList = new ArrayList(); - + // Create the instruments setInstrumentableName( referenceName ); addInstrument( m_instrumentRequests = new CounterInstrument( "requests" ) ); addInstrument( m_instrumentTime = new ValueInstrument( "time" ) ); } - + /*--------------------------------------------------------------- * HttpServlet Methods *-------------------------------------------------------------*/ @@ -115,12 +111,12 @@ } Logger logger = loggerManager.getLoggerForCategory( "servlet" ); m_logger = logger.getChildLogger( m_referenceName ); - + if ( getLogger().isDebugEnabled() ) { getLogger().debug( "servlet.init( config )" ); } - + // Obtain a reference to the ServiceManager m_serviceManager = (ServiceManager)context.getAttribute( ServiceManager.class.getName() ); @@ -129,7 +125,7 @@ throw new IllegalStateException( "The ExcaliburComponentManagerServlet servlet was not correctly initialized." ); } - + // Register this servlet with the InstrumentManager if it exists. InstrumentManager instrumentManager = (InstrumentManager)context.getAttribute( InstrumentManager.class.getName() ); @@ -146,12 +142,12 @@ "Unable to register the servlet with the instrument manager.", e ); } } - + // Do this last so the subclasses will be able to access these objects in their // init method. super.init( config ); } - + /** * Called by the servlet container to indicate to a servlet that the servlet * is being taken out of service. @@ -162,15 +158,15 @@ { getLogger().debug( "servlet.destroy()" ); } - + // Release the ServiceManager by removing its reference. m_serviceManager = null; - + super.destroy(); - + // Make sure that the component manager gets collected. System.gc(); - + // Give the system time for the Gc to complete. This is necessary to make sure that // the ECMServlet has time to dispose all of its managers before the Tomcat server // invalidates the current class loader. @@ -182,7 +178,7 @@ { } } - + /** * Receives standard HTTP requests from the public service method and dispatches * them to the doXXX methods defined in this class. @@ -205,24 +201,24 @@ sb.append( "?" ); sb.append( query ); } - + getLogger().debug( "Request: " + sb.toString() ); } - + long start = System.currentTimeMillis(); - + // Notify the Instrument Manager m_instrumentRequests.increment(); - + super.service( request, response ); - + // Notify the Instrument Manager how long the service took. if ( m_instrumentTime.isActive() ) { m_instrumentTime.setValue( (int)( System.currentTimeMillis() - start ) ); } } - + /*--------------------------------------------------------------- * Instrumentable Methods *-------------------------------------------------------------*/ @@ -303,7 +299,7 @@ return instruments; } } - + /*--------------------------------------------------------------- * Methods *-------------------------------------------------------------*/ @@ -343,7 +339,7 @@ } m_childList.add( child ); } - + /** * Obtain a reference to the servlet's logger. * @@ -353,7 +349,7 @@ { return m_logger; } - + /** * Returns the current ServiceManager. *
-- To unsubscribe, e-mail: <mailto:avalon-cvs-unsubscribe@;jakarta.apache.org> For additional commands, e-mail: <mailto:avalon-cvs-help@;jakarta.apache.org>