Top Description Interfaces Classes
[default module]

Package org.apache.avalon.framework.component


Deprecated: use the interfaces in the org.apache.avalon.framework.service package instead. Interfaces and implementation of the component management services supporting container based management of componet lookup and decommissioning.

Migration from This Package

The Avalon team has determined that the best way to remove the need for this package in projects that existed before the team deprecated the package is to use a dynamic proxy. There are two ways of defining a dynamic proxy: using JDK 1.3's dynamic proxy generation code, and using BCEL to write a special purpose proxy.

All the Avalon containers now employ this technique so that you can confidently remove all deprecation warnings from your code by removing the Component interface.

The code snippet below describes how to use JDK 1.3 to create a dynamic proxy at runtime. The method getProxy is where the proxy is actually created. The class ComponentInvocationHandler takes care of handling the method calls.

    /**
 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();
            }
        }
    }
  

Interface Summary

Modifier and TypeInterface and Description
public interface
Component

This interface identifies classes that can be used as Components by a Composable.

public interface
ComponentManager

A ComponentManager selects Components based on a role.

public interface
ComponentSelector

A ComponentSelector selects Components based on a hint.

public interface
Composable

A Composable class is one that needs to connect to software components using a "role" abstraction, thus not depending on particular implementations but on behavioral interfaces.

public interface
Recomposable

Deprecated Deprecated with no replacement. The Recomposable interface is a legacy interface with no concrete contracts. Rather than copy the design mistake to the "service" package, we no longer support this class.
Extends composer to allow recomposing.

Class Summary

Modifier and TypeClass and Description
public class
ComponentException

The exception thrown to indicate a problem with Components.