Introducing interfaces for ProxyFactory
---------------------------------------

                 Key: PROXY-10
                 URL: https://issues.apache.org/jira/browse/PROXY-10
             Project: Commons Proxy
          Issue Type: Improvement
    Affects Versions: 1.0
            Reporter: Brennan Spies
            Priority: Minor


As per my conversation with James Carman, I am creating an enhancement request 
for Apache Commons Proxy (any version).

I think that forcing all proxy factories to extend a concrete implementation, 
ProxyFactory, is not an optimal design choice. The obvious disadvantages are 
that all subclasses would inherit shared state, as well as potentially 
undesired behavior. Extending a concrete class also makes it much easier to 
break subclasses if ProxyFactory code changes.

Given that the public API of this class could change, I am proposing that 3 new 
interfaces be introduced: DelegatorProxyFactory, InterceptorProxyFactory, and 
InvokerProxyFactory. This would give flexibility to add new interfaces to the 
library (to define new proxy types) without necessarily having to change 
existing interfaces and break potential implementations in "the wild". Existing 
implementations would, of course, implement all three interfaces.

public interface DelegatorProxyFactory {
     public Object createDelegatorProxy(ObjectProvider delegateProvider, 
Class[] proxyClasses) ;
     public Object createDelegatorProxy(ClassLoader classLoader, ObjectProvider 
delegateProvider, Class[] proxyClasses) ; 
}

public interface InterceptorProxyFactory {
     public Object createInterceptorProxy(Object target, Interceptor 
interceptor, Class[] proxyClasses);
     public Object createInterceptorProxy(ClassLoader classLoader, Object 
target, Interceptor interceptor, Class[] proxyClasses) ;
}

public interface InvokerProxyFactory {
     public Object createInvokerProxy(ClassLoader classLoader, Invoker invoker, 
Class[] proxyClasses) ;
     public Object createInvokerProxy(Invoker invoker, Class[] proxyClasses) ;
}

Depending on the timing of the move to Java 5 (version 2.0?), a type-safe 
genericized method could be introduced with a non-array Class parameter.

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.

Reply via email to