On Wednesday 24 August 2005 23:32, James Carman wrote:
JC> To be quite honest, nobody has fully provided the JavassistProxyFactory
JC> implementation to commons-proxy yet, either. :-) I started on it but
JC> couldn't get the intercepted proxies working.
:))
JC> One key difference, it seems, between proxytoys and commons-proxy is that
JC> commons-proxy somewhat assumes that there will be a "target" object (some
JC> actual object that implements the core functionality) to the invocation.
JC> ProxyToys doesn't seem to make that assumption (correct me if I'm wrong).
Right. Some view toy proxies can act without a target.
JC> One problem that I see with ProxyToys is in the implementation of the
JC> DelegatingInvoker and SimpleInvoker (what I would have to use if I did
have
JC> a target object) class. No matter what ProxyFactory you're using,
JC> DelegatingInvoker and SimpleInvoker ultimately use JDK reflection to
invoke
JC> the method on the delegate/target.
Yes. In the end it the proxy uses always InvocationHandler.invoke() as
callback.
JC> Commons-proxy doesn't do that.
Must have a look at the code :)
JC> ProxyToys, ultimately, should be much
JC> slower, which is illustrated by the following code:
JC>
JC> public class CompareToProxyToys
JC> {
JC> private static final int N = 100000000;
JC>
JC> public static void main( String[] args )
JC> {
JC> final EchoImpl impl = new EchoImpl();
JC> final Echo proxyToys = ( Echo )new
JC> com.thoughtworks.proxy.factory.CglibProxyFactory().createProxy( new
Class[]
JC> { Echo.class }, new SimpleInvoker( impl ) );
JC> final Echo commonsProxy = ( Echo )new
JC> CglibProxyFactory().createProxy( new ConstantProvider<Echo>( impl ),
JC> Echo.class );
JC> System.out.println( MessageFormat.format( "Average duration of
JC> ProxyToys is approximately {0,number,0.00#} times slower than
JC> commons-proxy.", new Double( averageDuration( proxyToys ) /
JC> averageDuration(commonsProxy ) ) ) );
JC> }
JC>
JC> private static double averageDuration( Echo echo )
JC> {
JC> final long before = System.nanoTime();
JC> for( int i= 0; i < N; ++i )
JC> {
JC> echo.echoBack( "Hello, World!" );
JC> }
JC> final long after = System.nanoTime();
JC> return ( ( after - before ) * 1.0 / N );
JC> }
JC> }
JC>
JC> ProxyToys' average duration was approximately 7x slower than commons-proxy
JC> using this crude test (I'm not saying these are the best metrics in the
JC> world).
I'll investigate.
JC> Again, I allowed both implementations to use a CGLIB-based proxy.
Well, no <g>
The CglibProxyFactory of ProxyToys will use internally a JDK proxy if the
proxy implements exactly one interface. Don't ask me why, that is not my
code. But I'll try this without that "optimization".
- Jörg
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]