Proposal for Proxy Package

(0) Rationale

Many projects require the use of proxies in order to support such features as method interception/decoration, lazy loading, dependency injection, etc. There are many different techniques for creating proxy objects which delegate to other objects (JDK proxies, CGLIB, and Javassist to name a few). Using these technologies can prove to be quite daunting. This package seeks to abstract away the difficult code required to implement proxies effectively and efficiently so that developers can concentrate on implementing the core implementations and method interceptors.

(1) Scope of the Package

The package shall create and maintain a suite of utility classes for creating dynamic proxy objects written in the Java language to be distributed under the ASF license. The package will include many different "core object provider" implementations supporting many existing remoting technologies (EJB, Hessian, Burlap, JAX-RPC, Apache XML-RPC, RMI, etc.) as well as many other "in-vm" implementations (bean instantiation, cloning, constant, etc.). The package will also provide "decorator object providers" which add functionality to the object providers they wrap such as pooling, singleton, caching, etc. The package will also serve as a repository for many useful interceptor implementations which support such features as logging, asynchronous invocation, etc. The package will provide multiple "proxy factory" implementations, supporting different proxying technologies (JDK proxies, CGLIB, Javassist, etc.).

(1.5) Interaction With Other Packages

Proxy utilizes the JUnit unit testing framework for developing and executing unit tests, but this is of interest only to developers of the component. The original will include support for the Hessian and Burlap remoting protocols. The original codebase will also include support for CGLIB and Javassist-base proxies.

No external configuration files are utilized.

(2) Initial Source of the Package

The initial codebase will be contributed by James Carman based on code in the Syringe (http://syringe.dev.java.net) project and can be distributed under the Apache license.

The proposed package name for the new component is org.apache.commons.proxy.

(3) Required Jakarta-Commons Resources

(4) Initial Committers