| <!-- |
| ~ Licensed to the Apache Software Foundation (ASF) under one or more |
| ~ contributor license agreements. See the NOTICE file distributed with |
| ~ this work for additional information regarding copyright ownership. |
| ~ The ASF licenses this file to You under the Apache License, Version 2.0 |
| ~ (the "License"); you may not use this file except in compliance with |
| ~ the License. You may obtain a copy of the License at |
| ~ |
| ~ http://www.apache.org/licenses/LICENSE-2.0 |
| ~ |
| ~ Unless required by applicable law or agreed to in writing, software |
| ~ distributed under the License is distributed on an "AS IS" BASIS, |
| ~ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| ~ See the License for the specific language governing permissions and |
| ~ limitations under the License. |
| --> |
| <html> |
| <head> |
| <title>Proposal for Proxy Package</title> |
| </head> |
| |
| <body bgcolor="white"> |
| |
| <div align="center"> |
| <h1>Proposal for <em>Proxy</em> Package</h1> |
| </div> |
| |
| <h3>(0) Rationale</h3> |
| |
| <p> |
| 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. |
| </p> |
| |
| <h3>(1) Scope of the Package</h3> |
| |
| <p> |
| 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.). |
| </p> |
| |
| <h3>(1.5) Interaction With Other Packages</h3> |
| |
| <p> |
| <em>Proxy</em> 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. |
| </p> |
| |
| <p>No external configuration files are utilized.</p> |
| |
| <h3>(2) Initial Source of the Package</h3> |
| |
| <p> |
| 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. |
| </p> |
| |
| <p>The proposed package name for the new component is |
| <code>org.apache.commons.proxy</code>.</p> |
| |
| |
| <h3>(3) Required Jakarta-Commons Resources</h3> |
| |
| <ul> |
| <li>SVN Repository - New directory <code>proxy</code> in the |
| <code>jakarta-commons</code> SVN repository. All initial committers |
| are already committers on <code>jakarta-commons</code>, so no |
| additional user setups are required.</li> |
| <li>Mailing List - Discussions will take place on the general |
| <em>jakarta-commons@jakarta.apache.org</em> mailing list. To help |
| list subscribers identify messages of interest, it is suggested that |
| the message subject of messages about this component be prefixed with |
| [proxy].</li> |
| <li>Bugzilla - New component "Proxy" under the "Commons" product |
| category, with appropriate version identifiers as needed.</li> |
| <li>Jyve FAQ - New category "commons-proxy" (when available). </li> |
| </ul> |
| |
| |
| <h3>(4) Initial Committers</h3> |
| <ul> |
| <li>James Carman</li> |
| </ul> |
| </body> |
| </html> |