You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by bl...@apache.org on 2002/02/20 16:24:22 UTC

cvs commit: jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/util ContextManager.java

bloritsch    02/02/20 07:24:22

  Modified:    src/scratchpad/org/apache/avalon/excalibur/system
                        ContainerManager.java
               src/scratchpad/org/apache/avalon/excalibur/system/test
                        ContainerProfile.java
               src/scratchpad/org/apache/avalon/excalibur/system/util
                        ContextManager.java
  Log:
  fix ClassCastException opportunity and implement ContextManager
  
  Revision  Changes    Path
  1.29      +4 -4      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/ContainerManager.java
  
  Index: ContainerManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/ContainerManager.java,v
  retrieving revision 1.28
  retrieving revision 1.29
  diff -u -r1.28 -r1.29
  --- ContainerManager.java	19 Feb 2002 20:48:03 -0000	1.28
  +++ ContainerManager.java	20 Feb 2002 15:24:22 -0000	1.29
  @@ -110,7 +110,7 @@
    * </table>
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  - * @version CVS $Revision: 1.28 $ $Date: 2002/02/19 20:48:03 $
  + * @version CVS $Revision: 1.29 $ $Date: 2002/02/20 15:24:22 $
    */
   public class ContainerManager implements Disposable
   {
  @@ -153,7 +153,7 @@
       private       Configuration           m_roleConfig;
       private       Context                 m_rootContext;
       private       Context                 m_containerContext;
  -    private       Container               m_containerInstance;
  +    private       Object                  m_containerInstance;
       private       ComponentStateValidator m_validator;
       private       RoleManager             m_roleManager;
   
  @@ -284,10 +284,10 @@
       {
           if ( null == m_containerInstance )
           {
  -            Container instance = null;
  +            Object instance = null;
               try
               {
  -                instance = (Container) m_contextClassLoader
  +                instance = m_contextClassLoader
                           .loadClass( m_initialParameters.getParameter( CONTAINER_CLASS ) )
                           .newInstance();
               }
  
  
  
  1.3       +1 -2      jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/test/ContainerProfile.java
  
  Index: ContainerProfile.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/test/ContainerProfile.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ContainerProfile.java	19 Feb 2002 14:03:22 -0000	1.2
  +++ ContainerProfile.java	20 Feb 2002 15:24:22 -0000	1.3
  @@ -30,7 +30,7 @@
    * Used as a basis for the PoolComparisonProfile Tests
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  - * @version $Id: ContainerProfile.java,v 1.2 2002/02/19 14:03:22 bloritsch Exp $
  + * @version $Id: ContainerProfile.java,v 1.3 2002/02/20 15:24:22 bloritsch Exp $
    */
   public final class ContainerProfile
       extends TestCase
  @@ -99,7 +99,6 @@
               params.setParameter( ContainerManager.CONTAINER_CONFIG, "resource://org/apache/avalon/excalibur/system/test/ContainerProfile.xconf" );
               params.setParameter( ContainerManager.LOG_CATEGORY, "test" );
               params.setParameter( ContainerManager.LOGKIT_CONFIG, "resource://org/apache/avalon/excalibur/system/test/ContainerProfile.xlog" );
  -            params.setParameter( ContainerManager.LOG_CATEGORY, "test" );
               params.setParameter( ContainerManager.THREADS_CPU, "2" );
               params.makeReadOnly();
               ContainerManager cm = new ContainerManager( params, new NullLogger() );
  
  
  
  1.2       +166 -47   jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/util/ContextManager.java
  
  Index: ContextManager.java
  ===================================================================
  RCS file: /home/cvs/jakarta-avalon-excalibur/src/scratchpad/org/apache/avalon/excalibur/system/util/ContextManager.java,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- ContextManager.java	19 Feb 2002 20:48:04 -0000	1.1
  +++ ContextManager.java	20 Feb 2002 15:24:22 -0000	1.2
  @@ -7,57 +7,176 @@
    */
   package org.apache.avalon.excalibur.system.util;
   
  +import org.apache.avalon.excalibur.system.*;
  +import org.apache.avalon.framework.context.*;
  +import org.apache.avalon.framework.parameters.*;
  +import org.apache.avalon.excalibur.logger.LoggerManager;
  +import org.apache.avalon.excalibur.event.Queue;
  +import org.apache.avalon.excalibur.mpool.PoolManager;
  +
  +import java.io.File;
  +
  +
   /**
  - * RoleManager Interface, use this to specify the Components and how they
  - * correspond to easy shorthand names.  The RoleManager assumes a flat
  - * relationship of shorthand names to classes, and classes to roles.
  + * The ContextManager is used to manage the values in a Container's Context.
  + * Use this helper class to create the initial context to pass into the
  + * ContainerManager.  Its purpose is to add the default values, and give
  + * convenient methods to override those defaults.  Once you get an instance
  + * of the Context, it is made read-only and returned.  No further operations
  + * will be possible on it.
    *
    * @author <a href="mailto:bloritsch@apache.org">Berin Loritsch</a>
  - * @version CVS $Revision: 1.1 $ $Date: 2002/02/19 20:48:04 $
  + * @version CVS $Revision: 1.2 $ $Date: 2002/02/20 15:24:22 $
    * @since 4.1
    */
  -public interface ContextManager
  +public class ContextManager
   {
  -    /**
  -     * Find the Class for the given shorthand name.  If there is no
  -     * correspondence between the class and the shorthand name, the method
  -     * returns <code>null</code>.  If this RoleManager does not have the match,
  -     * and there is a parent RoleManager, the parent will be asked to resolve
  -     * the request.
  -     */
  -    Class getClassForName( final String shorthandName );
  -
  -    /**
  -     * This method is merely a hint for serialization.  If this RoleManager does
  -     * not have the match, and there is a parent RoleManager, the parent will be
  -     * asked to resolve the request.
  -     */
  -    String getNameForClass( final Class component );
  -
  -    /**
  -     * Get the Role name for a specific class.  If the class does not belong to
  -     * a Component, or the Role is not easily determinable, this method will return
  -     * <code>null</code>.  If this RoleManager does not have the match, and
  -     * there is a parent RoleManager, the parent will be asked to resolve the
  -     * request.
  -     */
  -    String getRoleForClass( final Class component );
  -
  -    /**
  -     * Get an array of classes registered with the role manager that implement a
  -     * role.  If this RoleManager does not have the match, and there is a parent
  -     * RoleManager, the parent will be asked to resolve the request.
  -     */
  -    Class[] getClassesForRole( final String role );
  -
  -    /**
  -     * Retrieves the handler class name for the specified class.  This
  -     * is called for every Component Implementation.  If this RoleManager does
  -     * not have the match, and there is a parent RoleManager, the parent will be
  -     * asked to resolve the handler's class name.
  -     *
  -     * @param class  The class of the Component in question.
  -     * @return the Class instance of the ComponentHandler.
  -     */
  -    Class getHandlerClassForClass( final Class className );
  +    private final Context        m_rootContext;
  +    private       DefaultContext m_currContext;
  +
  +    public ContextManager()
  +    {
  +        this( defaultParameters() );
  +    }
  +
  +    public ContextManager( Parameters params )
  +    {
  +        this( params, Thread.currentThread().getContextClassLoader() );
  +    }
  +
  +    public ContextManager( Parameters params, ClassLoader contextClassLoader )
  +    {
  +        this( defaultContext( params, contextClassLoader ) );
  +    }
  +
  +    public ContextManager( Context context )
  +    {
  +        m_rootContext = context;
  +        m_currContext = new DefaultContext( m_rootContext );
  +    }
  +
  +    public Context getContextInstance()
  +        throws ContextException
  +    {
  +        m_currContext.get( ContainerManager.CONTAINER_CLASS );
  +
  +        try
  +        {
  +            m_currContext.get( ContainerManager.LOGKIT_CONFIG );
  +        }
  +        catch (Exception e)
  +        {
  +            m_currContext.get( Container.LOGGER_MANAGER );
  +        }
  +
  +        m_currContext.makeReadOnly();
  +        return m_currContext;
  +    }
  +
  +    public void setContainerClass( String className )
  +    {
  +        m_currContext.put( ContainerManager.CONTAINER_CLASS, className );
  +    }
  +
  +    public void setContextDirectory( File file )
  +    {
  +        m_currContext.put( Container.CONTEXT_DIRECTORY, file );
  +    }
  +
  +    public void setWorkDirectory( File file )
  +    {
  +        m_currContext.put( Container.WORK_DIRECTORY, file );
  +    }
  +
  +    public void setContextClassLoader( ClassLoader loader )
  +    {
  +        m_currContext.put( Container.CONTEXT_CLASSLOADER, loader );
  +    }
  +
  +    public void setLogKitLoggerManagerConfiguration( String location )
  +    {
  +        m_currContext.put( ContainerManager.LOGKIT_CONFIG, location );
  +    }
  +
  +    public void setRoleManagerConfiguration( String location )
  +    {
  +        m_currContext.put( ContainerManager.ROLE_CONFIG, location );
  +    }
  +
  +    public void setContainerConfiguration( String location )
  +    {
  +        m_currContext.put( ContainerManager.CONTAINER_CONFIG, location );
  +    }
  +
  +    public void setLoggerCategory( String category )
  +    {
  +        m_currContext.put( ContainerManager.LOG_CATEGORY, category );
  +    }
  +
  +    public void setNumberOfThreadsPerCPU( int numberOfThreads )
  +    {
  +        m_currContext.put( ContainerManager.THREADS_CPU, new Integer( numberOfThreads ) );
  +    }
  +
  +    public void setThreadTimeout( long timeout )
  +    {
  +        m_currContext.put( ContainerManager.THREAD_TIMEOUT, new Long( timeout ) );
  +    }
  +
  +    public void setLoggerManager( LoggerManager logManager )
  +    {
  +        m_currContext.put( Container.LOGGER_MANAGER, logManager );
  +    }
  +
  +    public void setCommandQueue( Queue commandQueue )
  +    {
  +        m_currContext.put( Container.COMMAND_QUEUE, commandQueue );
  +    }
  +
  +    public void setPoolManager( PoolManager poolManager )
  +    {
  +        m_currContext.put( Container.POOL_MANAGER, poolManager );
  +    }
  +
  +    public void setRoleManager( RoleManager roleManager )
  +    {
  +        m_currContext.put( Container.ROLE_MANAGER, roleManager );
  +    }
  +
  +    private static final Parameters defaultParameters()
  +    {
  +        Parameters params = new Parameters();
  +        params.setParameter( ContainerManager.CONTEXT_DIRECTORY, "./" );
  +        params.setParameter( ContainerManager.WORK_DIRECTORY, "/tmp/" );
  +        params.setParameter( ContainerManager.LOG_CATEGORY, "test" );
  +        params.setParameter( ContainerManager.THREADS_CPU, "2" );
  +        params.setParameter( ContainerManager.THREAD_TIMEOUT, "1000" );
  +        params.makeReadOnly();
  +
  +        return params;
  +    }
  +
  +    private static final Context defaultContext( Parameters params,
  +                                          ClassLoader contextClassLoader )
  +    {
  +        DefaultContext context = new DefaultContext();
  +
  +        String[] keys = params.getNames();
  +        for (int i = 0; i < keys.length; i++)
  +        {
  +            context.put( keys[i], params.getParameter( keys[i], null ) );
  +        }
  +
  +        context.put( ContainerManager.CONTEXT_DIRECTORY,
  +                     new File( params.getParameter( ContainerManager.CONTEXT_DIRECTORY, "./" ) ) );
  +        context.put( ContainerManager.WORK_DIRECTORY,
  +                     new File( params.getParameter( ContainerManager.CONTEXT_DIRECTORY, "/tmp" ) ));
  +        context.put( ContainerManager.LOG_CATEGORY,
  +                params.getParameter(ContainerManager.LOG_CATEGORY, null)
  +        );
  +        context.put( Container.CONTEXT_CLASSLOADER, contextClassLoader );
  +        context.makeReadOnly();
  +
  +        return context;
  +    }
   }
  
  
  

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>