Proximity Default Configuration

This Guide is work in progress.

Proximity is made up from the following components:

  • Proximity - handles one or more repository. The order of the configured repositories is important.
  • Repository - may have storage and remote peer defined. It have also pluggable logic to orhestrate the retrieval.
  • Storage - a generic interface, which covers all kind a storage. It may be local or remote, with any kind of underlying protocol (FTP, NFS, HTTP, etc)
  • RemotePeer - a storage subinterface, which covers all kind a remote-storage. It may be kind of underlying protocol (FTP, NFS, HTTP, etc), but Repository KNOWS it is REMOTE.
  • AccessManager - decides whether to allow or forbid access (on Proximity or per repository level).
Notice these described components in the "factory" configuration file below.

Default configuration

Please notice, the even the Proximity uses Spring as it's container, it has no whatsoever dependency against it. Actually, we plan "multi flavored" releases bundled with Spring Application Server and Jetty. Our default (factory) configuration of Proximity as Maven proxy follows (complete Spring config, all default values are here!), In the followings, the three files, applicationContext.xml, proximityHelpers.xml and proximityRepositories.xml will be presenteed.

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!--
		=================================================================================
		Infrastructure, Spring convenience stuff, not Proximity beans.
	-->

	<!-- 
		- Message source
	-->
	<bean id="messageSource"
		class="org.springframework.context.support.ResourceBundleMessageSource">
		<property name="basenames">
			<list>
				<value>flavour-messages</value>
				<value>messages</value>
			</list>
		</property>
	</bean>

	<!-- 
		- Property configurer, see proximity.properties
	-->
	<bean id="propertyConfigurer"
		class="org.springframework.beans.factory.config.PropertyPlaceholderConfigurer">
		<property name="systemPropertiesModeName"
			value="SYSTEM_PROPERTIES_MODE_FALLBACK" />
		<property name="locations">
			<list>
				<value>/WEB-INF/proximity.properties</value>
			</list>
		</property>
	</bean>

	<!--
		=================================================================================
		Proximity
	-->
	<!--
		- Central proximity bean with list of repos and it's helpers.
	-->
	<bean id="proximity"
		class="org.abstracthorizon.proximity.impl.LogicDrivenProximityImpl">
		<property name="accessManager" ref="proximity.accessManager" />
		<property name="proximityLogic" ref="proximity.logic" />
		<property name="emergeRepositoryGroups" value="true" />
		<property name="repositories">
			<list>
				<ref bean="extFree" />
				<ref bean="extNonFree" />
				<ref bean="central" />
				<ref bean="codehaus" />
				<ref bean="apache.snapshot" />
				<ref bean="codehaus.snapshot" />
				<ref bean="inhouse" />
				<ref bean="inhouse.snapshot" />
			</list>
		</property>
	</bean>

	<!--
		- AccessManagers. With OpenAccessManager Proximity is wide open.
	-->
	<bean id="proximity.accessManager"
		class="org.abstracthorizon.proximity.access.OpenAccessManager" />

	<!--
		- "Mavenized" logic for Proximity.
		- It does inter-repository merging of M2 metadatas.
	-->
	<bean id="proximity.logic"
		class="org.abstracthorizon.proximity.maven.MavenProximityLogic" />

	<!--
		- Indexer, used to speed up searches ONLY.
	-->
	<bean id="proximity.indexer"
		class="org.abstracthorizon.proximity.indexer.LuceneIndexer"
		init-method="initialize">
		<property name="proximity" ref="proximity"/>
		<!-- Where to store indexes? -->
		<property name="indexDirectory" value="${indexer.dir}" />
		<!-- On webapp start should i recreate Lucene indexes? -->
		<property name="recreateIndexes" value="true" />
		<!-- After how much of item insertion should i optimize indexes? -->
		<property name="dirtyItemTreshold" value="100" />
	</bean>

