You are viewing a plain text version of this content. The canonical link for it is here.
Posted to cvs@avalon.apache.org by mc...@apache.org on 2003/06/09 03:05:34 UTC

cvs commit: avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl StandardBlock.java

mcconnell    2003/06/08 18:05:34

  Modified:    merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl
                        StandardBlock.java
  Log:
  Enhanced handling of virtual service construction.
  
  Revision  Changes    Path
  1.9       +62 -44    avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl/StandardBlock.java
  
  Index: StandardBlock.java
  ===================================================================
  RCS file: /home/cvs/avalon-sandbox/merlin/merlin-core/src/java/org/apache/avalon/merlin/block/impl/StandardBlock.java,v
  retrieving revision 1.8
  retrieving revision 1.9
  diff -u -r1.8 -r1.9
  --- StandardBlock.java	29 May 2003 21:01:38 -0000	1.8
  +++ StandardBlock.java	9 Jun 2003 01:05:34 -0000	1.9
  @@ -164,6 +164,11 @@
       */
       private ThreadGroup m_threads;
   
  +   /**
  +    * The array of interfaces classes that the container represents.
  +    */
  +    private Class[] m_classes;
  +
       //=====================================================================
       // Contextualizable
       //=====================================================================
  @@ -349,6 +354,52 @@
       }
   
      /**
  +    * Return a virtual services matching the supplied interface class.
  +    * @param clazz an interface class
  +    * @return the virtual service directive
  +    */
  +    public VirtualService getVirtualService( Class clazz )
  +    {
  +        ContainmentProfile profile = 
  +          (ContainmentProfile) m_applianceContext.getProfile();
  +        return profile.getVirtualService( clazz );
  +    }
  +
  +    private Object getVirtualService( Object source ) throws Exception
  +    {
  +        return getVirtualService( source, null );
  +    }
  +
  +    private Object getVirtualService( Object source, String ref ) throws Exception
  +    {
  +        getLogger().debug( "building virtual service proxy (VSP)" );
  +        Object instance = super.resolve( source, ref );
  +        Object proxy = Proxy.newProxyInstance( 
  +          m_engine, 
  +          getInterfaceClasses(), 
  +          new BlockInvocationHandler( this, instance ) );
  +        return proxy;
  +    }
  +
  +    private Class[] getInterfaceClasses() throws Exception
  +    {
  +        if( m_classes == null )
  +        {
  +            List list = new ArrayList();
  +            ServiceDescriptor[] services = getServices();
  +            for( int i=0; i<services.length; i++ )
  +            {
  +                final ServiceDescriptor service = services[i];
  +                final String classname = service.getReference().getClassname();
  +                Class clazz = m_engine.loadClass( classname );
  +                list.add( clazz );
  +            }
  +            m_classes = (Class[]) list.toArray( new Class[0] );
  +        }
  +        return m_classes;
  +    }
  +
  +   /**
       * Assemble the appliance.  The implementation extends the default
       * appliance behavior by instantiating the container it is managing,
       * and applying assembly to the container instance. This results in
  @@ -712,6 +763,16 @@
                   }
               }
           }
  +        try
  +        {
  +            m_threads.destroy();
  +        }
  +        catch( Throwable e )
  +        {
  +            final String error =
  +              "Unexpected error while attempting to destroy thread group in: " + this;
  +            getLogger().warn( error );
  +        }
       }
   
      /**
  @@ -733,49 +794,6 @@
       }
   
      /**
  -    * Return a virtual services matching the supplied interface class.
  -    * @param clazz an interface class
  -    * @return the virtual service directive
  -    */
  -    public VirtualService getVirtualService( Class clazz )
  -    {
  -        String classname = clazz.getName();
  -        ContainmentProfile profile = 
  -          (ContainmentProfile) m_applianceContext.getProfile();
  -        return profile.getVirtualService( clazz );
  -    }
  -
  -    private Object getVirtualService( Object source ) throws Exception
  -    {
  -        return getVirtualService( source, null );
  -    }
  -
  -    private Object getVirtualService( Object source, String ref ) throws Exception
  -    {
  -        getLogger().debug( "building virtual service proxy (VSP)" );
  -        Object instance = super.resolve( source, ref );
  -        Object proxy = Proxy.newProxyInstance( 
  -          m_engine, 
  -          getInterfaceClasses(), 
  -          new BlockInvocationHandler( this, instance ) );
  -        return proxy;
  -    }
  -
  -    private Class[] getInterfaceClasses() throws Exception
  -    {
  -        List list = new ArrayList();
  -        ServiceDescriptor[] services = getServices();
  -        for( int i=0; i<services.length; i++ )
  -        {
  -            final ServiceDescriptor service = services[i];
  -            final String classname = service.getReference().getClassname();
  -            Class clazz = m_engine.loadClass( classname );
  -            list.add( clazz );
  -        }
  -        return (Class[]) list.toArray( new Class[0] );
  -    }
  -
  -   /**
       * Internal utility class that enables the execution a block as a 
       * thread against which a context classloader can be assigned.
       */
  @@ -867,7 +885,7 @@
                   }
                   catch( Throwable wakeup )
                   {
  -                        // return
  +                    // return
                   }
               }
   
  
  
  

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