bloritsch    2003/01/29 14:06:49

  Modified:    src/java/org/apache/avalon/framework/component package.html
  Log:
  upgrade the package.html for the component package
  
  Revision  Changes    Path
  1.2       +80 -1     
jakarta-avalon/src/java/org/apache/avalon/framework/component/package.html
  
  Index: package.html
  ===================================================================
  RCS file: 
/home/cvs/jakarta-avalon/src/java/org/apache/avalon/framework/component/package.html,v
  retrieving revision 1.1
  retrieving revision 1.2
  diff -u -r1.1 -r1.2
  --- package.html      12 Feb 2002 05:36:58 -0000      1.1
  +++ package.html      29 Jan 2003 22:06:49 -0000      1.2
  @@ -1,3 +1,82 @@
   <body>
  -Interfaces and implementation of the component management services supporting 
container based management of componet lookup and decommissioning.
  +  <p>
  +    <b>Deprecated:</b> use the interfaces in the
  +    <code>org.apache.avalon.framework.service</code> package instead.
  +    Interfaces and implementation of the component management services
  +    supporting container based management of componet lookup and
  +    decommissioning.
  +  </p>
  +
  +  <h1>Migration from This Package</h1>
  +
  +  <p>
  +    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.
  +  </p>
  +
  +  <p>
  +    All the Avalon containers now employ this technique so that you can
  +    confidently remove all deprecation warnings from your code by removing
  +    the <code>Component</code> interface.
  +  </p>
  +
  +  <p>
  +    The code snippet below describes how to use JDK 1.3 to create a dynamic
  +    proxy at runtime.  The method <code>getProxy</code> is where the proxy
  +    is actually created.  The class <code>ComponentInvocationHandler</code>
  +    takes care of handling the method calls.
  +  </p>
  +
  +  <pre>
  +    /**
  +     * 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();
  +            }
  +        }
  +    }
  +  </pre>
  +
   </body>
  
  
  

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to