</beans>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!--
		- WebDav storage adapter, using proximity itself as storage.
	-->
	<bean id="proximity.webdavstorage"
		class="org.abstracthorizon.proximity.webapp.webdav.ProximityWebdavStorageAdapter">
		<property name="proximity" ref="proximity" />
	</bean>

	<!--
		- StatisticsGatherer, gathers statistics. Simple in-memory implementation.
	-->
	<bean id="proximity.statisticsGatherer"
		class="org.abstracthorizon.proximity.stats.SimpleStatisticsGathererImpl" />

	<!--
		- ItemPropertiesFactory, creates "extra" metadata about files.
	-->
	<bean id="proximity.itemPropertiesFactory"
		class="org.abstracthorizon.proximity.metadata.InspectorListProcessingProxiedItemPropertiesFactory">
		<property name="itemInspectorList">
			<list>
				<bean
					class="org.abstracthorizon.proximity.maven.MavenItemInspector" />
				<bean
					class="org.abstracthorizon.proximity.metadata.inspectors.ZipFileInspector" />
				<bean
					class="org.abstracthorizon.proximity.metadata.inspectors.JarFileInspector" />
			</list>
		</property>
	</bean>

	<!--
		- AccessManagers. With OpenAccessManager Proximity is wide open.
	-->
	<bean id="proximity.openAccessManager"
		class="org.abstracthorizon.proximity.access.OpenAccessManager" />

	<!--
		- AccessManagers. With AffirmativeAccessManager, we will have access if all defined
		- voters vote AFFIRMATIVE.
		
		- We have currently ONE voter, that tries to resemble Apache HTTPD2 Basic Access Control.
		- We should suppply the allowFrom and denyFrom Java REGEX patterns and a boolean
		- TRUE for "Order allow,deny" or FALSE for "Order deny,allow" (a la Apache httpd)
		
		- Using these settings below, we have AccessManager that allows access for our
		- 192.168.0.x LAN only. Requests from outer network will be REJECTED, thus
		- Px is safe to sit on DMZ machine.
		- Please note, that this settings will REJECT LOCALHOST TOO! 127.0.0.1
		
		- If configured on Proximity bean level: the browse link will be inaccessible
		- If configured on Repository level: the browse will show top-level items but the
		- restricted repos will not allow download.
		- Play with differenct combinations!
		
		- And don't forget: you may have as much voter and accessManager beans as you love!
	-->
	<bean id="proximity.internalLanOnlyAccessManager"
		class="org.abstracthorizon.proximity.access.AffirmativeAccessManager">
		<property name="voters">
			<list>
				<bean
					class="org.abstracthorizon.proximity.webapp.access.IpAddressAccessDecisionVoter">
					<property name="allowDeny" value="true" />
					<property name="allowFromPattern"
						value="192\.168\.0\..*" />
					<property name="denyFromPattern" value=".*" />
				</bean>
			</list>
		</property>
	</bean>

	<!--
		=================================================================================
	-->

	<!--
		- Logic used for Maven2 repositories.
		- Use seconds for setting timeout.
		- x > 0 - the expiration in seconds
		- x = 0 - the expiration flag is set to now, thus it will expire initially and be refetched always
		- x = -1 - turn off for the group expiration handling.
	-->

	<!-- A release (stable) repository logic, never expires nothing -->
	<bean id="proximity.maven2ReleaseRepoLogic"
		class="org.abstracthorizon.proximity.maven.MavenProxyRepositoryLogic">
		<!-- SNAPSHOTSs expires after NEVER -->
		<property name="snapshotExpirationPeriodInSeconds" value="-1" />
		<!-- Maven2 POMs expires after NEVER -->
		<property name="pomExpirationPeriodInSeconds" value="-1" />
		<!-- Maven2 metadatas (maven-metadata.xml and *.sha1 and *.md5) expires after NEVER -->
		<property name="metadataExpirationPeriodInSeconds" value="-1" />
		<!-- everything else will never expire once downloaded -->
		<property name="itemExpirationPeriodInSeconds" value="-1" />
		<!-- Should repository driven by this logic serve snapshots? -->
		<property name="shouldServeSnapshots" value="false" />
		<!-- Should repository driven by this logic serve releases? -->
		<property name="shouldServeReleases" value="true" />
	</bean>

	<!-- A snapshot (unstable) repository logic, generally 24h is expiration -->
	<bean id="proximity.maven2SnapshotRepoLogic"
		class="org.abstracthorizon.proximity.maven.MavenProxyRepositoryLogic">
		<!-- SNAPSHOTSs expires after 12h -->
		<property name="snapshotExpirationPeriodInSeconds"
			value="43200" />
		<!-- Maven2 POMs expires after 12h -->
		<property name="pomExpirationPeriodInSeconds" value="43200" />
		<!-- Maven2 metadatas (maven-metadata.xml and *.sha1 and *.md5) expires after 12h -->
		<property name="metadataExpirationPeriodInSeconds"
			value="43200" />
		<!-- everything else will expire once downloaded after 12h -->
		<property name="itemExpirationPeriodInSeconds" value="43200" />
		<!-- Should repository driven by this logic serve snapshots? -->
		<property name="shouldServeSnapshots" value="true" />
		<!-- Should repository driven by this logic serve releases? -->
		<property name="shouldServeReleases" value="false" />
	</bean>

