Proximity 1.0.0 RC7 review

by on

Proximity project is a cross between an HTTP proxy and a pro-active mirror

License: The Apache License 2.0
File size: 14069K
Developer: Tamas Cservenak
0 stars award from

Proximity project is a cross between an HTTP proxy and a pro-active mirror. One of its primary uses is as Web application to serve as a Maven proxy on a company's intranet.

As for reducing outgoing traffic (caching central and other maven repos), aggregating more repositories (reducing project config) with acting as one logical repository and for publishing in-house and other external maven artifacts which are not uploadable to ibiblio (like commercial projects, J2EE Jars, etc...).

Here are some key features of "Proximity":
2-in-1 - With Proximity you can host your own private repo while proxying other repositories and have all the benefits of local (read FAST) repository access.
Access control - Proximity is well suited for corporate deployments, since it has extensible and configurable AccessManager. Proximity has various AccessManager and AccessDecisionVoter implementations out-of-the-box. Some examples: IP based access restriction, HTTPS access only with client certificate verification and access management based on it. Access control may be configured on Proximity level and on repository level independently.
HTTP, HTTPS and HTTP Proxy support - On it's front, Proximity is unaware is it serving artifacts over plain HTTP or HTTPS (it is container setup, eg. Tomcat). On it's back Proximity Remote Peer is powered with latest Jakarta Commons HttpClient thus has all the capabilities that Commons HttpClient has. HttpClient configuration is fully exposed through Spring context, allowing easy reconfiguration (like http proxy setup). Furthermore, by employing custom front-ends (the Servlet controller class) and appropriate AccessControl class Proximity is ready to fit any specific needs for authorization (authentication is left to container!).
Locally reusable proxy storage - The local storage of defined repositories are complete on-demand-mirrors of real remote repositories, thus usable for republishing (eg. using simple HTTP server. But you will share only the currently downloaded artifacts then).
Aggregating, but in a smart way - It is able to host multiple repositorties, and depending on config, they may or may not be proxied remote repositories. Proximity may be used to serve private artifacts (those not uploadable to central due to their licence) as well on local network only. Still, Proximity tracks and organizes downloaded artifacts separatly, following the origin of the artifact and not mixing them together.
Piping - Thanx to smart aggregation, Proximity is able to form a pipe of it's instances, thus for example on corporate network you may have one central Proximity on a machine with allowed fast outbound traffic, and multiple instances on local subnetworks where no direct outbound traffic is possible. Proximity will all way down to last instance in pipe follow and keep artifacts in separate storage, following their originating repository. Moreover, you will have to publish in house artifacts only in one place.
Fresh as needed - Proximity can be persistent or not, as configured. Moreover, Proximity recognizes the following kinds of items: Maven Snapshots, Maven2 POMs, Maven2 metadata and the rest is "just" artifact. All of these kinds have independent timeout configuration. Thus, every of these item kinds can be: never updated once downloaded, always updated on request or timeouted. These are independent settings (per kind).
Fast searches - With time, your Proximity storage will grow. Proximity uses Apache Lucene as it's indexer to provide fast searches on repositories.
Reusable software - Proximity Core is transport and J2EE technology unaware, this webapp you see is just a front-end for Proximity implemented using Springframework, Velocity and two controller class.
Extensible - Proximity Core is extensible and usable in many different ways and containers. The author have used it in Spring framework container (this webapp actually) and in Codehaus Plexus container (together with embedded Maven2), SAS and/or Danube.

What's New in This Release:
Indexer initialization has been refactored and fixed.
Life cycles of Indexer and Proximity beans are now cleaner.
Various Maven-related problems are fixed: metadata merging and HTTP LastModified header are used properly.
MIME Content type is now set by using JAF javax.activation.MimetypesFileTypeMap.

Proximity 1.0.0 RC7 search tags