blob: 42cfa3626b66a1ed7d846fcbd19effee7de4dc7b [file] [log] [blame]
<!--
Copyright 2005 The Apache Software Foundation
Licensed 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 proxy objects written in the Java
language
to be distributed under the ASF license. The package will include many different "object provider" implementations.
The package will also serve as a repository for many useful MethodInterceptor (AOP Alliance API) implementations.
The
package will provide multiple "proxy factory" implementations, supporting different proxying technologies (JDK
proxies,
CGLIB, Javassist).
</p>
<h3>(1.5) Interaction With Other Packages</h3>
<p>
<em>Proxy</em> relies on some JDK5-specific features, such as generics and read/write locks
(java.util.concurrent.locks package). It 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. Method interception will be
done using the AOP Alliance API.
</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>