</beans>

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

	<!--
		- MAVEN2 repository!
		- repo1.maven.org Central Repository (with writable cache storage and remote peer)
		- A standard maven2 repository.
	-->
	<bean id="central"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="central" />
		<property name="groupId" value="public" />
		<property name="rank" value="50" />

		<property name="localStorage" ref="centralFSStorage" />
		<property name="remoteStorage" ref="centralRemotePeer" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous accessManager declaration to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<property name="repositoryLogic" ref="proximity.maven2ReleaseRepoLogic" />
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="centralFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${centralFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${centralFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<bean id="centralRemotePeer"
		class="org.abstracthorizon.proximity.storage.remote.CommonsHttpClientRemotePeer">
		<property name="remoteUrl"
			value="http://repo1.maven.org/maven2/" />
		<!-- The timeout of HTTP connection -->
		<property name="connectionTimeout" value="10000" />
		<!-- The count of retries (used by DefaultRetryHandler) -->
		<property name="retrievalRetryCount" value="3" />
		<!-- Should HttpClient follow redirections? (preferred!) -->
		<property name="followRedirection" value="true" />
		<!-- Fix query string appended to URL, used for ProximityPiping "repositoryId=central" -->
		<property name="queryString" value="" />
		<!-- Proxy setup, uncomment if needed
			<property name="proxyHost" value="myproxyhost.company.com" />
			<property name="proxyPort" value="8080" />
		-->
		<!-- Proxy authentication setup, uncomment if proxy needs this
			<property name="proxyUsername" value="userOnProxy" />
			<property name="proxyPassword" value="bigSecret" />
		-->
		<!-- Proxy NTLM authentication setup, uncomment if proxy needs this
			<property name="proxyNtlmDomain" value="domain to authenticate within" />
			<property name="proxyNtlmHost" value="originating hostname" />
			<property name="proxyUsername" value="userOnProxyWithoutDomainPrefix" />
			<property name="proxyPassword" value="bigSecret" />
		-->
	</bean>

	<!-- FTP remote peer if somebody need it....
		<bean id="centralRemotePeer"
		class="org.abstracthorizon.proximity.base.remote.CommonsNetFtpRemotePeer">
		<property name="remoteUrl"
		value="ftp://repo1.maven.org/pub/packages/maven2/" />
		<property name="ftpUsername" value="anonymous" />
		<property name="ftpPassword" value="someemail@somedomain.com" />
		</bean>
	-->

	<!--
		- MAVEN2 repository!
		- repo1.maven.org Central Repository (with writable cache storage and remote peer)
		- A standard maven2 repository.
	-->
	<bean id="codehaus"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="codehaus" />
		<property name="groupId" value="codehaus" />
		<property name="rank" value="60" />

		<property name="localStorage" ref="codehausFSStorage" />
		<property name="remoteStorage" ref="codehausRemotePeer" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous accessManager declaration to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<property name="repositoryLogic" ref="proximity.maven2ReleaseRepoLogic" />
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="codehausFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${codehausFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${codehausFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<bean id="codehausRemotePeer"
		class="org.abstracthorizon.proximity.storage.remote.CommonsHttpClientRemotePeer">
		<property name="remoteUrl"
			value="http://repository.codehaus.org/" />
		<!-- The timeout of HTTP connection -->
		<property name="connectionTimeout" value="10000" />
		<!-- The count of retries (used by DefaultRetryHandler) -->
		<property name="retrievalRetryCount" value="3" />
		<!-- Should HttpClient follow redirections? (preferred!) -->
		<property name="followRedirection" value="true" />
		<!-- Fix query string appended to URL, used for ProximityPiping "repositoryId=central" -->
		<property name="queryString" value="" />
		<!-- Proxy setup, uncomment if needed
			<property name="proxyHost" value="myproxyhost.company.com" />
			<property name="proxyPort" value="8080" />
		-->
		<!-- Proxy authentication setup, uncomment if proxy needs this
			<property name="proxyUsername" value="userOnProxy" />
			<property name="proxyPassword" value="bigSecret" />
		-->
		<!-- Proxy NTLM authentication setup, uncomment if proxy needs this
			<property name="proxyNtlmDomain" value="domain to authenticate within" />
			<property name="proxyNtlmHost" value="originating hostname" />
			<property name="proxyUsername" value="userOnProxyWithoutDomainPrefix" />
			<property name="proxyPassword" value="bigSecret" />
		-->
	</bean>

	<!--
		- MAVEN2 repository!
		- "Official" Snapshot Repository (with writable cache storage and remote peer)
		- A standard maven2 repository.
	-->
	<bean id="apache.snapshot"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="apache.snapshot" />
		<property name="groupId" value="apache.snapshot" />
		<property name="rank" value="80" />

		<property name="localStorage" ref="apache.snapshotFSStorage" />
		<property name="remoteStorage" ref="apache.snapshotRemotePeer" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous accessManager declaration to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<property name="repositoryLogic" ref="proximity.maven2SnapshotRepoLogic" />
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="apache.snapshotFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${apache.snapshotFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${apache.snapshotFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<bean id="apache.snapshotRemotePeer"
		class="org.abstracthorizon.proximity.storage.remote.CommonsHttpClientRemotePeer">
		<property name="remoteUrl"
			value="http://people.apache.org/maven-snapshot-repository/" />
		<!-- The timeout of HTTP connection -->
		<property name="connectionTimeout" value="10000" />
		<!-- The count of retries (used by DefaultRetryHandler) -->
		<property name="retrievalRetryCount" value="3" />
		<!-- Should HttpClient follow redirections? (preferred!) -->
		<property name="followRedirection" value="true" />
		<!-- Fix query string appended to URL, used for ProximityPiping "repositoryId=central" -->
		<property name="queryString" value="" />
		<!-- Proxy setup, uncomment if needed
			<property name="proxyHost" value="myproxyhost.company.com" />
			<property name="proxyPort" value="8080" />
		-->
		<!-- Proxy authentication setup, uncomment if proxy needs this
			<property name="proxyUsername" value="userOnProxy" />
			<property name="proxyPassword" value="bigSecret" />
		-->
		<!-- Proxy NTLM authentication setup, uncomment if proxy needs this
			<property name="proxyNtlmDomain" value="domain to authenticate within" />
			<property name="proxyNtlmHost" value="originating hostname" />
			<property name="proxyUsername" value="userOnProxyWithoutDomainPrefix" />
			<property name="proxyPassword" value="bigSecret" />
		-->
	</bean>

	<!--
		- MAVEN2 repository!
		- "Official" Snapshot Repository (with writable cache storage and remote peer)
		- A standard maven2 repository.
	-->
	<bean id="codehaus.snapshot"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="codehaus.snapshot" />
		<property name="groupId" value="codehaus.snapshot" />
		<property name="rank" value="90" />

		<property name="localStorage" ref="codehaus.snapshotFSStorage" />
		<property name="remoteStorage"
			ref="codehaus.snapshotRemotePeer" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous accessManager declaration to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<property name="repositoryLogic" ref="proximity.maven2SnapshotRepoLogic" />
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="codehaus.snapshotFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${codehaus.snapshotFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${codehaus.snapshotFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<bean id="codehaus.snapshotRemotePeer"
		class="org.abstracthorizon.proximity.storage.remote.CommonsHttpClientRemotePeer">
		<property name="remoteUrl"
			value="http://snapshots.repository.codehaus.org/" />
		<!-- The timeout of HTTP connection -->
		<property name="connectionTimeout" value="10000" />
		<!-- The count of retries (used by DefaultRetryHandler) -->
		<property name="retrievalRetryCount" value="3" />
		<!-- Should HttpClient follow redirections? (preferred!) -->
		<property name="followRedirection" value="true" />
		<!-- Fix query string appended to URL, used for ProximityPiping "repositoryId=central" -->
		<property name="queryString" value="" />
		<!-- Proxy setup, uncomment if needed
			<property name="proxyHost" value="myproxyhost.company.com" />
			<property name="proxyPort" value="8080" />
		-->
		<!-- Proxy authentication setup, uncomment if proxy needs this
			<property name="proxyUsername" value="userOnProxy" />
			<property name="proxyPassword" value="bigSecret" />
		-->
		<!-- Proxy NTLM authentication setup, uncomment if proxy needs this
			<property name="proxyNtlmDomain" value="domain to authenticate within" />
			<property name="proxyNtlmHost" value="originating hostname" />
			<property name="proxyUsername" value="userOnProxyWithoutDomainPrefix" />
			<property name="proxyPassword" value="bigSecret" />
		-->
	</bean>


	<!--
		- In-House Repository (with read-only storage and without remote peer)
		- A maven repository for publishing in-house artifacts.
	-->
	<bean id="inhouse"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="inhouse" />
		<property name="groupId" value="inhouse" />
		<property name="rank" value="10" />

		<property name="localStorage" ref="inhouseFSStorage" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="repositoryLogic" ref="proximity.maven2ReleaseRepoLogic" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous row to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="inhouseFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${inhouseFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${inhouseFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<bean id="inhouse.snapshot"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="inhouse.snapshot" />
		<property name="groupId" value="inhouse.snapshot" />
		<property name="rank" value="15" />

		<property name="localStorage" ref="inhouse.snapshotFSStorage" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="repositoryLogic" ref="proximity.maven2SnapshotRepoLogic" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous row to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<property name="indexable" value="true"/>
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="inhouse.snapshotFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${inhouse.snapshotFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${inhouse.snapshotFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<!--
		- EXT NonFree Repository (with read-only storage and without remote peer)
		- A maven repository for in-house use for publishing released non-free artifacts 
		- not deployed on standard maven repositories (oracle JDBC, J2EE, etc...).
	-->
	<bean id="extNonFree"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="extNonFree" />
		<property name="groupId" value="public" />
		<property name="rank" value="35" />

		<property name="localStorage" ref="extNonFreeFSStorage" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="repositoryLogic" ref="proximity.maven2ReleaseRepoLogic" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous row to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="extNonFreeFSStorage"
		class="org.abstracthorizon.proximity.storage.local.ReadOnlyFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${extNonFreeFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${extNonFreeFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

	<!--
		- EXT Free Repository (with read-only storage and without remote peer)
		- A maven repository for in-house use for publishing released artifacts 
		- not deployed on standard maven repositories (dwr, etc...).
	-->
	<bean id="extFree"
		class="org.abstracthorizon.proximity.impl.LogicDrivenRepositoryImpl">
		<property name="id" value="extFree" />
		<property name="groupId" value="public" />
		<property name="rank" value="25" />

		<property name="localStorage" ref="extFreeFSStorage" />
		<property name="statisticsGatherer" ref="proximity.statisticsGatherer" />
		<property name="repositoryLogic" ref="proximity.maven2ReleaseRepoLogic" />
		<property name="accessManager" ref="proximity.openAccessManager" />
		<!-- Uncomment this and delete previous row to restrict access to this repo
			<property name="accessManager" ref="internalLanOnlyAccessManager" />
		-->
		<!-- Am I listable? -->
		<property name="listable" value="true" />
		<!-- Am I available? If no, i will refuse all requests -->
		<property name="available" value="true" />
		<!-- Am I offline? If yes, i will not touch my remote peer, will serve only from localStorage -->
		<property name="offline" value="false" />
		<!-- Is repo indexable? -->
		<property name="indexable" value="true"/>
		<!-- Should repo be indexed at startup? (NOT USED?) -->
		<property name="reindexAtInitialize" value="true"/>
	</bean>

	<bean id="extFreeFSStorage"
		class="org.abstracthorizon.proximity.storage.local.WritableFileSystemStorage">
		<property name="metadataAware" value="true" />
		<property name="metadataDirFile"
			value="${extFreeFSStorage.metadataDir}" />
		<property name="storageDirFile"
			value="${extFreeFSStorage.baseDir}" />
		<property name="proxiedItemPropertiesFactory"
			ref="proximity.itemPropertiesFactory" />
	</bean>

</beans>