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]