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 2003/05/29 19:14:45 UTC

cvs commit: avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl DefaultContainer.java AbstractContainer.java

bloritsch    2003/05/29 10:14:45

  Modified:    fortress/src/java/org/apache/avalon/fortress/impl/factory
                        ProxyManager.java
               fortress/src/java/org/apache/avalon/fortress/impl
                        DefaultContainer.java AbstractContainer.java
  Log:
  Update so that the proxymanager is set according to user preferences.
  
  Revision  Changes    Path
  1.3       +34 -16    avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/factory/ProxyManager.java
  
  Index: ProxyManager.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/factory/ProxyManager.java,v
  retrieving revision 1.2
  retrieving revision 1.3
  diff -u -r1.2 -r1.3
  --- ProxyManager.java	22 Apr 2003 16:12:48 -0000	1.2
  +++ ProxyManager.java	29 May 2003 17:14:45 -0000	1.3
  @@ -63,11 +63,16 @@
    */
   public final class ProxyManager
   {
  +    public static final int DISCOVER = 0;
  +    public static final int NONE = 1;
  +    public static final int BCEL = 2;
  +    public static final int PROXY = 3;
       private static final String BCEL_CLASS = "org.apache.bcel.classfile.JavaClass";
       private static final String BCEL_WRAPPER = "org.apache.avalon.fortress.impl.factory.WrapperObjectFactory";
       private static final String PROXY_WRAPPER = "org.apache.avalon.fortress.impl.factory.ProxyObjectFactory";
  +    private static final String NOOP_WRAPPER = "org.apache.avalon.fortress.impl.factory.NoopObjectFactory";
       private static final boolean m_isBCELPresent;
  -    private final boolean m_useBCELPreference;
  +    private final String m_wrapperClassName;
       private Class m_factoryClass;
   
       static
  @@ -86,14 +91,34 @@
           m_isBCELPresent = bcelPresent;
       }
   
  -    public ProxyManager()
  +    public ProxyManager( final int type ) throws Exception
       {
  -        this( false );
  -    }
  -
  -    public ProxyManager( final boolean useBCEL )
  -    {
  -        m_useBCELPreference = useBCEL;
  +        switch (type)
  +        {
  +            case NONE:
  +                m_wrapperClassName = NOOP_WRAPPER;
  +                break;
  +
  +            case BCEL:
  +                if ( ! m_isBCELPresent ) throw new IllegalStateException("BCEL is not available");
  +                m_wrapperClassName = BCEL_WRAPPER;
  +                break;
  +
  +            case PROXY:
  +                m_wrapperClassName = PROXY_WRAPPER;
  +                break;
  +
  +            default: // DISCOVER
  +                if ( m_isBCELPresent )
  +                {
  +                    m_wrapperClassName = BCEL_WRAPPER;
  +                }
  +                else
  +                {
  +                    m_wrapperClassName = PROXY_WRAPPER;
  +                }
  +                break;
  +        }
       }
   
       public ObjectFactory getWrappedObjectFactory( final ObjectFactory source ) throws Exception
  @@ -102,14 +127,7 @@
           {
               final ClassLoader loader = source.getClass().getClassLoader();
   
  -            if ( m_useBCELPreference && m_isBCELPresent )
  -            {
  -                m_factoryClass = loader.loadClass( BCEL_WRAPPER );
  -            }
  -            else
  -            {
  -                m_factoryClass = loader.loadClass( PROXY_WRAPPER );
  -            }
  +            m_factoryClass = loader.loadClass( m_wrapperClassName );
           }
   
           final Constructor constr = m_factoryClass.getConstructor( new Class[]{ObjectFactory.class} );
  
  
  
  1.15      +31 -1     avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/DefaultContainer.java
  
  Index: DefaultContainer.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/DefaultContainer.java,v
  retrieving revision 1.14
  retrieving revision 1.15
  diff -u -r1.14 -r1.15
  --- DefaultContainer.java	20 May 2003 13:05:41 -0000	1.14
  +++ DefaultContainer.java	29 May 2003 17:14:45 -0000	1.15
  @@ -50,6 +50,7 @@
   package org.apache.avalon.fortress.impl;
   
   import org.apache.avalon.fortress.MetaInfoEntry;
  +import org.apache.avalon.fortress.impl.factory.ProxyManager;
   import org.apache.avalon.framework.configuration.Configurable;
   import org.apache.avalon.framework.configuration.Configuration;
   import org.apache.avalon.framework.configuration.ConfigurationException;
  @@ -121,6 +122,8 @@
       public void configure( final Configuration config )
           throws ConfigurationException
       {
  +        interpretProxy( config.getAttribute("proxy-type", "discover") );
  +
           final Configuration[] elements = config.getChildren();
           for ( int i = 0; i < elements.length; i++ )
           {
  @@ -148,6 +151,33 @@
                       throw new ConfigurationException( "Could not add component", e );
                   }
               }
  +        }
  +    }
  +
  +    /**
  +     * Interpret the ProxyManager type from the configuration element.
  +     *
  +     * @param proxyType
  +     * @throws ConfigurationException
  +     */
  +    protected void interpretProxy( String proxyType ) throws ConfigurationException
  +    {
  +        int type = ProxyManager.DISCOVER;
  +
  +        if ( proxyType.equals("none") ) type = ProxyManager.NONE;
  +        if ( proxyType.equals("bcel") ) type = ProxyManager.BCEL;
  +        if ( proxyType.equals("java") || proxyType.equals("proxy") ) type = ProxyManager.PROXY;
  +
  +        if ( type == ProxyManager.DISCOVER && ! proxyType.equals("discover") )
  +            throw new ConfigurationException("Proxy type '" + proxyType + "' not supported");
  +
  +        try
  +        {
  +            setProxyManager( new ProxyManager( type ) );
  +        }
  +        catch (Exception e)
  +        {
  +            throw new ConfigurationException("Could not create ProxyManager", e);
           }
       }
   
  
  
  
  1.33      +32 -3     avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/AbstractContainer.java
  
  Index: AbstractContainer.java
  ===================================================================
  RCS file: /home/cvs/avalon-excalibur/fortress/src/java/org/apache/avalon/fortress/impl/AbstractContainer.java,v
  retrieving revision 1.32
  retrieving revision 1.33
  diff -u -r1.32 -r1.33
  --- AbstractContainer.java	29 May 2003 16:29:06 -0000	1.32
  +++ AbstractContainer.java	29 May 2003 17:14:45 -0000	1.33
  @@ -141,7 +141,36 @@
   
       protected List m_shutDownOrder;
   
  -    private ProxyManager m_proxyManager = new ProxyManager( true );
  +    private ProxyManager m_proxyManager;
  +
  +    /**
  +     * Allows you to override the ProxyManager used in the container.  In order for your proxymanager
  +     * to be used, it <b>must</b> be set prior to adding any components.
  +     * @param proxyManager
  +     */
  +    protected void setProxyManager( ProxyManager proxyManager )
  +    {
  +        if ( null == proxyManager ) throw new NullPointerException("proxyManager");
  +        if ( null != m_proxyManager ) throw new IllegalStateException("Can not double-assign the ProxyManager");
  +        m_proxyManager = proxyManager;
  +    }
  +
  +    /**
  +     * Guarantees that the ProxyManager will be assigned before use.  If you do not set the proxy
  +     * manager, the AbstractContainer will use the ProxyManager.DISCOVER algorithm.
  +     *
  +     * @return the ProxyManager.
  +     * @throws Exception if there is a problem
  +     */
  +    protected ProxyManager getProxyManager() throws Exception
  +    {
  +        if ( null == m_proxyManager )
  +        {
  +            m_proxyManager = new ProxyManager( ProxyManager.DISCOVER );
  +        }
  +
  +        return m_proxyManager;
  +    }
   
       /**
        * Pull the manager items from the context so we can use them to set up
  @@ -441,7 +470,7 @@
                   new ComponentFactory( clazz, configuration,
                           m_serviceManager, m_componentContext,
                           m_loggerManager, m_extManager );
  -        return m_proxyManager.getWrappedObjectFactory( componentFactory );
  +        return getProxyManager().getWrappedObjectFactory( componentFactory );
       }
   
       /**
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: cvs-unsubscribe@avalon.apache.org
For additional commands, e-mail: cvs-help@avalon.apache.org