| <!-- | |
| ~ 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> |