You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by ma...@apache.org on 2019/08/04 20:40:14 UTC

[archiva] branch feature/storage_refactoring updated: Changing session handling for metadata API

This is an automated email from the ASF dual-hosted git repository.

martin_s pushed a commit to branch feature/storage_refactoring
in repository https://gitbox.apache.org/repos/asf/archiva.git


The following commit(s) were added to refs/heads/feature/storage_refactoring by this push:
     new eca0097  Changing session handling for metadata API
eca0097 is described below

commit eca0097d857aa4739a6387c67d22a9a355a46fa1
Author: Martin Stockhammer <ma...@apache.org>
AuthorDate: Sun Aug 4 22:40:04 2019 +0200

    Changing session handling for metadata API
---
 .../core/repository/AbstractRepositoryPurge.java   |  29 +-
 .../CleanupReleasedSnapshotsRepositoryPurge.java   |   4 +-
 .../core/repository/RepositoryPurgeConsumer.java   |   9 +-
 ...leanupReleasedSnapshotsRepositoryPurgeTest.java |  42 +-
 .../repository/DaysOldRepositoryPurgeTest.java     |  24 +-
 .../repository/RepositoryPurgeConsumerTest.java    |  34 +-
 .../RetentionCountRepositoryPurgeTest.java         |  24 +-
 .../metadata/ArchivaMetadataCreationConsumer.java  |  28 +-
 .../archiva/mock/MockRepositorySessionFactory.java |   6 +-
 .../managed/DefaultManagedRepositoryAdmin.java     |  30 +-
 .../ArchivaRepositoryScanningTaskExecutor.java     |   8 +
 .../DefaultRepositoryArchivaTaskScheduler.java     |  10 +-
 .../rest/services/DefaultBrowseService.java        | 159 ++++++-
 .../DefaultManagedRepositoriesService.java         |  10 +-
 .../services/DefaultMergeRepositoriesService.java  |  34 +-
 .../services/DefaultReportRepositoriesService.java |  38 +-
 .../rest/services/DefaultRepositoriesService.java  |  90 +++-
 .../rest/services/DefaultSearchService.java        |  12 +-
 .../processor/NewArtifactsRssFeedProcessor.java    |   2 +-
 .../NewVersionsOfArtifactRssFeedProcessor.java     |   4 +-
 .../NewArtifactsRssFeedProcessorTest.java          |   5 +-
 .../NewVersionsOfArtifactRssFeedProcessorTest.java |   8 +-
 .../org/apache/archiva/web/rss/RssFeedServlet.java |   4 +
 .../webtest/memory/TestMetadataRepository.java     |  13 +-
 .../memory/TestRepositorySessionFactory.java       |   3 +-
 .../repository/AbstractMetadataRepository.java     |  86 ++--
 .../repository/DefaultMetadataResolver.java        |  30 +-
 .../metadata/repository/MetadataRepository.java    | 132 +++---
 ...nFactory.java => MetadataSessionException.java} |  31 +-
 .../metadata/repository/RepositorySession.java     |  32 +-
 .../repository/RepositorySessionFactory.java       |   6 +-
 .../repository/AbstractMetadataRepositoryTest.java | 492 +++++++++----------
 .../stats/model/RepositoryStatisticsProvider.java  |   5 +-
 .../model/RepositoryWalkingStatisticsProvider.java |  19 +-
 .../apache/archiva/audit/DefaultAuditManager.java  |  20 +-
 .../archiva/audit/MetadataAuditListener.java       |  14 +-
 .../org/apache/archiva/audit/AuditManagerTest.java |  96 ++--
 .../cassandra/CassandraMetadataRepository.java     | 141 ++----
 .../CassandraRepositorySessionFactory.java         |   3 +-
 .../cassandra/CassandraMetadataRepositoryTest.java |   4 +-
 .../cassandra/RepositoriesNamespaceTest.java       |  16 +-
 .../repository/file/FileMetadataRepository.java    | 154 +++---
 .../file/FileRepositorySessionFactory.java         |   3 +-
 .../repository/jcr/JcrMetadataRepository.java      | 521 +++++++++++----------
 .../jcr/JcrRepositorySessionFactory.java           |  33 +-
 .../metadata/repository/jcr/JcrSession.java        | 108 +++++
 .../repository/jcr/JcrMetadataRepositoryTest.java  |   2 +-
 .../JcrRepositoryStatisticsGatheringTest.java      |   4 +-
 .../reports/RepositoryProblemEventListener.java    |   6 +-
 .../consumers/DuplicateArtifactsConsumer.java      |  13 +-
 .../consumers/DuplicateArtifactsConsumerTest.java  |  20 +-
 .../stats/DefaultRepositoryStatisticsManager.java  |  26 +-
 .../stats/RepositoryStatisticsManagerTest.java     | 126 ++---
 .../merge/Maven2RepositoryMerger.java              |   8 +-
 .../merge/Maven2RepositoryMergerTest.java          |  10 +-
 55 files changed, 1589 insertions(+), 1202 deletions(-)

diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
index 9ec198b..c470615 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/AbstractRepositoryPurge.java
@@ -38,8 +38,6 @@ import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
 import java.io.IOException;
-import java.nio.file.Files;
-import java.nio.file.Path;
 import java.util.Collection;
 import java.util.HashMap;
 import java.util.HashSet;
@@ -205,8 +203,8 @@ public abstract class AbstractRepositoryPurge
                 {
                     try
                     {
-                        metaResolved.put( metaBaseId, metadataRepository.getArtifacts( repository.getId( ), reference.getGroupId( ),
-                            reference.getArtifactId( ), baseVersion ) );
+                        metaResolved.put( metaBaseId, metadataRepository.getArtifacts( , repository.getId( ),
+                            reference.getGroupId( ), reference.getArtifactId( ), baseVersion ) );
                     }
                     catch ( MetadataResolutionException e )
                     {
@@ -284,7 +282,14 @@ public abstract class AbstractRepositoryPurge
                 purgeSupportFiles( artifactFile );
             }
             purgeMetadata( metadataRepository, metaRemovalList );
-            repositorySession.save( );
+            try
+            {
+                repositorySession.save( );
+            }
+            catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+            {
+                e.printStackTrace( );
+            }
 
         }
     }
@@ -316,12 +321,12 @@ public abstract class AbstractRepositoryPurge
         {
             try
             {
-                artifacts = metadataRepository.getArtifacts( repository.getId( ), info.getNamespace( ), info.getName( ),
-                    info.getProjectVersion( ) );
+                artifacts = metadataRepository.getArtifacts( , repository.getId( ), info.getNamespace( ),
+                    info.getName( ), info.getProjectVersion( ) );
                 if ( artifacts.size( ) == 0 )
                 {
-                    metadataRepository.removeProjectVersion( repository.getId( ), info.getNamespace( ),
-                        info.getName( ), info.getProjectVersion( ) );
+                    metadataRepository.removeProjectVersion( , repository.getId( ),
+                        info.getNamespace( ), info.getName( ), info.getProjectVersion( ) );
                     log.debug( "Removed project version from MetadataRepository {}", info );
                 }
             }
@@ -355,14 +360,14 @@ public abstract class AbstractRepositoryPurge
                     version = artifactInfo.getProjectVersion( );
                 MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet( );
                 mavenArtifactFacetToCompare.setClassifier( artifactInfo.getClassifier( ) );
-                metadataRepository.removeArtifact( repository.getId( ), groupId, artifactId,
-                    version, mavenArtifactFacetToCompare );
+                metadataRepository.removeArtifact( , repository.getId( ), groupId,
+                    artifactId, version, mavenArtifactFacetToCompare );
                 metadataRepository.save( );
             }
         }
         else
         {
-            metadataRepository.removeArtifact( artifactMetadata, artifactInfo.getProjectVersion( ) );
+            metadataRepository.removeArtifact( , artifactMetadata, artifactInfo.getProjectVersion( ) );
         }
     }
 
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
index e36b394..5c33d44 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurge.java
@@ -158,8 +158,8 @@ public class CleanupReleasedSnapshotsRepositoryPurge
                         artifactRef.getArtifactId( ), artifactRef.getVersion( ),
                         artifactFile.getFileName().toString() );
                 }
-                metadataRepository.removeProjectVersion( repository.getId( ), artifactRef.getGroupId( ),
-                    artifactRef.getArtifactId( ), artifactRef.getVersion( ) );
+                metadataRepository.removeProjectVersion( , repository.getId( ),
+                    artifactRef.getGroupId( ), artifactRef.getArtifactId( ), artifactRef.getVersion( ) );
 
                 needsMetadataUpdate = true;
             }
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
index e1d9156..6c153f2 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumer.java
@@ -137,7 +137,14 @@ public class RepositoryPurgeConsumer
         ManagedRepositoryContent repositoryContent;
         repositoryContent = repository.getContent();
 
-        repositorySession = repositorySessionFactory.createSession( );
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession( );
+        }
+        catch ( org.apache.archiva.metadata.repository.MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         if (repository.supportsFeature( ArtifactCleanupFeature.class ))
         {
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
index 01f9a29..034aab9 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/CleanupReleasedSnapshotsRepositoryPurgeTest.java
@@ -127,8 +127,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
 
         repoPurge.process( PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
@@ -137,8 +137,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Verify the metadataRepository invocations
         // complete snapshot version removal for released
-        verify(metadataRepository, times(1)).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.3"));
+        verify(metadataRepository, times(1)).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.3") );
 
         // check if the snapshot was removed
         assertDeleted( projectRoot + "/2.3-SNAPSHOT" );
@@ -246,12 +246,12 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         List<ArtifactMetadata> ml2 = getArtifactMetadataFromDir(RELEASES_TEST_REPO_ID , projectName, repo.getParent(), releaseDir );
-        when(metadataRepository.getArtifacts(RELEASES_TEST_REPO_ID, projectNs,
-            projectName, releaseVersion)).thenReturn(ml2);
+        when(metadataRepository.getArtifacts( , RELEASES_TEST_REPO_ID,
+            projectNs, projectName, releaseVersion )).thenReturn(ml2);
 
 
         repoPurge.process( PATH_TO_RELEASED_SNAPSHOT_IN_DIFF_REPO );
@@ -260,8 +260,8 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Verify the metadataRepository invocations
         // Complete version removal for cleanup
-        verify(metadataRepository, times(1)).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
-        verify(metadataRepository, never()).removeProjectVersion(eq(RELEASES_TEST_REPO_ID), eq(projectNs), eq(projectName), eq(releaseVersion));
+        verify(metadataRepository, times(1)).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
+        verify(metadataRepository, never()).removeProjectVersion( , eq(RELEASES_TEST_REPO_ID), eq(projectNs), eq(projectName), eq(releaseVersion) );
 
 
         // check if the snapshot was removed
@@ -317,14 +317,14 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
         List<ArtifactMetadata> m2 = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir2 );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, "2.0.3-SNAPSHOT")).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, "2.0.3-SNAPSHOT" )).thenReturn(ml);
         List<ArtifactMetadata> m3 = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir3 );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, "2.0.4-SNAPSHOT")).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, "2.0.4-SNAPSHOT" )).thenReturn(ml);
 
 
         repoPurge.process( CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_HIGHER_SNAPSHOT_EXISTS_IN_SAME_REPO );
@@ -333,11 +333,11 @@ public class CleanupReleasedSnapshotsRepositoryPurgeTest
 
         // Verify the metadataRepository invocations
         // No removal
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.3-SNAPSHOT"));
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.4-SNAPSHOT"));
-        verify(metadataRepository, never()).removeArtifact(any(ArtifactMetadata.class), any(String.class));
-        verify(metadataRepository, never()).removeArtifact(any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.3-SNAPSHOT") );
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq("2.0.4-SNAPSHOT") );
+        verify(metadataRepository, never()).removeArtifact( , any(ArtifactMetadata.class), any(String.class) );
+        verify(metadataRepository, never()).removeArtifact( , any(String.class), any(String.class), any(String.class), any(String.class), any( MetadataFacet.class) );
 
 
 
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
index 3c70837..36b225e 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/DaysOldRepositoryPurgeTest.java
@@ -112,17 +112,17 @@ public class DaysOldRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         repoPurge.process( PATH_TO_BY_DAYS_OLD_ARTIFACT );
 
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(2)).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -197,8 +197,8 @@ public class DaysOldRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
 
         repoPurge.process( PATH_TO_TEST_ORDER_OF_DELETION );
@@ -206,9 +206,9 @@ public class DaysOldRepositoryPurgeTest
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -296,8 +296,8 @@ public class DaysOldRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
 
         repoPurge.process( PATH_TO_BY_DAYS_OLD_METADATA_DRIVEN_ARTIFACT );
@@ -305,9 +305,9 @@ public class DaysOldRepositoryPurgeTest
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
index 9ad64bd..2e63c33 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RepositoryPurgeConsumerTest.java
@@ -188,8 +188,8 @@ public class RepositoryPurgeConsumerTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir( TEST_REPO_ID, projectName, repo, vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
         Set<String> deletedVersions = new HashSet<>();
         deletedVersions.add("1.0RC1-20070504.153317-1");
         deletedVersions.add("1.0RC1-20070504.160758-2");
@@ -197,9 +197,9 @@ public class RepositoryPurgeConsumerTest
         repoPurgeConsumer.processFile( PATH_TO_BY_RETENTION_COUNT_ARTIFACT );
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(2)).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -291,8 +291,8 @@ public class RepositoryPurgeConsumerTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir( TEST_REPO_ID, projectName, repo, vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-                projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
         Set<String> deletedVersions = new HashSet<>();
         deletedVersions.add("2.2-SNAPSHOT");
         deletedVersions.add("2.2-20061118.060401-2");
@@ -300,9 +300,9 @@ public class RepositoryPurgeConsumerTest
         repoPurgeConsumer.processFile( PATH_TO_BY_DAYS_OLD_ARTIFACT );
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(2)).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(2)).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -373,16 +373,16 @@ public class RepositoryPurgeConsumerTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir( TEST_REPO_ID, projectName, repo, vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         repoPurgeConsumer.processFile(
             CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
 
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, never()).removeArtifact(any(), any());
-        verify(metadataRepository, never()).removeArtifact( any(), any(), any(), any(), any(MetadataFacet.class) );
+        verify(metadataRepository, never()).removeArtifact( , any(), any() );
+        verify(metadataRepository, never()).removeArtifact( , any(), any(), any(), any(), any(MetadataFacet.class) );
 
         // check if the snapshot wasn't removed
 
@@ -436,15 +436,15 @@ public class RepositoryPurgeConsumerTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         repoPurgeConsumer.processFile(
             CleanupReleasedSnapshotsRepositoryPurgeTest.PATH_TO_RELEASED_SNAPSHOT_IN_SAME_REPO );
 
-        verify(metadataRepository, times(1)).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, times(1)).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, never()).removeArtifact(any(), any());
+        verify(metadataRepository, never()).removeArtifact( , any(), any() );
 
         // check if the snapshot was removed
         assertDeleted( projectRoot + "/2.3-SNAPSHOT" );
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
index d80a0b6..734df37 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/test/java/org/apache/archiva/consumers/core/repository/RetentionCountRepositoryPurgeTest.java
@@ -115,8 +115,8 @@ public class RetentionCountRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
 
         repoPurge.process( PATH_TO_BY_RETENTION_COUNT_ARTIFACT );
@@ -124,9 +124,9 @@ public class RetentionCountRepositoryPurgeTest
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -202,17 +202,17 @@ public class RetentionCountRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         repoPurge.process( PATH_TO_BY_RETENTION_COUNT_POM );
 
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
@@ -290,17 +290,17 @@ public class RetentionCountRepositoryPurgeTest
 
         // Provide the metadata list
         List<ArtifactMetadata> ml = getArtifactMetadataFromDir(TEST_REPO_ID , projectName, repo.getParent(), vDir );
-        when(metadataRepository.getArtifacts(TEST_REPO_ID, projectNs,
-            projectName, projectVersion)).thenReturn(ml);
+        when(metadataRepository.getArtifacts( , TEST_REPO_ID,
+            projectNs, projectName, projectVersion )).thenReturn(ml);
 
         repoPurge.process( PATH_TO_TEST_ORDER_OF_DELETION );
 
         listenerControl.verify();
 
         // Verify the metadataRepository invocations
-        verify(metadataRepository, never()).removeProjectVersion(eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion));
+        verify(metadataRepository, never()).removeProjectVersion( , eq(TEST_REPO_ID), eq(projectNs), eq(projectName), eq(projectVersion) );
         ArgumentCaptor<ArtifactMetadata> metadataArg = ArgumentCaptor.forClass(ArtifactMetadata.class);
-        verify(metadataRepository, times(deletedVersions.size())).removeArtifact(metadataArg.capture(), eq(projectVersion));
+        verify(metadataRepository, times(deletedVersions.size())).removeArtifact( , metadataArg.capture(), eq(projectVersion) );
         List<ArtifactMetadata> metaL = metadataArg.getAllValues();
         for (ArtifactMetadata meta : metaL) {
             assertTrue(meta.getId().startsWith(projectName));
diff --git a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
index 407b239..e93b032 100644
--- a/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
+++ b/archiva-modules/archiva-base/archiva-consumers/archiva-metadata-consumer/src/main/java/org/apache/archiva/consumers/metadata/ArchivaMetadataCreationConsumer.java
@@ -138,7 +138,15 @@ public class ArchivaMetadataCreationConsumer
         throws ConsumerException
     {
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             // note that we do minimal processing including checksums and POM information for performance of
@@ -185,14 +193,14 @@ public class ArchivaMetadataCreationConsumer
 
             // read the metadata and update it if it is newer or doesn't exist
             artifact.setWhenGathered( whenGathered );
-            metadataRepository.updateArtifact( repoId, project.getNamespace(), project.getId(), projectVersion,
-                                               artifact );
+            metadataRepository.updateArtifact( , repoId, project.getNamespace(), project.getId(),
+                projectVersion, artifact );
             if ( createVersionMetadata )
             {
-                metadataRepository.updateProjectVersion( repoId, project.getNamespace(), project.getId(),
-                                                         versionMetadata );
+                metadataRepository.updateProjectVersion( , repoId, project.getNamespace(),
+                    project.getId(), versionMetadata );
             }
-            metadataRepository.updateProject( repoId, project );
+            metadataRepository.updateProject( , repoId, project );
             repositorySession.save();
         }
         catch ( MetadataRepositoryException e )
@@ -213,6 +221,14 @@ public class ArchivaMetadataCreationConsumer
         {
             repositorySession.close();
         }
+        catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
+        catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     @Override
diff --git a/archiva-modules/archiva-base/archiva-mock/src/main/java/org/apache/archiva/mock/MockRepositorySessionFactory.java b/archiva-modules/archiva-base/archiva-mock/src/main/java/org/apache/archiva/mock/MockRepositorySessionFactory.java
index 0a8ba43..be33011 100644
--- a/archiva-modules/archiva-base/archiva-mock/src/main/java/org/apache/archiva/mock/MockRepositorySessionFactory.java
+++ b/archiva-modules/archiva-base/archiva-mock/src/main/java/org/apache/archiva/mock/MockRepositorySessionFactory.java
@@ -22,7 +22,9 @@ package org.apache.archiva.mock;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
 import org.apache.archiva.metadata.repository.AbstractRepositorySessionFactory;
 import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.MetadataSessionException;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.springframework.stereotype.Service;
@@ -51,7 +53,7 @@ public class MockRepositorySessionFactory extends AbstractRepositorySessionFacto
     }
 
     @Override
-    public RepositorySession createSession()
+    public RepositorySession createSession() throws MetadataRepositoryException
     {
         return new RepositorySession( repository, resolver )
         {
@@ -62,7 +64,7 @@ public class MockRepositorySessionFactory extends AbstractRepositorySessionFacto
             }
 
             @Override
-            public void save()
+            public void save() throws MetadataSessionException
             {
                 // no op
             }
diff --git a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
index 445d920..c8cf62a 100644
--- a/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
+++ b/archiva-modules/archiva-base/archiva-repository-admin/archiva-repository-admin-default/src/main/java/org/apache/archiva/admin/repository/managed/DefaultManagedRepositoryAdmin.java
@@ -340,11 +340,19 @@ public class DefaultManagedRepositoryAdmin
 
         if ( !stagedOne )
         {
-            RepositorySession repositorySession = getRepositorySessionFactory().createSession();
+            RepositorySession repositorySession = null;
+            try
+            {
+                repositorySession = getRepositorySessionFactory().createSession();
+            }
+            catch ( MetadataRepositoryException e )
+            {
+                e.printStackTrace( );
+            }
             try
             {
                 MetadataRepository metadataRepository = repositorySession.getRepository();
-                metadataRepository.removeRepository( repository.getId() );
+                metadataRepository.removeRepository( , repository.getId() );
                 //invalidate cache
                 namespacesCache.remove( repository.getId() );
                 log.debug( "call repositoryStatisticsManager.deleteStatistics" );
@@ -360,6 +368,10 @@ public class DefaultManagedRepositoryAdmin
             {
                 repositorySession.close();
             }
+            catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+            {
+                e.printStackTrace( );
+            }
         }
 
         if ( deleteContent )
@@ -492,7 +504,15 @@ public class DefaultManagedRepositoryAdmin
         }
 
         // Save the repository configuration.
-        RepositorySession repositorySession = getRepositorySessionFactory().createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = getRepositorySessionFactory().createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
@@ -514,6 +534,10 @@ public class DefaultManagedRepositoryAdmin
         {
             repositorySession.close();
         }
+        catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
 
         if ( updateIndexContext )
         {
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
index ea2cb26..a2d5c6a 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
@@ -180,6 +180,10 @@ public class ArchivaRepositoryScanningTaskExecutor
                 {
                     repositorySession.close();
                 }
+                catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+                {
+                    e.printStackTrace( );
+                }
 
 //                log.info( "Scanning for removed repository content" );
 
@@ -196,6 +200,10 @@ public class ArchivaRepositoryScanningTaskExecutor
             log.error( e.getMessage(), e );
             throw new TaskExecutionException( e.getMessage(), e );
         }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     public Task getCurrentTaskInExecution()
diff --git a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
index 4da5b23..ef9067d 100644
--- a/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
+++ b/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/DefaultRepositoryArchivaTaskScheduler.java
@@ -117,7 +117,15 @@ public class DefaultRepositoryArchivaTaskScheduler
         List<ManagedRepositoryConfiguration> repositories =
             archivaConfiguration.getConfiguration().getManagedRepositories();
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataRepository metadataRepository = repositorySession.getRepository();
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
index 5611783..1f50870 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultBrowseService.java
@@ -63,9 +63,6 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.nio.charset.Charset;
 import java.nio.file.Files;
-import java.nio.file.Path;
-import java.nio.file.StandardCopyOption;
-import java.nio.file.StandardOpenOption;
 import java.util.*;
 import java.util.jar.JarEntry;
 import java.util.jar.JarFile;
@@ -114,7 +111,15 @@ public class DefaultBrowseService
         //       it is located here to avoid the content repository implementation needing to do too much for what
         //       is essentially presentation code
         Set<String> namespacesToCollapse = new LinkedHashSet<String>();
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataResolver metadataResolver = repositorySession.getResolver();
@@ -157,7 +162,15 @@ public class DefaultBrowseService
 
         Set<String> projects = new LinkedHashSet<>();
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         Set<String> namespaces;
         try
         {
@@ -229,7 +242,15 @@ public class DefaultBrowseService
         throws MetadataResolutionException
 
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataResolver metadataResolver = repositorySession.getResolver();
@@ -304,6 +325,10 @@ public class DefaultBrowseService
                 repositorySession.close();
             }
         }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
     }
 
@@ -466,6 +491,10 @@ public class DefaultBrowseService
                 repositorySession.close();
             }
         }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     @Override
@@ -520,7 +549,15 @@ public class DefaultBrowseService
     {
         List<ProjectVersionReference> references = new ArrayList<>();
         // TODO: what if we get duplicates across repositories?
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataResolver metadataResolver = repositorySession.getResolver();
@@ -611,13 +648,21 @@ public class DefaultBrowseService
 
         projectVersionMetadata.addFacet( metadataFacet );
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
             MetadataRepository metadataRepository = repositorySession.getRepository();
 
-            metadataRepository.updateProjectVersion( repositoryId, groupId, artifactId, projectVersionMetadata );
+            metadataRepository.updateProjectVersion( , repositoryId, groupId, artifactId, projectVersionMetadata );
 
             repositorySession.save();
         }
@@ -631,6 +676,10 @@ public class DefaultBrowseService
         {
             repositorySession.close();
         }
+        catch ( MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
         return Boolean.TRUE;
     }
 
@@ -660,13 +709,21 @@ public class DefaultBrowseService
             return Boolean.TRUE;
         }
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
             MetadataRepository metadataRepository = repositorySession.getRepository();
 
-            metadataRepository.updateProjectVersion( repositoryId, groupId, artifactId, projectVersionMetadata );
+            metadataRepository.updateProjectVersion( , repositoryId, groupId, artifactId, projectVersionMetadata );
 
             repositorySession.save();
         }
@@ -680,6 +737,10 @@ public class DefaultBrowseService
         {
             repositorySession.close();
         }
+        catch ( MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
         return Boolean.TRUE;
     }
 
@@ -757,6 +818,10 @@ public class DefaultBrowseService
             throw new ArchivaRestServiceException( e.getMessage(),
                                                    Response.Status.INTERNAL_SERVER_ERROR.getStatusCode(), e );
         }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         return artifactDownloadInfos;
     }
@@ -930,10 +995,18 @@ public class DefaultBrowseService
     public List<Artifact> getArtifacts( String repositoryId )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifacts( repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifacts( , repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -950,10 +1023,18 @@ public class DefaultBrowseService
     public List<Artifact> getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProjectVersionMetadata( key, value, repositoryId );
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
+        try
+        {
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProjectVersionMetadata( , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -970,10 +1051,18 @@ public class DefaultBrowseService
     public List<Artifact> getArtifactsByMetadata( String key, String value, String repositoryId )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByMetadata( key, value, repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByMetadata( , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -990,10 +1079,18 @@ public class DefaultBrowseService
     public List<Artifact> getArtifactsByProperty( String key, String value, String repositoryId )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
-            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProperty( key, value, repositoryId );
+            List<ArtifactMetadata> artifactMetadatas = repositorySession.getRepository().getArtifactsByProperty( , key, value, repositoryId );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -1028,11 +1125,19 @@ public class DefaultBrowseService
     public List<Artifact> searchArtifacts( String text, String repositoryId, Boolean exact )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             List<ArtifactMetadata> artifactMetadatas =
-                repositorySession.getRepository().searchArtifacts( text, repositoryId, exact == null ? false : exact );
+                repositorySession.getRepository().searchArtifacts( , repositoryId, text, exact == null ? false : exact );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
@@ -1049,11 +1154,19 @@ public class DefaultBrowseService
     public List<Artifact> searchArtifacts( String key, String text, String repositoryId, Boolean exact )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             List<ArtifactMetadata> artifactMetadatas =
-                repositorySession.getRepository().searchArtifacts( key, text, repositoryId, exact == null ? false : exact );
+                repositorySession.getRepository().searchArtifacts( , repositoryId, key, text, exact == null ? false : exact );
             return buildArtifacts( artifactMetadatas, repositoryId );
         }
         catch ( MetadataRepositoryException e )
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java
index 0f66207..b1e72fe 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultManagedRepositoriesService.java
@@ -163,7 +163,15 @@ public class DefaultManagedRepositoriesService
     public ArchivaRepositoryStatistics getManagedRepositoryStatistics( String repositoryId, String lang )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         SimpleDateFormat sdf = new SimpleDateFormat( "EEE, d MMM yyyy HH:mm:ss Z", new Locale( lang ) );
         try
         {
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultMergeRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultMergeRepositoriesService.java
index 0f95ae1..39bdc58 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultMergeRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultMergeRepositoriesService.java
@@ -60,7 +60,15 @@ public class DefaultMergeRepositoriesService
     public List<Artifact> getMergeConflictedArtifacts( String sourceRepositoryId, String targetRepositoryId )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             List<ArtifactMetadata> artifactMetadatas =
@@ -106,13 +114,21 @@ public class DefaultMergeRepositoriesService
     protected void doMerge( String sourceRepositoryId, String targetRepositoryId )
         throws RepositoryMergerException, ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
             org.apache.archiva.repository.ManagedRepository managedRepo = repositoryRegistry.getManagedRepository(targetRepositoryId);
             MetadataRepository metadataRepository = repositorySession.getRepository();
-            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepositoryId );
+            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( , sourceRepositoryId );
 
             if ( managedRepo.getActiveReleaseSchemes().contains(ReleaseScheme.RELEASE) && !managedRepo.getActiveReleaseSchemes().contains(ReleaseScheme.SNAPSHOT) )
             {
@@ -143,14 +159,22 @@ public class DefaultMergeRepositoriesService
         throws RepositoryMergerException, ArchivaRestServiceException
     {
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             List<ArtifactMetadata> conflictSourceArtifacts =
                 repositoryMerger.getConflictingArtifacts( repositorySession.getRepository(), sourceRepositoryId,
                                                           targetRepositoryId );
             MetadataRepository metadataRepository = repositorySession.getRepository();
-            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepositoryId );
+            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( , sourceRepositoryId );
             sourceArtifacts.removeAll( conflictSourceArtifacts );
 
             org.apache.archiva.repository.ManagedRepository managedRepo = repositoryRegistry.getManagedRepository(targetRepositoryId);
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java
index 755b7a5..76d4f77 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultReportRepositoriesService.java
@@ -70,7 +70,15 @@ public class DefaultReportRepositoriesService
 
     private List<RepositoryStatistics> getMultipleRepositoriesReport( List<String> repositoriesId, int rowCount )
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataRepository metadataRepository = repositorySession.getRepository();
@@ -98,7 +106,15 @@ public class DefaultReportRepositoriesService
     private List<RepositoryStatistics> getUniqueRepositoryReport( String repositoryId, int rowCount, Date startDate,
                                                                   Date endDate )
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             MetadataRepository metadataRepository = repositorySession.getRepository();
@@ -129,7 +145,15 @@ public class DefaultReportRepositoriesService
     public List<RepositoryProblemFacet> getHealthReport( String repository, String groupId, int rowCount )
         throws ArchivaRestServiceException
     {
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             List<String> observableRepositories = getObservableRepos();
@@ -149,12 +173,12 @@ public class DefaultReportRepositoriesService
             MetadataRepository metadataRepository = repositorySession.getRepository();
             for ( String repoId : observableRepositories )
             {
-                for ( String name : metadataRepository.getMetadataFacets( repoId, RepositoryProblemFacet.FACET_ID ) )
+                for ( String name : metadataRepository.getMetadataFacets( , repoId, RepositoryProblemFacet.FACET_ID ) )
                 {
                     RepositoryProblemFacet metadataFacet =
-                        (RepositoryProblemFacet) metadataRepository.getMetadataFacet( repoId,
-                                                                                      RepositoryProblemFacet.FACET_ID,
-                                                                                      name );
+                        (RepositoryProblemFacet) metadataRepository.getMetadataFacet( ,
+                            repoId,
+                            RepositoryProblemFacet.FACET_ID, name );
                     if ( StringUtils.isEmpty( groupId ) || groupId.equals( metadataFacet.getNamespace() ) )
                     {
                         problemArtifacts.add( metadataFacet );
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
index cc30f5e..7e8fa2c 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultRepositoriesService.java
@@ -659,7 +659,15 @@ public class DefaultRepositoriesService
             throw new ArchivaRestServiceException( "version cannot be null", 400, null );
         }
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
@@ -695,14 +703,14 @@ public class DefaultRepositoriesService
             }
 
             Collection<ArtifactMetadata> artifacts =
-                metadataRepository.getArtifacts( repositoryId, namespace, projectId, version );
+                metadataRepository.getArtifacts( , repositoryId, namespace, projectId, version );
 
             for ( ArtifactMetadata artifactMetadata : artifacts )
             {
-                metadataRepository.removeArtifact( artifactMetadata, version );
+                metadataRepository.removeArtifact( , artifactMetadata, version );
             }
 
-            metadataRepository.removeProjectVersion( repositoryId, namespace, projectId, version );
+            metadataRepository.removeProjectVersion( , repositoryId, namespace, projectId, version );
         }
         catch ( MetadataRepositoryException e )
         {
@@ -723,6 +731,10 @@ public class DefaultRepositoriesService
 
             repositorySession.close();
         }
+        catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
 
         return Boolean.TRUE;
     }
@@ -769,7 +781,15 @@ public class DefaultRepositoriesService
         boolean snapshotVersion =
             VersionUtil.isSnapshot( artifact.getVersion() ) | VersionUtil.isGenericSnapshot( artifact.getVersion() );
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
         try
         {
             Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
@@ -849,14 +869,14 @@ public class DefaultRepositoriesService
             {
                 String baseVersion = VersionUtil.getBaseVersion( artifact.getVersion() );
                 artifacts =
-                    metadataRepository.getArtifacts( repositoryId, artifact.getGroupId(), artifact.getArtifactId(),
-                                                     baseVersion );
+                    metadataRepository.getArtifacts( , repositoryId, artifact.getGroupId(),
+                        artifact.getArtifactId(), baseVersion );
             }
             else
             {
                 artifacts =
-                    metadataRepository.getArtifacts( repositoryId, artifact.getGroupId(), artifact.getArtifactId(),
-                                                     artifact.getVersion() );
+                    metadataRepository.getArtifacts( , repositoryId, artifact.getGroupId(),
+                        artifact.getArtifactId(), artifact.getVersion() );
             }
 
             log.debug( "artifacts: {}", artifacts );
@@ -867,14 +887,14 @@ public class DefaultRepositoriesService
                 {
                     // verify metata repository doesn't contains anymore the version
                     Collection<String> projectVersions =
-                        metadataRepository.getProjectVersions( repositoryId, artifact.getGroupId(),
-                                                               artifact.getArtifactId() );
+                        metadataRepository.getProjectVersions( , repositoryId,
+                            artifact.getGroupId(), artifact.getArtifactId() );
 
                     if ( projectVersions.contains( artifact.getVersion() ) )
                     {
                         log.warn( "artifact not found when deleted but version still here ! so force cleanup" );
-                        metadataRepository.removeProjectVersion( repositoryId, artifact.getGroupId(),
-                                                                 artifact.getArtifactId(), artifact.getVersion() );
+                        metadataRepository.removeProjectVersion( , repositoryId,
+                            artifact.getGroupId(), artifact.getArtifactId(), artifact.getVersion() );
                     }
 
                 }
@@ -904,8 +924,8 @@ public class DefaultRepositoriesService
                                 artifact.getVersion();
                             MavenArtifactFacet mavenArtifactFacetToCompare = new MavenArtifactFacet();
                             mavenArtifactFacetToCompare.setClassifier( artifact.getClassifier() );
-                            metadataRepository.removeArtifact( repositoryId, groupId, artifactId, version,
-                                                               mavenArtifactFacetToCompare );
+                            metadataRepository.removeArtifact( , repositoryId, groupId, artifactId,
+                                version, mavenArtifactFacetToCompare );
                             metadataRepository.save();
                         }
 
@@ -914,15 +934,15 @@ public class DefaultRepositoriesService
                     {
                         if ( snapshotVersion )
                         {
-                            metadataRepository.removeArtifact( artifactMetadata,
-                                                               VersionUtil.getBaseVersion( artifact.getVersion() ) );
+                            metadataRepository.removeArtifact( ,
+                                artifactMetadata, VersionUtil.getBaseVersion( artifact.getVersion() ) );
                         }
                         else
                         {
-                            metadataRepository.removeArtifact( artifactMetadata.getRepositoryId(),
-                                                               artifactMetadata.getNamespace(),
-                                                               artifactMetadata.getProject(), artifact.getVersion(),
-                                                               artifactMetadata.getId() );
+                            metadataRepository.removeArtifact( ,
+                                artifactMetadata.getRepositoryId(),
+                                artifactMetadata.getNamespace(), artifactMetadata.getProject(),
+                                artifact.getVersion(), artifactMetadata.getId() );
                         }
                     }
                     // TODO: move into the metadata repository proper - need to differentiate attachment of
@@ -965,6 +985,10 @@ public class DefaultRepositoriesService
 
             repositorySession.close();
         }
+        catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+        {
+            e.printStackTrace( );
+        }
         return Boolean.TRUE;
     }
 
@@ -987,7 +1011,15 @@ public class DefaultRepositoriesService
             throw new ArchivaRestServiceException( "groupId cannot be null", 400, null );
         }
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
@@ -997,7 +1029,7 @@ public class DefaultRepositoriesService
 
             MetadataRepository metadataRepository = repositorySession.getRepository();
 
-            metadataRepository.removeNamespace( repositoryId, groupId );
+            metadataRepository.removeNamespace( , repositoryId, groupId );
 
             // just invalidate cache entry
             String cacheKey = repositoryId + "-" + groupId;
@@ -1048,7 +1080,15 @@ public class DefaultRepositoriesService
             throw new ArchivaRestServiceException( "artifactId cannot be null", 400, null );
         }
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         try
         {
@@ -1071,7 +1111,7 @@ public class DefaultRepositoriesService
 
             MetadataRepository metadataRepository = repositorySession.getRepository();
 
-            metadataRepository.removeProject( repositoryId, groupId, projectId );
+            metadataRepository.removeProject( , repositoryId, groupId, projectId );
 
             metadataRepository.save();
         }
diff --git a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
index 7a12256..10caa30 100644
--- a/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
+++ b/archiva-modules/archiva-web/archiva-rest/archiva-rest-services/src/main/java/org/apache/archiva/rest/services/DefaultSearchService.java
@@ -215,7 +215,15 @@ public class DefaultSearchService
             checksumSearch.setRepositories( getObservableRepos() );
         }
 
-        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        RepositorySession repositorySession = null;
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
 
         MetadataRepository metadataRepository = repositorySession.getRepository();
 
@@ -226,7 +234,7 @@ public class DefaultSearchService
             for ( String repoId : checksumSearch.getRepositories() )
             {
                 Collection<ArtifactMetadata> artifactMetadatas =
-                    metadataRepository.getArtifactsByChecksum( repoId, checksumSearch.getChecksum() );
+                    metadataRepository.getArtifactsByChecksum( , repoId, checksumSearch.getChecksum() );
                 artifactSet.addAll( buildArtifacts( artifactMetadatas, repoId ) );
             }
 
diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
index 019c9e1..789d084 100644
--- a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
+++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
@@ -93,7 +93,7 @@ public class NewArtifactsRssFeedProcessor
         List<ArtifactMetadata> artifacts;
         try
         {
-            artifacts = metadataRepository.getArtifactsByDateRange( repoId, greaterThanThisDate.getTime(), null );
+            artifacts = metadataRepository.getArtifactsByDateRange( , repoId, greaterThanThisDate.getTime(), null );
         }
         catch ( MetadataRepositoryException e )
         {
diff --git a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java
index f9c24bd..68ddc45 100644
--- a/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java
+++ b/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java
@@ -84,10 +84,10 @@ public class NewVersionsOfArtifactRssFeedProcessor
         {
             for ( String repoId : metadataRepository.getRepositories() )
             {
-                Collection<String> versions = metadataRepository.getProjectVersions( repoId, groupId, artifactId );
+                Collection<String> versions = metadataRepository.getProjectVersions( , repoId, groupId, artifactId );
                 for ( String version : versions )
                 {
-                    artifacts.addAll( metadataRepository.getArtifacts( repoId, groupId, artifactId, version ) );
+                    artifacts.addAll( metadataRepository.getArtifacts( , repoId, groupId, artifactId, version ) );
                 }
             }
         }
diff --git a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
index 328ef91..0706d64 100644
--- a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
+++ b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
@@ -24,6 +24,7 @@ import com.sun.syndication.feed.synd.SyndFeed;
 import junit.framework.TestCase;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.rss.RssFeedGenerator;
 import org.apache.archiva.test.utils.ArchivaBlockJUnit4ClassRunner;
 import org.junit.Before;
@@ -129,7 +130,7 @@ public class NewArtifactsRssFeedProcessorTest
         private List<ArtifactMetadata> artifactsByDateRange;
 
         @Override
-        public List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date from, Date to )
+        public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repoId, Date from, Date to )
         {
             setRepoId( repoId );
             setFrom( from );
@@ -174,7 +175,7 @@ public class NewArtifactsRssFeedProcessorTest
         }
 
         @Override
-        public List<ArtifactMetadata> getArtifacts( String repositoryId )
+        public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
         {
             return artifactsByDateRange;
         }
diff --git a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java
index 2b71c0f..2a60ae2 100644
--- a/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java
+++ b/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java
@@ -90,13 +90,13 @@ public class NewVersionsOfArtifactRssFeedProcessorTest
         reqParams.put( RssFeedProcessor.KEY_ARTIFACT_ID, ARTIFACT_ID );
 
         expect( metadataRepository.getRepositories() ).andReturn( Collections.singletonList( TEST_REPO ) );
-        expect( metadataRepository.getProjectVersions( TEST_REPO, GROUP_ID, ARTIFACT_ID ) ).andReturn(
+        expect( metadataRepository.getProjectVersions( , TEST_REPO, GROUP_ID, ARTIFACT_ID ) ).andReturn(
             Arrays.asList( "1.0.1", "1.0.2", "1.0.3-SNAPSHOT" ) );
-        expect( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.1" ) ).andReturn(
+        expect( metadataRepository.getArtifacts( , TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.1" ) ).andReturn(
             Collections.singletonList( artifact1 ) );
-        expect( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.2" ) ).andReturn(
+        expect( metadataRepository.getArtifacts( , TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.2" ) ).andReturn(
             Collections.singletonList( artifact2 ) );
-        expect( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.3-SNAPSHOT" ) ).andReturn(
+        expect( metadataRepository.getArtifacts( , TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.3-SNAPSHOT" ) ).andReturn(
             Collections.singletonList( artifact3 ) );
         metadataRepositoryControl.replay();
 
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java
index a0994cd..0da0c61 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/main/java/org/apache/archiva/web/rss/RssFeedServlet.java
@@ -242,6 +242,10 @@ public class RssFeedServlet
 
             res.sendError( HttpServletResponse.SC_UNAUTHORIZED, USER_NOT_AUTHORIZED );
         }
+        catch ( org.apache.archiva.metadata.repository.MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     /**
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
index aa55d47..1557fc6 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestMetadataRepository.java
@@ -21,6 +21,7 @@ package org.apache.archiva.webtest.memory;
 
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.repository.AbstractMetadataRepository;
+import org.apache.archiva.metadata.repository.RepositorySession;
 
 import java.util.ArrayList;
 import java.util.Collection;
@@ -70,25 +71,25 @@ public class TestMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
+    public Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
     {
         return versions;
     }
 
     @Override
-    public List<String> getMetadataFacets( String repodId, String facetId )
+    public List<String> getMetadataFacets( RepositorySession session, String repodId, String facetId )
     {
         return Collections.emptyList();
     }
 
     @Override
-    public void removeMetadataFacet( String repoId, String facetId, String name )
+    public void removeMetadataFacet( RepositorySession session, String repoId, String facetId, String name )
     {
         //To change body of implemented methods use File | Settings | File Templates.
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime )
     {
         return artifacts;
     }
@@ -100,14 +101,14 @@ public class TestMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
+    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
                                                       String projectVersion )
     {
         return artifacts;
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifacts( String repositoryId )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
     {
         return artifacts;
     }
diff --git a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java
index b2aab9d..1fd8b35 100644
--- a/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java
+++ b/archiva-modules/archiva-web/archiva-web-common/src/test/java/org/apache/archiva/webtest/memory/TestRepositorySessionFactory.java
@@ -19,6 +19,7 @@ package org.apache.archiva.webtest.memory;
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.springframework.beans.factory.config.AbstractFactoryBean;
@@ -47,7 +48,7 @@ public class TestRepositorySessionFactory
     }
 
     @Override
-    public RepositorySession createSession()
+    public RepositorySession createSession() throws MetadataRepositoryException
     {
         return repositorySession != null ? repositorySession : new RepositorySession( new TestMetadataRepository(),
                                                                                       new TestMetadataResolver() );
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
index 6b9b845..86fbde6 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/AbstractMetadataRepository.java
@@ -34,14 +34,14 @@ public abstract class AbstractMetadataRepository
 {
 
     @Override
-    public void updateProject( String repositoryId, ProjectMetadata project )
+    public void updateProject( RepositorySession session, String repositoryId, ProjectMetadata project )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void updateArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
+    public void updateArtifact( RepositorySession session, String repositoryId, String namespace, String projectId, String projectVersion,
                                 ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException
     {
@@ -49,7 +49,7 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void updateProjectVersion( String repositoryId, String namespace, String projectId,
+    public void updateProjectVersion( RepositorySession session, String repositoryId, String namespace, String projectId,
                                       ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException
     {
@@ -57,110 +57,103 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void updateNamespace( String repositoryId, String namespace )
+    public void updateNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<String> getMetadataFacets( String repositoryId, String facetId )
+    public List<String> getMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public boolean hasMetadataFacet( String repositoryId, String facetId )
+    public boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
         return false;
     }
 
     @Override
-    public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
+    public MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
+    public void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
     }
 
     @Override
-    public void removeMetadataFacets( String repositoryId, String facetId )
+    public void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
     }
 
     @Override
-    public void removeMetadataFacet( String repositoryId, String facetId, String name )
+    public void removeMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( String repositoryId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repositoryId, Date startTime, Date endTime )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getRepositories()
+    public Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( String key , String value , String repositoryId  )
+    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( String key , String value , String repositoryId  )
+    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( String key, String value, String repositoryId )
+    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version, String id )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeArtifact( String repositoryId, String namespace, String project, String version, String id )
+    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
-        throws MetadataRepositoryException
-    {
-        throw new UnsupportedOperationException();
-    }
-
-    @Override
-    public void removeArtifact( String repositoryId, String namespace, String project, String version,
+    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
                                 MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
@@ -168,13 +161,13 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void removeRepository( String repositoryId )
+    public void removeRepository( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException
     {
     }
 
     @Override
-    public void removeNamespace( String repositoryId, String namespace )
+    public void removeNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
@@ -182,21 +175,21 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifacts( String repositoryId )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public ProjectMetadata getProject( String repoId, String namespace, String projectId )
+    public ProjectMetadata getProject( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
+    public ProjectVersionMetadata getProjectVersion( RepositorySession session, String repoId, String namespace, String projectId,
                                                      String projectVersion )
         throws MetadataResolutionException
     {
@@ -204,7 +197,7 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( String repoId, String namespace, String projectId,
+    public Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId,
                                                    String projectVersion )
         throws MetadataResolutionException
     {
@@ -212,7 +205,7 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
+    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
                                                                      String projectVersion )
         throws MetadataResolutionException
     {
@@ -220,42 +213,42 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public Collection<String> getRootNamespaces( String repoId )
+    public Collection<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getNamespaces( String repoId, String namespace )
+    public Collection<String> getNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getProjects( String repoId, String namespace )
+    public Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
+    public Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+    public void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
+    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
                                                       String projectVersion )
         throws MetadataResolutionException
     {
@@ -263,16 +256,12 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void removeProject( String repositoryId, String namespace, String projectId )
+    public void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
-    @Override
-    public void save()
-    {
-    }
 
     @Override
     public void close()
@@ -281,32 +270,27 @@ public abstract class AbstractMetadataRepository
     }
 
     @Override
-    public void revert()
-    {
-    }
-
-    @Override
     public boolean canObtainAccess( Class<?> aClass )
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public <T> T obtainAccess( Class<T> aClass )
+    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
     }
 
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException();
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
index b3f6f43..ba8e0fc 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/DefaultMetadataResolver.java
@@ -103,7 +103,7 @@ public class DefaultMetadataResolver
         MetadataRepository metadataRepository = session.getRepository();
 
         ProjectVersionMetadata metadata =
-            metadataRepository.getProjectVersion( repoId, namespace, projectId, projectVersion );
+            metadataRepository.getProjectVersion( session, repoId, namespace, projectId, projectVersion );
         // TODO: do we want to detect changes as well by comparing timestamps? isProjectVersionNewerThan(updated)
         //       in such cases we might also remove/update stale metadata, including adjusting plugin-based facets
         //       This would also be better than checking for completeness - we can then refresh only when fixed (though
@@ -136,7 +136,7 @@ public class DefaultMetadataResolver
                     {
                         listener.addArtifact( session, repoId, namespace, projectId, metadata );
                     }
-                    metadataRepository.updateProjectVersion( repoId, namespace, projectId, metadata );
+                    metadataRepository.updateProjectVersion( session, repoId, namespace, projectId, metadata );
                 }
                 catch ( MetadataRepositoryException e )
                 {
@@ -183,7 +183,7 @@ public class DefaultMetadataResolver
         // TODO: is this assumption correct? could a storage mech. actually know all references in a non-Maven scenario?
         // not passed to the storage mechanism as resolving references would require iterating all artifacts
         MetadataRepository metadataRepository = session.getRepository();
-        return metadataRepository.getProjectReferences( repoId, namespace, projectId, projectVersion );
+        return metadataRepository.getProjectReferences( session, repoId, namespace, projectId, projectVersion );
     }
 
     @Override
@@ -200,7 +200,7 @@ public class DefaultMetadataResolver
             }
 
             MetadataRepository metadataRepository = session.getRepository();
-            namespaces = metadataRepository.getRootNamespaces( repoId );
+            namespaces = metadataRepository.getRootNamespaces( session, repoId );
             Collection<String> storageNamespaces =
                 repositoryStorage.listRootNamespaces( repoId, new ExcludesFilter<String>( namespaces ) );
             if ( storageNamespaces != null && !storageNamespaces.isEmpty() )
@@ -212,7 +212,7 @@ public class DefaultMetadataResolver
                 {
                     try
                     {
-                        metadataRepository.updateNamespace( repoId, n );
+                        metadataRepository.updateNamespace( session, repoId, n );
                         // just invalidate cache entry
                         String cacheKey = repoId + "-" + n;
                         namespacesCache.remove( cacheKey );
@@ -249,11 +249,11 @@ public class DefaultMetadataResolver
             Collection<String> namespaces = namespacesCache.get( cacheKey );
             if ( namespaces == null )
             {
-                namespaces = metadataRepository.getNamespaces( repoId, namespace );
+                namespaces = metadataRepository.getNamespaces( session, repoId, namespace );
                 namespacesCache.put( cacheKey, namespaces );
             }
             Collection<String> exclusions = new ArrayList<>( namespaces );
-            exclusions.addAll( metadataRepository.getProjects( repoId, namespace ) );
+            exclusions.addAll( metadataRepository.getProjects( session, repoId, namespace ) );
             Collection<String> storageNamespaces =
                 repositoryStorage.listNamespaces( repoId, namespace, new ExcludesFilter<String>( exclusions ) );
             if ( storageNamespaces != null && !storageNamespaces.isEmpty() )
@@ -265,7 +265,7 @@ public class DefaultMetadataResolver
                 {
                     try
                     {
-                        metadataRepository.updateNamespace( repoId, namespace + "." + n );
+                        metadataRepository.updateNamespace( session, repoId, namespace + "." + n );
                         // just invalidate cache entry
                         cacheKey = repoId + "-" + namespace + "." + n;
                         namespacesCache.remove( cacheKey );
@@ -295,14 +295,14 @@ public class DefaultMetadataResolver
         try
         {
             MetadataRepository metadataRepository = session.getRepository();
-            Collection<String> projects = metadataRepository.getProjects( repoId, namespace );
+            Collection<String> projects = metadataRepository.getProjects( session, repoId, namespace );
             Collection<String> exclusions = new ArrayList<>( projects );
 
             String cacheKey = repoId + "-" + namespace;
             Collection<String> namespaces = namespacesCache.get( cacheKey );
             if ( namespaces == null )
             {
-                namespaces = metadataRepository.getNamespaces( repoId, namespace );
+                namespaces = metadataRepository.getNamespaces( session, repoId, namespace );
                 namespacesCache.put( cacheKey, namespaces );
             }
 
@@ -322,7 +322,7 @@ public class DefaultMetadataResolver
                     {
                         try
                         {
-                            metadataRepository.updateProject( repoId, projectMetadata );
+                            metadataRepository.updateProject( session, repoId, projectMetadata );
                         }
                         catch ( MetadataRepositoryException e )
                         {
@@ -352,7 +352,7 @@ public class DefaultMetadataResolver
         {
             MetadataRepository metadataRepository = session.getRepository();
 
-            Collection<String> projectVersions = metadataRepository.getProjectVersions( repoId, namespace, projectId );
+            Collection<String> projectVersions = metadataRepository.getProjectVersions( session, repoId, namespace, projectId );
             Collection<String> storageProjectVersions =
                 repositoryStorage.listProjectVersions( repoId, namespace, projectId,
                                                        new ExcludesFilter<String>( projectVersions ) );
@@ -374,7 +374,7 @@ public class DefaultMetadataResolver
                             listener.addArtifact( session, repoId, namespace, projectId, versionMetadata );
                         }
 
-                        metadataRepository.updateProjectVersion( repoId, namespace, projectId, versionMetadata );
+                        metadataRepository.updateProjectVersion( session, repoId, namespace, projectId, versionMetadata );
                     }
                     catch ( MetadataRepositoryException e )
                     {
@@ -421,7 +421,7 @@ public class DefaultMetadataResolver
         {
             MetadataRepository metadataRepository = session.getRepository();
             Collection<ArtifactMetadata> artifacts =
-                metadataRepository.getArtifacts( repoId, namespace, projectId, projectVersion );
+                metadataRepository.getArtifacts( session, repoId, namespace, projectId, projectVersion );
             ExcludesFilter<String> filter = new ExcludesFilter<String>( createArtifactIdList( artifacts ) );
 
             ReadMetadataRequest readMetadataRequest =
@@ -439,7 +439,7 @@ public class DefaultMetadataResolver
                 {
                     try
                     {
-                        metadataRepository.updateArtifact( repoId, namespace, projectId, projectVersion, artifact );
+                        metadataRepository.updateArtifact( session, repoId, namespace, projectId, projectVersion, artifact );
                     }
                     catch ( MetadataRepositoryException e )
                     {
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
index 421eccd..5048353 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataRepository.java
@@ -34,129 +34,142 @@ public interface MetadataRepository
     /**
      * Update metadata for a particular project in the metadata repository, or create it if it does not already exist.
      *
+     * @param session
      * @param repositoryId the repository the project is in
      * @param project      the project metadata to create or update
      */
-    void updateProject( String repositoryId, ProjectMetadata project )
+    void updateProject( RepositorySession session, String repositoryId, ProjectMetadata project )
         throws MetadataRepositoryException;
 
-    void updateArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
+    void updateArtifact( RepositorySession session, String repositoryId, String namespace, String projectId, String projectVersion,
                          ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException;
 
-    void updateProjectVersion( String repositoryId, String namespace, String projectId,
+    void updateProjectVersion( RepositorySession session, String repositoryId, String namespace, String projectId,
                                ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException;
 
     /**
      * create the namespace in the repository. (if not exist)
      *
+     *
+     * @param session
      * @param repositoryId
      * @param namespace
      * @throws MetadataRepositoryException
      */
-    void updateNamespace( String repositoryId, String namespace )
+    void updateNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException;
 
-    List<String> getMetadataFacets( String repositoryId, String facetId )
+    List<String> getMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
     /**
+     *
+     * @param session
      * @param repositoryId
      * @param facetId
      * @return true if the repository datas for this facetId
      * @throws MetadataRepositoryException
      * @since 1.4-M4
      */
-    boolean hasMetadataFacet( String repositoryId, String facetId )
+    boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
-    MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
+    MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException;
 
-    void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
+    void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
-    void removeMetadataFacets( String repositoryId, String facetId )
+    void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException;
 
-    void removeMetadataFacet( String repositoryId, String facetId, String name )
+    void removeMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException;
 
     /**
      * if startTime or endTime are <code>null</code> they are not used for search
      *
+     *
+     * @param session
      * @param repositoryId
      * @param startTime    can be <code>null</code>
      * @param endTime      can be <code>null</code>
      * @return
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByDateRange( String repositoryId, Date startTime, Date endTime )
-        throws MetadataRepositoryException;
-
-    // TODO: remove from API, just use configuration
-    Collection<String> getRepositories()
+    List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repositoryId, Date startTime, Date endTime )
         throws MetadataRepositoryException;
 
-    Collection<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
+    Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
         throws MetadataRepositoryException;
 
     /**
      * Get artifacts with a project version metadata key that matches the passed value.
      *  
+     *
+     * @param session
      * @param key
      * @param value
      * @param repositoryId can be null, meaning search in all repositories
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )
+    List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException;
 
     /**
      * Get artifacts with an artifact metadata key that matches the passed value.
      *  
+     *
+     * @param session
      * @param key
      * @param value
      * @param repositoryId can be null, meaning search in all repositories
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByMetadata( String key, String value, String repositoryId )
+    List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException;
 
     /**
      * Get artifacts with a property key that matches the passed value.
      * Possible keys are 'scm.url', 'org.name', 'url', 'mailingList.0.name', 'license.0.name',...
      *  
+     *
+     * @param session
      * @param key
      * @param value
      * @param repositoryId can be null, meaning search in all repositories
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> getArtifactsByProperty( String key, String value, String repositoryId )
+    List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException;
 
-    void removeArtifact( String repositoryId, String namespace, String project, String version, String id )
+    void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version, String id )
         throws MetadataRepositoryException;
 
     /**
      * used for deleting timestamped version of SNAPSHOT artifacts
      *
+     *
+     * @param session
      * @param artifactMetadata the artifactMetadata with the timestamped version (2.0-20120618.214135-2)
      * @param baseVersion      the base version of the snapshot (2.0-SNAPSHOT)
      * @throws MetadataRepositoryException
      * @since 1.4-M3
      */
-    void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
+    void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException;
 
     /**
      * FIXME need a unit test!!!
      * Only remove {@link MetadataFacet} for the artifact
      *
+     *
+     * @param session
      * @param repositoryId
      * @param namespace
      * @param project
@@ -165,46 +178,51 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 1.4-M3
      */
-    void removeArtifact( String repositoryId, String namespace, String project, String version,
+    void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String version,
                          MetadataFacet metadataFacet )
         throws MetadataRepositoryException;
 
     /**
      * Delete a repository's metadata. This includes all associated metadata facets.
      *
+     * @param session
      * @param repositoryId the repository to delete
      */
-    void removeRepository( String repositoryId )
+    void removeRepository( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException;
 
     /**
+     *
+     * @param session
      * @param repositoryId
      * @param namespace    (groupId for maven )
      * @throws MetadataRepositoryException
      * @since 1.4-M3
      */
-    void removeNamespace( String repositoryId, String namespace )
+    void removeNamespace( RepositorySession session, String repositoryId, String namespace )
         throws MetadataRepositoryException;
 
-    List<ArtifactMetadata> getArtifacts( String repositoryId )
+    List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException;
 
     /**
      * basically just checking it exists not complete data returned
      *
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @param projectId
      * @return
      * @throws MetadataResolutionException
      */
-    ProjectMetadata getProject( String repoId, String namespace, String projectId )
+    ProjectMetadata getProject( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException;
 
-    ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+    ProjectVersionMetadata getProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataResolutionException;
 
-    Collection<String> getArtifactVersions( String repoId, String namespace, String projectId, String projectVersion )
+    Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataResolutionException;
 
     /**
@@ -212,48 +230,58 @@ public interface MetadataRepository
      * a project version as a reference may be present (due to reverse-lookup of dependencies) before the actual
      * project is, and we want to avoid adding a stub model to the content repository.
      *
+     *
+     * @param session
      * @param repoId         the repository ID to look within
      * @param namespace      the namespace of the project to get references to
      * @param projectId      the identifier of the project to get references to
      * @param projectVersion the version of the project to get references to
      * @return a list of project references
      */
-    Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
+    Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
                                                               String projectVersion )
         throws MetadataResolutionException;
 
-    Collection<String> getRootNamespaces( String repoId )
+    Collection<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException;
 
     /**
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @return {@link Collection} of child namespaces of the namespace argument
      * @throws MetadataResolutionException
      */
-    Collection<String> getNamespaces( String repoId, String namespace )
+    Collection<String> getNamespaces( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @return
      * @throws MetadataResolutionException
      */
-    Collection<String> getProjects( String repoId, String namespace )
+    Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException;
 
     /**
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @param projectId
      * @return
      * @throws MetadataResolutionException
      */
-    Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
+    Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException;
 
     /**
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @param projectId
@@ -261,10 +289,12 @@ public interface MetadataRepository
      * @throws MetadataRepositoryException
      * @since 1.4-M4
      */
-    void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+    void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataRepositoryException;
 
     /**
+     *
+     * @param session
      * @param repoId
      * @param namespace
      * @param projectId
@@ -272,65 +302,61 @@ public interface MetadataRepository
      * @return
      * @throws MetadataResolutionException
      */
-    Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
+    Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
                                                String projectVersion )
         throws MetadataResolutionException;
 
     /**
      * remove a project
      *
+     *
+     * @param session
      * @param repositoryId
      * @param namespace
      * @param projectId
      * @throws MetadataRepositoryException
      * @since 1.4-M4
      */
-    void removeProject( String repositoryId, String namespace, String projectId )
+    void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException;
 
 
-    /**
-     * <b>implementations can throw RuntimeException</b>
-     */
-    void save();
-
-
     void close()
         throws MetadataRepositoryException;
 
-    /**
-     * <b>implementations can throw RuntimeException</b>
-     */
-    void revert();
 
     boolean canObtainAccess( Class<?> aClass );
 
-    <T> T obtainAccess( Class<T> aClass )
+    <T> T obtainAccess( RepositorySession session,  Class<T> aClass )
         throws MetadataRepositoryException;
 
     /**
      * Full text artifacts search.
      *  
-     * @param text
+     *
+     * @param session
      * @param repositoryId can be null to search in all repositories
-     * @param exact running an exact search, the value must exactly match the text.  
+     * @param text
+     * @param exact running an exact search, the value must exactly match the text.
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> searchArtifacts( String text, String repositoryId, boolean exact )
+    List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException;
 
     /**
      * Full text artifacts search inside the specified key.
      *  
+     *
+     * @param session
+     * @param repositoryId can be null to search in all repositories
      * @param key search only inside this key
      * @param text
-     * @param repositoryId can be null to search in all repositories
-     * @param exact running an exact search, the value must exactly match the text.  
+     * @param exact running an exact search, the value must exactly match the text.
      * @return a list of artifacts
      * @throws MetadataRepositoryException
      */
-    List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean exact )
+    List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
         throws MetadataRepositoryException;
 
 }
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataSessionException.java
similarity index 54%
copy from archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java
copy to archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataSessionException.java
index 929c3c1..1371d8a 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/MetadataSessionException.java
@@ -19,13 +19,34 @@ package org.apache.archiva.metadata.repository;
  * under the License.
  */
 
-public interface RepositorySessionFactory
+/**
+ * Exception thrown if the session method fails.
+ *
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+public class MetadataSessionException extends Exception
 {
-    public void open();
+    public MetadataSessionException( )
+    {
+    }
+
+    public MetadataSessionException( String message )
+    {
+        super( message );
+    }
 
-    public boolean isOpen();
+    public MetadataSessionException( String message, Throwable cause )
+    {
+        super( message, cause );
+    }
 
-    RepositorySession createSession();
+    public MetadataSessionException( Throwable cause )
+    {
+        super( cause );
+    }
 
-    void close();
+    public MetadataSessionException( String message, Throwable cause, boolean enableSuppression, boolean writableStackTrace )
+    {
+        super( message, cause, enableSuppression, writableStackTrace );
+    }
 }
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java
index 0742403..9ebde6a 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySession.java
@@ -65,17 +65,22 @@ public class RepositorySession
         return resolver;
     }
 
-    public void save()
-    {
-        repository.save();
+    protected boolean isDirty() {
+        return dirty;
+    }
 
-        dirty = false;
+    protected void setDirty(boolean value) {
+        this.dirty = value;
+    }
+
+    public void save() throws MetadataSessionException
+    {
+        setDirty( false );
     }
 
-    public void revert()
+    public void revert() throws MetadataSessionException
     {
-        repository.revert();
-        dirty = false;
+        setDirty( false );
     }
 
     /**
@@ -90,21 +95,14 @@ public class RepositorySession
     {
         try
         {
-            if ( dirty )
+            if ( isDirty() )
             {
                 save();
             }
         }
-        finally
+        catch ( MetadataSessionException e )
         {
-            try
-            {
-                repository.close();
-            }
-            catch ( MetadataRepositoryException e )
-            {
-                throw new RuntimeException( e.getMessage(), e );
-            }
+            throw new RuntimeException( "Could not save the session " + e.getMessage( ), e );
         }
     }
 
diff --git a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java
index 929c3c1..17e7c13 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/main/java/org/apache/archiva/metadata/repository/RepositorySessionFactory.java
@@ -21,11 +21,11 @@ package org.apache.archiva.metadata.repository;
 
 public interface RepositorySessionFactory
 {
-    public void open();
+    void open( );
 
-    public boolean isOpen();
+    boolean isOpen( );
 
-    RepositorySession createSession();
+    RepositorySession createSession() throws MetadataRepositoryException;
 
     void close();
 }
diff --git a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
index 5d033f5..59de1ba 100644
--- a/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
+++ b/archiva-modules/metadata/metadata-repository-api/src/test/java/org/apache/archiva/metadata/repository/AbstractMetadataRepositoryTest.java
@@ -184,7 +184,7 @@ public abstract class AbstractMetadataRepositoryTest
     public void testRootNamespaceWithNoMetadataRepository()
         throws Exception
     {
-        Collection<String> namespaces = repository.getRootNamespaces( TEST_REPO_ID );
+        Collection<String> namespaces = repository.getRootNamespaces( , TEST_REPO_ID );
         assertThat( namespaces ).isNotNull().isEmpty();
     }
 
@@ -192,16 +192,16 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetNamespaceOnly()
         throws Exception
     {
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isEmpty();
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isEmpty();
 
-        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.updateNamespace( , TEST_REPO_ID, TEST_NAMESPACE );
 
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isNotEmpty().contains(
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isNotEmpty().contains(
             TEST_NAMESPACE ).hasSize( 1 );
 
-        repository.removeNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.removeNamespace( , TEST_REPO_ID, TEST_NAMESPACE );
 
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isEmpty();
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isEmpty();
 
     }
 
@@ -209,22 +209,22 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetProjectOnly()
         throws Exception
     {
-        assertNull( repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isEmpty();
+        assertNull( repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isEmpty();
 
         ProjectMetadata project = new ProjectMetadata();
         project.setId( TEST_PROJECT );
         project.setNamespace( TEST_NAMESPACE );
 
-        repository.updateProject( TEST_REPO_ID, project );
+        repository.updateProject( , TEST_REPO_ID, project );
 
-        project = repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        project = repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
         assertEquals( TEST_PROJECT, project.getId() );
         assertEquals( TEST_NAMESPACE, project.getNamespace() );
 
         // test that namespace is also constructed
 
-        Collection<String> namespaces = repository.getRootNamespaces( TEST_REPO_ID );
+        Collection<String> namespaces = repository.getRootNamespaces( , TEST_REPO_ID );
 
         assertThat( namespaces ).isNotNull().isNotEmpty().contains( TEST_NAMESPACE ).hasSize( 1 );
     }
@@ -233,24 +233,24 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetProjectVersionOnly()
         throws Exception
     {
-        assertNull( repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) );
-        assertNull( repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isEmpty();
+        assertNull( repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) );
+        assertNull( repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) );
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isEmpty();
 
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
 
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( TEST_PROJECT_VERSION, metadata.getId() );
 
         // test that namespace and project is also constructed
-        Collection<String> namespaces = repository.getRootNamespaces( TEST_REPO_ID );
+        Collection<String> namespaces = repository.getRootNamespaces( , TEST_REPO_ID );
 
         assertThat( namespaces ).isNotNull().isNotEmpty().hasSize( 1 ).contains( TEST_NAMESPACE );
 
-        ProjectMetadata projectMetadata = repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        ProjectMetadata projectMetadata = repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
         assertNotNull( projectMetadata );
         assertEquals( TEST_PROJECT, projectMetadata.getId() );
         assertEquals( TEST_NAMESPACE, projectMetadata.getNamespace() );
@@ -261,33 +261,33 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         assertThat( new ArrayList<>(
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                     TEST_PROJECT_VERSION ) ) ).isNotNull().isEmpty();
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+                TEST_PROJECT, TEST_PROJECT_VERSION ) ) ).isNotNull().isEmpty();
         assertThat(
-            repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNull();
-        assertThat( repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) ).isNull();
+            repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNull();
+        assertThat( repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ) ).isNull();
 
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isEmpty();
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isEmpty();
 
         ArtifactMetadata metadata = createArtifact();
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
         Collection<ArtifactMetadata> artifacts =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         //assertEquals( Collections.singletonList( metadata ), new ArrayList<ArtifactMetadata>( artifacts ) );
         assertThat( artifacts ).containsExactly( metadata );
         // test that namespace, project and project version is also constructed
 
-        assertThat( repository.getRootNamespaces( TEST_REPO_ID ) ).isNotNull().isNotEmpty().contains(
+        assertThat( repository.getRootNamespaces( , TEST_REPO_ID ) ).isNotNull().isNotEmpty().contains(
             TEST_NAMESPACE ).hasSize( 1 );
 
-        ProjectMetadata projectMetadata = repository.getProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        ProjectMetadata projectMetadata = repository.getProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
         assertEquals( TEST_PROJECT, projectMetadata.getId() );
         assertEquals( TEST_NAMESPACE, projectMetadata.getNamespace() );
 
         ProjectVersionMetadata projectVersionMetadata =
-            repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( TEST_PROJECT_VERSION, projectVersionMetadata.getId() );
     }
 
@@ -301,9 +301,9 @@ public abstract class AbstractMetadataRepositoryTest
         mailingList.setName( "Foo List" );
         mailingList.setOtherArchives( Collections.<String>emptyList() );
         metadata.setMailingLists( Arrays.asList( mailingList ) );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( TEST_PROJECT_VERSION, metadata.getId() );
 
         List<MailingList> mailingLists = metadata.getMailingLists();
@@ -371,9 +371,9 @@ public abstract class AbstractMetadataRepositoryTest
         d.setOptional( true );
         metadata.addDependency( d );
 
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( TEST_PROJECT_VERSION, metadata.getId() );
         assertEquals( TEST_PROJECT_VERSION, metadata.getVersion() );
         assertEquals( "project name", metadata.getName() );
@@ -429,8 +429,8 @@ public abstract class AbstractMetadataRepositoryTest
     {
         // currently set up this way so the behaviour of both the test and the mock config return the same repository
         // set as the File implementation just uses the config rather than the content
-        repository.updateNamespace( TEST_REPO_ID, "namespace" );
-        repository.updateNamespace( OTHER_REPO_ID, "namespace" );
+        repository.updateNamespace( , TEST_REPO_ID, "namespace" );
+        repository.updateNamespace( , OTHER_REPO_ID, "namespace" );
 
         Collection<String> repositories = repository.getRepositories();
 
@@ -446,9 +446,9 @@ public abstract class AbstractMetadataRepositoryTest
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
         metadata.setIncomplete( true );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( true, metadata.isIncomplete() );
         assertNull( metadata.getCiManagement() );
         assertNull( metadata.getScm() );
@@ -471,16 +471,16 @@ public abstract class AbstractMetadataRepositoryTest
         metadata.setId( TEST_PROJECT_VERSION );
         MetadataFacet facet = new TestMetadataFacet( "baz" );
         metadata.addFacet( facet );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
 
         metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
         TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
         assertEquals( "baz", testFacet.getValue() );
@@ -492,17 +492,17 @@ public abstract class AbstractMetadataRepositoryTest
     {
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( metadata.getFacetIds() ).isNotNull().isEmpty();
 
         metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertThat( metadata.getFacetIds() ).isNotNull().isEmpty();
 
     }
@@ -519,9 +519,9 @@ public abstract class AbstractMetadataRepositoryTest
 
         MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz", additionalProps );
         metadata.addFacet( facet );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( metadata.getFacetIds() ).isNotNull().isNotEmpty().hasSize( 1 ).contains( TEST_FACET_ID );
 
@@ -535,9 +535,9 @@ public abstract class AbstractMetadataRepositoryTest
         TestMetadataFacet newTestFacet = new TestMetadataFacet( TEST_FACET_ID, testFacet.getValue(), facetProperties );
         metadata.addFacet( newTestFacet );
 
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( metadata.getFacetIds() ).isNotNull().isNotEmpty().hasSize( 1 ).contains( TEST_FACET_ID );
         testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
@@ -553,26 +553,26 @@ public abstract class AbstractMetadataRepositoryTest
 
         MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz" );
         versionMetadata.addFacet( facet );
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, versionMetadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, versionMetadata );
 
         ArtifactMetadata artifactMetadata = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifactMetadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifactMetadata );
         repository.save();
 
         Collection<ArtifactMetadata> artifacts =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
 
-        artifacts = repository.getArtifacts( TEST_REPO_ID );
+        artifacts = repository.getArtifacts( , TEST_REPO_ID );
         assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
 
-        artifacts = repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_SHA1 );
+        artifacts = repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_SHA1 );
         assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
 
-        artifacts = repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_MD5 );
+        artifacts = repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_MD5 );
         assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
 
-        artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, null, null );
+        artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, null, null );
         assertEquals( Collections.singletonList( artifactMetadata ), new ArrayList<>( artifacts ) );
     }
 
@@ -587,10 +587,10 @@ public abstract class AbstractMetadataRepositoryTest
 
         MetadataFacet facet = new TestMetadataFacet( TEST_FACET_ID, "baz", additionalProps );
         metadata.addFacet( facet );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
         Collection<ArtifactMetadata> artifacts =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( artifacts ).isNotNull().isNotEmpty().hasSize( 1 );
         metadata = artifacts.iterator().next();
@@ -608,9 +608,9 @@ public abstract class AbstractMetadataRepositoryTest
         TestMetadataFacet newTestFacet = new TestMetadataFacet( TEST_FACET_ID, testFacet.getValue(), facetProperties );
         metadata.addFacet( newTestFacet );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
-        artifacts = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        artifacts = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( artifacts ).isNotNull().isNotEmpty().hasSize( 1 );
         metadata = artifacts.iterator().next();
@@ -631,17 +631,17 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata metadata = createArtifact();
         MetadataFacet facet = new TestMetadataFacet( "baz" );
         metadata.addFacet( facet );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
-        metadata = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                            TEST_PROJECT_VERSION ).iterator().next();
+        metadata = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ).iterator().next();
         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
 
         metadata = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
-        metadata = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                            TEST_PROJECT_VERSION ).iterator().next();
+        metadata = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ).iterator().next();
         assertEquals( Collections.singleton( TEST_FACET_ID ), metadata.getFacetIds() );
         TestMetadataFacet testFacet = (TestMetadataFacet) metadata.getFacet( TEST_FACET_ID );
         assertEquals( "baz", testFacet.getValue() );
@@ -652,17 +652,17 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata metadata = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
-        metadata = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                            TEST_PROJECT_VERSION ).iterator().next();
+        metadata = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ).iterator().next();
         assertEquals( Collections.<String>emptyList(), new ArrayList<String>( metadata.getFacetIds() ) );
 
         metadata = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, metadata );
 
-        metadata = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                            TEST_PROJECT_VERSION ).iterator().next();
+        metadata = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ).iterator().next();
         assertEquals( Collections.<String>emptyList(), new ArrayList<String>( metadata.getFacetIds() ) );
     }
 
@@ -670,10 +670,10 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetMetadataFacet()
         throws Exception
     {
-        repository.addMetadataFacet( TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
 
         TestMetadataFacet test =
-            (TestMetadataFacet) repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
+            (TestMetadataFacet) repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
 
         assertEquals( new TestMetadataFacet( TEST_VALUE ), test );
     }
@@ -682,25 +682,25 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetMetadataFacetWhenEmpty()
         throws Exception
     {
-        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
+        assertNull( repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
     }
 
     @Test
     public void testGetMetadataFacetWhenUnknownName()
         throws Exception
     {
-        repository.addMetadataFacet( TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
 
-        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, UNKNOWN ) );
+        assertNull( repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, UNKNOWN ) );
     }
 
     @Test
     public void testGetMetadataFacetWhenDefaultValue()
         throws Exception
     {
-        repository.addMetadataFacet( TEST_REPO_ID, new TestMetadataFacet( null ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new TestMetadataFacet( null ) );
 
-        MetadataFacet metadataFacet = repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
+        MetadataFacet metadataFacet = repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
 
         assertEquals( new TestMetadataFacet( TEST_METADATA_VALUE ), metadataFacet );
     }
@@ -709,17 +709,17 @@ public abstract class AbstractMetadataRepositoryTest
     public void testGetMetadataFacetWhenUnknownFacetId()
         throws Exception
     {
-        assertNull( repository.getMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME ) );
+        assertNull( repository.getMetadataFacet( , TEST_REPO_ID, UNKNOWN, TEST_NAME ) );
     }
 
     @Test
     public void testGetMetadataFacets()
         throws Exception
     {
-        repository.addMetadataFacet( TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
 
         assertEquals( Collections.singletonList( TEST_NAME ),
-                      repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID ) );
+                      repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID ) );
     }
 
     @Test
@@ -727,7 +727,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
 
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertTrue( facets.isEmpty() );
     }
 
@@ -735,14 +735,14 @@ public abstract class AbstractMetadataRepositoryTest
     public void testRemoveFacets()
         throws Exception
     {
-        repository.addMetadataFacet( TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new TestMetadataFacet( TEST_VALUE ) );
 
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertFalse( facets.isEmpty() );
 
-        repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        repository.removeMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
 
-        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertTrue( facets.isEmpty() );
     }
 
@@ -750,12 +750,12 @@ public abstract class AbstractMetadataRepositoryTest
     public void testRemoveFacetsWhenEmpty()
         throws Exception
     {
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertTrue( facets.isEmpty() );
 
-        repository.removeMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        repository.removeMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
 
-        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertTrue( facets.isEmpty() );
     }
 
@@ -764,7 +764,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         // testing no exception
-        repository.removeMetadataFacets( TEST_REPO_ID, UNKNOWN );
+        repository.removeMetadataFacets( , TEST_REPO_ID, UNKNOWN );
     }
 
     @Test
@@ -772,7 +772,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         // testing no exception
-        repository.removeMetadataFacet( TEST_REPO_ID, UNKNOWN, TEST_NAME );
+        repository.removeMetadataFacet( , TEST_REPO_ID, UNKNOWN, TEST_NAME );
     }
 
     @Test
@@ -780,16 +780,16 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         TestMetadataFacet metadataFacet = new TestMetadataFacet( TEST_VALUE );
-        repository.addMetadataFacet( TEST_REPO_ID, metadataFacet );
+        repository.addMetadataFacet( , TEST_REPO_ID, metadataFacet );
 
-        assertEquals( metadataFacet, repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        assertEquals( metadataFacet, repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertFalse( facets.isEmpty() );
 
-        repository.removeMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
+        repository.removeMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
 
-        assertNull( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
-        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        assertNull( repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) );
+        facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertTrue( facets.isEmpty() );
     }
 
@@ -797,22 +797,22 @@ public abstract class AbstractMetadataRepositoryTest
     public void testRemoveFacetWhenEmpty()
         throws Exception
     {
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertThat( facets ).isNotNull().isEmpty();
-        assertThat( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull();
+        assertThat( repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull();
 
-        repository.removeMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
+        repository.removeMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME );
 
-        facets = repository.getMetadataFacets( TEST_REPO_ID, TEST_FACET_ID );
+        facets = repository.getMetadataFacets( , TEST_REPO_ID, TEST_FACET_ID );
         assertThat( facets ).isNotNull().isEmpty();
-        assertThat( repository.getMetadataFacet( TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull();
+        assertThat( repository.getMetadataFacet( , TEST_REPO_ID, TEST_FACET_ID, TEST_NAME ) ).isNull();
     }
 
     @Test
     public void hasMetadataFacetStart()
         throws Exception
     {
-        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
+        assertFalse( repository.hasMetadataFacet( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
 
     }
 
@@ -821,33 +821,33 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
 
-        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
+        assertFalse( repository.hasMetadataFacet( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
 
         Calendar cal = Calendar.getInstance();
 
-        repository.addMetadataFacet( TEST_REPO_ID, new KindOfRepositoryStatistics( "first", cal.getTime() ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new KindOfRepositoryStatistics( "first", cal.getTime() ) );
 
-        assertTrue( repository.hasMetadataFacet( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
+        assertTrue( repository.hasMetadataFacet( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
 
         cal.add( Calendar.MINUTE, 2 );
 
-        repository.addMetadataFacet( TEST_REPO_ID, new KindOfRepositoryStatistics( "second", cal.getTime() ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new KindOfRepositoryStatistics( "second", cal.getTime() ) );
 
         cal.add( Calendar.MINUTE, 2 );
 
-        repository.addMetadataFacet( TEST_REPO_ID, new KindOfRepositoryStatistics( "third", cal.getTime() ) );
+        repository.addMetadataFacet( , TEST_REPO_ID, new KindOfRepositoryStatistics( "third", cal.getTime() ) );
 
-        List<String> facets = repository.getMetadataFacets( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
+        List<String> facets = repository.getMetadataFacets( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
 
         assertThat( facets ).isNotNull().isNotEmpty().hasSize( 3 );
 
-        assertTrue( repository.hasMetadataFacet( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
+        assertTrue( repository.hasMetadataFacet( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
 
-        repository.removeMetadataFacets( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
+        repository.removeMetadataFacets( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
 
-        assertFalse( repository.hasMetadataFacet( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
+        assertFalse( repository.hasMetadataFacet( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() ) );
 
-        facets = repository.getMetadataFacets( TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
+        facets = repository.getMetadataFacets( , TEST_REPO_ID, KindOfRepositoryStatistics.class.getName() );
 
         assertThat( facets ).isNotNull().isEmpty();
 
@@ -860,11 +860,11 @@ public abstract class AbstractMetadataRepositoryTest
     {
         ArtifactMetadata artifact1 = createArtifact();
         ArtifactMetadata artifact2 = createArtifact( "pom" );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
 
         Collection<ArtifactMetadata> artifacts =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         ArrayList<ArtifactMetadata> actual = new ArrayList<>( artifacts );
         Collections.sort( actual,( o1, o2 ) -> o1.getId().compareTo( o2.getId() ) );
         assertEquals( Arrays.asList( artifact1, artifact2 ), actual );
@@ -882,11 +882,11 @@ public abstract class AbstractMetadataRepositoryTest
         String version2 = "1.0-20091212.123456-2";
         artifact2.setId( artifact2.getProject() + "-" + version2 + ".jar" );
         artifact2.setVersion( version2 );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
 
         Collection<String> versions =
-            repository.getArtifactVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifactVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( versions ).isNotNull().isNotEmpty().contains( version1, version2 );
     }
@@ -899,11 +899,11 @@ public abstract class AbstractMetadataRepositoryTest
         artifact1.setId( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + ".jar" );
         ArtifactMetadata artifact2 = createArtifact();
         artifact2.setId( TEST_PROJECT + "-" + TEST_PROJECT_VERSION + "-sources.jar" );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact2 );
 
         Collection<String> versions =
-            repository.getArtifactVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifactVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( versions ).isNotNull().isNotEmpty().hasSize( 1 ).containsExactly( TEST_PROJECT_VERSION );
 
@@ -914,10 +914,10 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, null, null );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, null, null );
 
         assertEquals( Collections.singletonList( artifact ), artifacts );
     }
@@ -929,10 +929,10 @@ public abstract class AbstractMetadataRepositoryTest
         String namespace = "org.apache.archiva";
         ArtifactMetadata artifact = createArtifact();
         artifact.setNamespace( namespace );
-        repository.updateArtifact( TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, null, null );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, null, null );
 
         tryAssert(()->assertEquals( Collections.singletonList( artifact ), artifacts ));
     }
@@ -942,12 +942,12 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         Date date = new Date( artifact.getWhenGathered().getTime() - 10000 );
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, date, null );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, date, null );
 
         assertEquals( Collections.singletonList( artifact ), artifacts );
     }
@@ -957,11 +957,11 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         Date date = new Date( artifact.getWhenGathered().getTime() + 10000 );
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, date, null );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, date, null );
 
         assertThat( artifacts ).isNotNull().isEmpty();
     }
@@ -971,13 +971,13 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         Date lower = new Date( artifact.getWhenGathered().getTime() - 10000 );
         Date upper = new Date( artifact.getWhenGathered().getTime() + 10000 );
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, lower, upper );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, lower, upper );
 
         assertEquals( Collections.singletonList( artifact ), artifacts );
     }
@@ -987,12 +987,12 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         Date upper = new Date( artifact.getWhenGathered().getTime() + 10000 );
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, null, upper );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, null, upper );
 
         assertEquals( Collections.singletonList( artifact ), artifacts );
     }
@@ -1002,12 +1002,12 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         Date upper = new Date( artifact.getWhenGathered().getTime() - 10000 );
 
-        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( TEST_REPO_ID, null, upper );
+        List<ArtifactMetadata> artifacts = repository.getArtifactsByDateRange( , TEST_REPO_ID, null, upper );
 
         assertThat( artifacts ).isNotNull().isEmpty();
     }
@@ -1017,11 +1017,11 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         tryAssert(()-> {
-            List<ArtifactMetadata> artifacts = repository.getArtifacts(TEST_REPO_ID);
+            List<ArtifactMetadata> artifacts = repository.getArtifacts( , TEST_REPO_ID );
             assertEquals(Collections.singletonList(artifact), artifacts);
         });
     }
@@ -1031,16 +1031,16 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         ArtifactMetadata secondArtifact = createArtifact();
         secondArtifact.setRepositoryId( OTHER_REPO_ID );
-        repository.updateArtifact( OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
+        repository.updateArtifact( , OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
         repository.save();
 
         // test it restricts to the appropriate repository
-        tryAssert(() -> assertEquals( Collections.singletonList( artifact ), repository.getArtifacts( TEST_REPO_ID ) ));
-        tryAssert(() -> assertEquals( Collections.singletonList( secondArtifact ), repository.getArtifacts( OTHER_REPO_ID ) ));
+        tryAssert(() -> assertEquals( Collections.singletonList( artifact ), repository.getArtifacts( , TEST_REPO_ID ) ));
+        tryAssert(() -> assertEquals( Collections.singletonList( secondArtifact ), repository.getArtifacts( , OTHER_REPO_ID ) ));
     }
 
 
@@ -1049,18 +1049,18 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         ArtifactMetadata secondArtifact = createArtifact();
         secondArtifact.setRepositoryId( OTHER_REPO_ID );
-        repository.updateArtifact( OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
+        repository.updateArtifact( , OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
         repository.save();
 
         // test it restricts to the appropriate repository
         assertEquals( Collections.singletonList( artifact ),
-                      repository.getArtifactsByDateRange( TEST_REPO_ID, null, null ) );
+                      repository.getArtifactsByDateRange( , TEST_REPO_ID, null, null ) );
         assertEquals( Collections.singletonList( secondArtifact ),
-                      repository.getArtifactsByDateRange( OTHER_REPO_ID, null, null ) );
+                      repository.getArtifactsByDateRange( , OTHER_REPO_ID, null, null ) );
     }
 
     @Test
@@ -1068,41 +1068,41 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         ArtifactMetadata secondArtifact = createArtifact();
         secondArtifact.setRepositoryId( OTHER_REPO_ID );
-        repository.updateArtifact( OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
+        repository.updateArtifact( , OTHER_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, secondArtifact );
         repository.save();
 
         // test it restricts to the appropriate repository
         assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_SHA1 ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_SHA1 ) ) );
         assertEquals( Collections.singletonList( secondArtifact ), new ArrayList<>(
-            repository.getArtifactsByChecksum( OTHER_REPO_ID, TEST_SHA1 ) ) );
+            repository.getArtifactsByChecksum( , OTHER_REPO_ID, TEST_SHA1 ) ) );
         assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_MD5 ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_MD5 ) ) );
         assertEquals( Collections.singletonList( secondArtifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( OTHER_REPO_ID, TEST_MD5 ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , OTHER_REPO_ID, TEST_MD5 ) ) );
     }
 
     @Test
     public void testGetNamespacesWithSparseDepth()
         throws Exception
     {
-        repository.updateNamespace( TEST_REPO_ID, "org.apache.maven.shared" );
+        repository.updateNamespace( , TEST_REPO_ID, "org.apache.maven.shared" );
 
-        Collection<String> namespaces = repository.getRootNamespaces( TEST_REPO_ID );
+        Collection<String> namespaces = repository.getRootNamespaces( , TEST_REPO_ID );
 
         assertThat( namespaces ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "org" );
 
-        namespaces = repository.getNamespaces( TEST_REPO_ID, "org" );
+        namespaces = repository.getNamespaces( , TEST_REPO_ID, "org" );
         assertThat( namespaces ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "apache" );
 
-        namespaces = repository.getNamespaces( TEST_REPO_ID, "org.apache" );
+        namespaces = repository.getNamespaces( , TEST_REPO_ID, "org.apache" );
         assertThat( namespaces ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "maven" );
 
-        namespaces = repository.getNamespaces( TEST_REPO_ID, "org.apache.maven" );
+        namespaces = repository.getNamespaces( , TEST_REPO_ID, "org.apache.maven" );
         assertThat( namespaces ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "shared" );
     }
 
@@ -1111,13 +1111,13 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         String namespace = "org.apache.maven.shared";
-        repository.updateNamespace( TEST_REPO_ID, namespace );
+        repository.updateNamespace( , TEST_REPO_ID, namespace );
 
         ProjectVersionMetadata metadata = new ProjectVersionMetadata();
         metadata.setId( TEST_PROJECT_VERSION );
-        repository.updateProjectVersion( TEST_REPO_ID, namespace, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, namespace, TEST_PROJECT, metadata );
 
-        Collection<String> namespaces = repository.getNamespaces( TEST_REPO_ID, namespace );
+        Collection<String> namespaces = repository.getNamespaces( , TEST_REPO_ID, namespace );
 
         assertThat( namespaces ).isNotNull().isEmpty();
 
@@ -1130,11 +1130,11 @@ public abstract class AbstractMetadataRepositoryTest
         ProjectMetadata projectMetadata = new ProjectMetadata();
         projectMetadata.setId( TEST_PROJECT );
         projectMetadata.setNamespace( "org.apache.maven" );
-        repository.updateProject( TEST_REPO_ID, projectMetadata );
+        repository.updateProject( , TEST_REPO_ID, projectMetadata );
 
-        repository.updateNamespace( TEST_REPO_ID, "org.apache.maven.shared" );
+        repository.updateNamespace( , TEST_REPO_ID, "org.apache.maven.shared" );
 
-        Collection<String> projects = repository.getProjects( TEST_REPO_ID, "org.apache.maven" );
+        Collection<String> projects = repository.getProjects( , TEST_REPO_ID, "org.apache.maven" );
 
         assertThat( projects ).isNotNull().isNotEmpty().hasSize( 1 ).contains( TEST_PROJECT );
     }
@@ -1147,16 +1147,16 @@ public abstract class AbstractMetadataRepositoryTest
 
         ProjectVersionMetadata versionMetadata = new ProjectVersionMetadata();
         versionMetadata.setId( TEST_PROJECT_VERSION );
-        repository.updateProjectVersion( TEST_REPO_ID, "org.apache.maven", TEST_PROJECT, versionMetadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, "org.apache.maven", TEST_PROJECT, versionMetadata );
 
-        repository.updateProjectVersion( TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT, "other-project",
-                                         versionMetadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT,
+            "other-project", versionMetadata );
 
         Collection<String> versions =
-            repository.getProjectVersions( TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT, "other-project" );
+            repository.getProjectVersions( , TEST_REPO_ID, "org.apache.maven." + TEST_PROJECT, "other-project" );
         assertThat( versions ).isNotNull().isNotEmpty().contains( TEST_PROJECT_VERSION );
 
-        versions = repository.getProjectVersions( TEST_REPO_ID, "org.apache.maven", TEST_PROJECT );
+        versions = repository.getProjectVersions( , TEST_REPO_ID, "org.apache.maven", TEST_PROJECT );
 
         assertThat( versions ).isNotNull().isNotEmpty().contains( TEST_PROJECT_VERSION );
     }
@@ -1166,11 +1166,11 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_MD5 ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_MD5 ) ) );
     }
 
     @Test
@@ -1178,11 +1178,11 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_SHA1 ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_SHA1 ) ) );
     }
 
     @Test
@@ -1192,13 +1192,13 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata artifact = createArtifact();
         String namespace = "multi.level.ns";
         artifact.setNamespace( namespace );
-        repository.updateArtifact( TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, namespace, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         repository.save();
 
         tryAssert(()->assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_SHA1 ) ) ));
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_SHA1 ) ) ));
         tryAssert(()->assertEquals( Collections.singletonList( artifact ),
-                      new ArrayList<>( repository.getArtifactsByChecksum( TEST_REPO_ID, TEST_MD5 ) ) ) );
+                      new ArrayList<>( repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_MD5 ) ) ) );
     }
 
     @Test
@@ -1206,23 +1206,23 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact1 = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact1 );
 
         String newProjectId = "another-project";
         ArtifactMetadata artifact2 = createArtifact();
         artifact2.setProject( newProjectId );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, newProjectId, TEST_PROJECT_VERSION, artifact2 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, newProjectId, TEST_PROJECT_VERSION, artifact2 );
         repository.save();
 
         tryAssert(()-> {
                     List<ArtifactMetadata> artifacts =
-                            new ArrayList<>(repository.getArtifactsByChecksum(TEST_REPO_ID, TEST_SHA1));
+                            new ArrayList<>(repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_SHA1 ));
                     Collections.sort(artifacts, new ArtifactMetadataComparator());
                     assertEquals(Arrays.asList(artifact2, artifact1), artifacts);
                 });
 
         tryAssert(() -> {
-            ArrayList<ArtifactMetadata> artifacts = new ArrayList<>(repository.getArtifactsByChecksum(TEST_REPO_ID, TEST_MD5));
+            ArrayList<ArtifactMetadata> artifacts = new ArrayList<>(repository.getArtifactsByChecksum( , TEST_REPO_ID, TEST_MD5 ));
             Collections.sort(artifacts, new ArtifactMetadataComparator());
             assertEquals(Arrays.asList(artifact2, artifact1), artifacts);
         });
@@ -1233,10 +1233,10 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         Collection<ArtifactMetadata> artifactsByChecksum =
-            repository.getArtifactsByChecksum( TEST_REPO_ID, "not checksum" );
+            repository.getArtifactsByChecksum( , TEST_REPO_ID, "not checksum" );
         assertThat( artifactsByChecksum ).isNotNull().isEmpty();
     }
 
@@ -1246,7 +1246,7 @@ public abstract class AbstractMetadataRepositoryTest
     {
         createArtifactWithGenericMetadataFacet( 10 );
         Collection<ArtifactMetadata> artifactsByMetadata =
-            repository.getArtifactsByProjectVersionMetadata( TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID );
+            repository.getArtifactsByProjectVersionMetadata( , TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID );
         assertThat( artifactsByMetadata ).hasSize( 1 );
         ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator().next();
         assertThat( artifactMetadata.getId() ).isEqualTo( "projectId-1.0.jar" );
@@ -1260,7 +1260,7 @@ public abstract class AbstractMetadataRepositoryTest
     {
         createArtifactWithGenericMetadataFacet();
         Collection<ArtifactMetadata> artifactsByMetadata =
-            repository.getArtifactsByProjectVersionMetadata( TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
+            repository.getArtifactsByProjectVersionMetadata( , TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
         assertThat( artifactsByMetadata ).hasSize( 1 );
         assertThat( artifactsByMetadata.iterator().next().getRepositoryId() ).isNotNull().isNotEmpty();
     }
@@ -1271,7 +1271,7 @@ public abstract class AbstractMetadataRepositoryTest
     {
         createArtifactWithGenericMetadataFacet();
         Collection<ArtifactMetadata> artifactsByMetadata =
-            repository.getArtifactsByProjectVersionMetadata( TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
+            repository.getArtifactsByProjectVersionMetadata( , TEST_METADATA_KEY, TEST_METADATA_VALUE, null );
         assertThat( artifactsByMetadata ).hasSize( 1 );
     }
 
@@ -1282,7 +1282,7 @@ public abstract class AbstractMetadataRepositoryTest
         createArtifactWithMavenArtifactFacet();
         tryAssert(()-> {
             Collection<ArtifactMetadata> artifactsByMetadata =
-                    repository.getArtifactsByMetadata("foo", TEST_METADATA_VALUE, null);
+                    repository.getArtifactsByMetadata( , "foo", TEST_METADATA_VALUE, null );
             assertThat(artifactsByMetadata).hasSize(1);
             ArtifactMetadata artifactMetadata = artifactsByMetadata.iterator().next();
             assertThat(artifactMetadata.getId()).isEqualTo("projectId-1.0.jar");
@@ -1301,7 +1301,7 @@ public abstract class AbstractMetadataRepositoryTest
         createArtifactWithData();
         // only works on JCR implementation
         // Collection<ArtifactMetadata> artifactsByProperty = repository.getArtifactsByProperty( "org.name", TEST_ORGANIZATION.getName(), TEST_REPO_ID );
-        Collection<ArtifactMetadata> artifactsByProperty = repository.getArtifactsByProperty( "url", TEST_URL, TEST_REPO_ID );
+        Collection<ArtifactMetadata> artifactsByProperty = repository.getArtifactsByProperty( , "url", TEST_URL, TEST_REPO_ID );
         assertThat( artifactsByProperty ).hasSize( 1 );
         ArtifactMetadata artifactMetadata = artifactsByProperty.iterator().next();
         assertThat( artifactMetadata.getId() ).isEqualTo( "projectId-1.0.jar" );
@@ -1313,23 +1313,23 @@ public abstract class AbstractMetadataRepositoryTest
     public void testDeleteRepository()
         throws Exception
     {
-        repository.updateNamespace( TEST_REPO_ID, TEST_NAMESPACE );
+        repository.updateNamespace( , TEST_REPO_ID, TEST_NAMESPACE );
 
         ProjectMetadata project1 = new ProjectMetadata();
         project1.setNamespace( TEST_NAMESPACE );
         project1.setId( "project1" );
-        repository.updateProject( TEST_REPO_ID, project1 );
+        repository.updateProject( , TEST_REPO_ID, project1 );
         ProjectMetadata project2 = new ProjectMetadata();
         project2.setNamespace( TEST_NAMESPACE );
         project2.setId( "project2" );
-        repository.updateProject( TEST_REPO_ID, project2 );
+        repository.updateProject( , TEST_REPO_ID, project2 );
 
         ArtifactMetadata artifact1 = createArtifact();
         artifact1.setProject( "project1" );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, "project1", TEST_PROJECT_VERSION, artifact1 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, "project1", TEST_PROJECT_VERSION, artifact1 );
         ArtifactMetadata artifact2 = createArtifact();
         artifact2.setProject( "project2" );
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, "project2", TEST_PROJECT_VERSION, artifact2 );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, "project2", TEST_PROJECT_VERSION, artifact2 );
         repository.save();
 
         List<ArtifactMetadata> expected = Arrays.asList( artifact1, artifact2 );
@@ -1338,15 +1338,15 @@ public abstract class AbstractMetadataRepositoryTest
 
         tryAssert(()-> {
             List<ArtifactMetadata> actual =
-                    new ArrayList<>( repository.getArtifactsByDateRange( TEST_REPO_ID, null, null ) );
+                    new ArrayList<>( repository.getArtifactsByDateRange( , TEST_REPO_ID, null, null ) );
             Collections.sort( actual, new ArtifactMetadataComparator() );
             assertEquals(expected, actual);
         });
 
-        repository.removeRepository( TEST_REPO_ID );
+        repository.removeRepository( , TEST_REPO_ID );
 
-        assertTrue( repository.getArtifacts( TEST_REPO_ID ).isEmpty() );
-        assertTrue( repository.getRootNamespaces( TEST_REPO_ID ).isEmpty() );
+        assertTrue( repository.getArtifacts( , TEST_REPO_ID ).isEmpty() );
+        assertTrue( repository.getRootNamespaces( , TEST_REPO_ID ).isEmpty() );
     }
 
 
@@ -1357,32 +1357,32 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata artifact = createArtifact();
         artifact.addFacet( new TestMetadataFacet( "value" ) );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        assertThat( repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                             TEST_PROJECT_VERSION ) ).containsExactly( artifact );
+        assertThat( repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ) ).containsExactly( artifact );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION_2_0, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION_2_0, artifact );
 
-        Collection<String> versions = repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        Collection<String> versions = repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
         log.info( "versions {}", versions );
 
         assertThat( versions ).isNotNull().isNotEmpty().hasSize( 2 ).contains( "1.0", "2.0" );
 
-        repository.removeArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId() );
+        repository.removeArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId() );
 
-        versions = repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        versions = repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
         log.info( "versions {}", versions );
 
         assertThat( versions ).isNotNull().isNotEmpty().hasSize( 1 ).contains( "2.0" );
 
-        assertThat( repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                             TEST_PROJECT_VERSION ) ).isNotNull().isEmpty();
+        assertThat( repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNotNull().isEmpty();
 
-        assertThat( repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT,
-                                             TEST_PROJECT_VERSION_2_0 ) ).isNotEmpty().hasSize( 1 );
+        assertThat( repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE,
+            TEST_PROJECT, TEST_PROJECT_VERSION_2_0 ) ).isNotEmpty().hasSize( 1 );
     }
 
     @Test
@@ -1392,18 +1392,18 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata artifact = createArtifact();
         artifact.addFacet( new TestMetadataFacet( "value" ) );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
         Collection<ArtifactMetadata> artifacts =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertEquals( Collections.singletonList( artifact ), new ArrayList<>( artifacts ) );
 
-        repository.removeArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId() );
+        repository.removeArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact.getId() );
 
-        artifacts = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        artifacts = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat( artifacts ).isNotNull().isEmpty();
     }
@@ -1415,17 +1415,17 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata artifact = createArtifact();
         artifact.addFacet( new TestMetadataFacet( "value" ) );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        Collection<String> versions = repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        Collection<String> versions = repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
         assertThat( versions ).isNotNull().isNotEmpty().hasSize( 1 );
 
-        repository.removeProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        repository.removeProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
-        versions = repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        versions = repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
         assertThat( versions ).isNotNull().isEmpty();
     }
@@ -1437,15 +1437,15 @@ public abstract class AbstractMetadataRepositoryTest
         ArtifactMetadata artifact = createArtifact();
         artifact.addFacet( new TestMetadataFacet( "value" ) );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
 
-        assertEquals( 1, repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ).size() );
+        assertEquals( 1, repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT ).size() );
 
-        repository.removeProject( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        repository.removeProject( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
-        Collection<String> versions = repository.getProjectVersions( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
+        Collection<String> versions = repository.getProjectVersions( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT );
 
         assertThat( versions ).isNotNull().isEmpty();
     }
@@ -1461,7 +1461,7 @@ public abstract class AbstractMetadataRepositoryTest
         artifactOne.addFacet( new TestMetadataFacet( "value" ) );
         artifactOne.setId( TEST_PROJECT + "-" + "2.0-20120618.214127-1" + "." + "jar" );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactOne );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactOne );
 
         ArtifactMetadata artifactTwo = createArtifact();
         artifactTwo.setVersion( "2.0-20120618.214135-2" );
@@ -1469,24 +1469,24 @@ public abstract class AbstractMetadataRepositoryTest
         artifactTwo.addFacet( new TestMetadataFacet( "value" ) );
         artifactTwo.setId( TEST_PROJECT + "-" + "2.0-20120618.214135-2" + "." + "jar" );
 
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactTwo );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT", artifactTwo );
 
         Collection<ArtifactMetadata> artifactMetadatas =
-            repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
+            repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
 
         assertThat( artifactMetadatas ).isNotNull().isNotEmpty().hasSize( 2 );
 
         log.info( "artifactMetadatas: {}", artifactMetadatas );
 
-        repository.removeArtifact( artifactOne, "2.0-SNAPSHOT" );
+        repository.removeArtifact( , artifactOne, "2.0-SNAPSHOT" );
 
-        artifactMetadatas = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
+        artifactMetadatas = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
 
         assertThat( artifactMetadatas ).isNotNull().isNotEmpty().hasSize( 1 );
 
-        repository.removeArtifact( artifactTwo, "2.0-SNAPSHOT" );
+        repository.removeArtifact( , artifactTwo, "2.0-SNAPSHOT" );
 
-        artifactMetadatas = repository.getArtifacts( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
+        artifactMetadatas = repository.getArtifacts( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, "2.0-SNAPSHOT" );
 
         assertThat( artifactMetadatas ).isNotNull().isEmpty();
     }
@@ -1525,14 +1525,14 @@ public abstract class AbstractMetadataRepositoryTest
         d.setOptional( true );
         metadata.addDependency( d );
 
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
 
         repository.save();
 
-        metadata = repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        metadata = repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         Collection<ProjectVersionReference> references =
-            repository.getProjectReferences( TEST_REPO_ID, d.getGroupId(), d.getArtifactId(), d.getVersion() );
+            repository.getProjectReferences( , TEST_REPO_ID, d.getGroupId(), d.getArtifactId(), d.getVersion() );
 
         log.info( "references: {}", references );
 
@@ -1547,7 +1547,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         createArtifactWithData();
-        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( "url", TEST_URL, TEST_REPO_ID, false );
+        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, "url", TEST_URL, false );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
     }
 
@@ -1556,9 +1556,9 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         createArtifactWithData();
-        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( "url", TEST_URL, TEST_REPO_ID, true );
+        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, "url", TEST_URL, true );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
-        artifactsByProperty = repository.searchArtifacts( "org.name", "pache", TEST_REPO_ID, true );
+        artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, "org.name", "pache", true );
         assertThat( artifactsByProperty ).isNotNull().isEmpty();
     }
 
@@ -1567,7 +1567,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         createArtifactWithGenericMetadataFacet();
-        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( TEST_METADATA_KEY, TEST_METADATA_VALUE, TEST_REPO_ID, false );
+        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, TEST_METADATA_KEY, TEST_METADATA_VALUE, false );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
     }
 
@@ -1577,7 +1577,7 @@ public abstract class AbstractMetadataRepositoryTest
     {
         createArtifactWithGenericMetadataFacet();
         tryAssert(()-> {
-            Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( TEST_METADATA_KEY, TEST_METADATA_VALUE, null, false );
+            Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( , null, TEST_METADATA_KEY, TEST_METADATA_VALUE, false );
             assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
         });
     }
@@ -1590,7 +1590,7 @@ public abstract class AbstractMetadataRepositoryTest
         // only works in JCR
         // Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( TEST_URL, TEST_REPO_ID, false );
         Collection<ArtifactMetadata> artifactsByProperty =
-            repository.searchArtifacts( TEST_METADATA_VALUE, TEST_REPO_ID, false );
+            repository.searchArtifacts( , TEST_REPO_ID, TEST_METADATA_VALUE, false );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
     }
 
@@ -1602,9 +1602,9 @@ public abstract class AbstractMetadataRepositoryTest
         // only works in JCR
         // Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( TEST_URL, TEST_REPO_ID, true );
         Collection<ArtifactMetadata> artifactsByProperty =
-            repository.searchArtifacts( TEST_METADATA_VALUE, TEST_REPO_ID, true );
+            repository.searchArtifacts( , TEST_REPO_ID, TEST_METADATA_VALUE, true );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
-        artifactsByProperty = repository.searchArtifacts( TEST_METADATA_VALUE.substring( 2 ), TEST_REPO_ID, true );
+        artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, TEST_METADATA_VALUE.substring( 2 ), true );
         assertThat( artifactsByProperty ).isNotNull().isEmpty();
     }
 
@@ -1613,7 +1613,7 @@ public abstract class AbstractMetadataRepositoryTest
         throws Exception
     {
         createArtifactWithGenericMetadataFacet();
-        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( TEST_METADATA_VALUE, TEST_REPO_ID, false );
+        Collection<ArtifactMetadata> artifactsByProperty = repository.searchArtifacts( , TEST_REPO_ID, TEST_METADATA_VALUE, false );
         assertThat( artifactsByProperty ).isNotNull().isNotEmpty();
     }
 
@@ -1670,16 +1670,16 @@ public abstract class AbstractMetadataRepositoryTest
             {
                 artifact.addFacet( artifactFacet );
             }
-            repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+            repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         }
         if ( projectVersionMetadataFacet != null )
         {
             ProjectVersionMetadata metadata =
-                repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+                repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
             metadata.addFacet( projectVersionMetadataFacet );
             metadata.setOrganization( TEST_ORGANIZATION );
             metadata.setUrl( TEST_URL );
-            repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+            repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
         }
         repository.save();
     }
@@ -1688,13 +1688,13 @@ public abstract class AbstractMetadataRepositoryTest
         throws MetadataRepositoryException, MetadataResolutionException
     {
         ArtifactMetadata artifact = createArtifact();
-        repository.updateArtifact( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
+        repository.updateArtifact( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION, artifact );
         ProjectVersionMetadata metadata =
-            repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+            repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
         metadata.setOrganization( TEST_ORGANIZATION );
         metadata.setUrl( TEST_URL );
 
-        repository.updateProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
+        repository.updateProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, metadata );
         repository.save();
     }
 
diff --git a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsProvider.java b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsProvider.java
index 112f86a..6fb3751 100644
--- a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsProvider.java
+++ b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryStatisticsProvider.java
@@ -21,6 +21,7 @@ package org.apache.archiva.metadata.repository.stats.model;
 
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.RepositorySession;
 
 /**
  *
@@ -37,11 +38,13 @@ public interface RepositoryStatisticsProvider
     /**
      * Populate the statistics object with the statistics data of this repository.
      *
+     *
+     * @param repositorySession
      * @param repository The current metadata repository implementation
      * @param repositoryId The repository Id
      * @param statistics The statistics object that should be filled.
      * @throws MetadataRepositoryException Is thrown, if an error occurs while accessing the repository
      */
-    void populateStatistics( MetadataRepository repository, String repositoryId, RepositoryStatistics statistics)
+    void populateStatistics( RepositorySession repositorySession, MetadataRepository repository, String repositoryId, RepositoryStatistics statistics )
         throws MetadataRepositoryException;
 }
diff --git a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
index 9cc426c..1723322 100644
--- a/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
+++ b/archiva-modules/metadata/metadata-statistics-api/src/main/java/org/apache/archiva/metadata/repository/stats/model/RepositoryWalkingStatisticsProvider.java
@@ -24,6 +24,7 @@ import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
+import org.apache.archiva.metadata.repository.RepositorySession;
 
 import java.util.Collection;
 
@@ -43,19 +44,21 @@ public class RepositoryWalkingStatisticsProvider implements RepositoryStatistics
     /**
      * Walks each namespace of the given repository id and counts the artifacts.
      *
+     *
+     * @param repositorySession
      * @param metadataRepository The repository implementation
      * @param repositoryId The repository Id
      * @param repositoryStatistics The statistics object that must be populated
      * @throws MetadataRepositoryException Throws the repository exception, if an error occurs while accessing the repository.
      */
     @Override
-    public void populateStatistics( MetadataRepository metadataRepository, String repositoryId,
-                                                       RepositoryStatistics repositoryStatistics )
+    public void populateStatistics( RepositorySession repositorySession, MetadataRepository metadataRepository, String repositoryId,
+                                    RepositoryStatistics repositoryStatistics )
         throws MetadataRepositoryException
     {
         try
         {
-            for ( String ns : metadataRepository.getRootNamespaces( repositoryId ) )
+            for ( String ns : metadataRepository.getRootNamespaces( , repositoryId ) )
             {
                 walkRepository( metadataRepository, repositoryStatistics, repositoryId, ns );
             }
@@ -70,12 +73,12 @@ public class RepositoryWalkingStatisticsProvider implements RepositoryStatistics
                                  String ns )
         throws MetadataResolutionException
     {
-        for ( String namespace : metadataRepository.getNamespaces( repositoryId, ns ) )
+        for ( String namespace : metadataRepository.getNamespaces( , repositoryId, ns ) )
         {
             walkRepository( metadataRepository, stats, repositoryId, ns + "." + namespace );
         }
 
-        Collection<String> projects = metadataRepository.getProjects( repositoryId, ns );
+        Collection<String> projects = metadataRepository.getProjects( , repositoryId, ns );
         if ( !projects.isEmpty() )
         {
             stats.setTotalGroupCount( stats.getTotalGroupCount() + 1 );
@@ -83,10 +86,10 @@ public class RepositoryWalkingStatisticsProvider implements RepositoryStatistics
 
             for ( String project : projects )
             {
-                for ( String version : metadataRepository.getProjectVersions( repositoryId, ns, project ) )
+                for ( String version : metadataRepository.getProjectVersions( , repositoryId, ns, project ) )
                 {
-                    for ( ArtifactMetadata artifact : metadataRepository.getArtifacts( repositoryId, ns, project,
-                        version ) )
+                    for ( ArtifactMetadata artifact : metadataRepository.getArtifacts( , repositoryId, ns,
+                        project, version ) )
                     {
                         stats.setTotalArtifactCount( stats.getTotalArtifactCount() + 1 );
                         stats.setTotalArtifactFileSize( stats.getTotalArtifactFileSize() + artifact.getSize() );
diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java
index 510dc81..cff05aa 100644
--- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java
+++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/DefaultAuditManager.java
@@ -58,7 +58,7 @@ public class DefaultAuditManager
         List<AuditRecord> records = new ArrayList<>();
         for ( String repositoryId : repositoryIds )
         {
-            List<String> names = metadataRepository.getMetadataFacets( repositoryId, AuditEvent.FACET_ID );
+            List<String> names = metadataRepository.getMetadataFacets( , repositoryId, AuditEvent.FACET_ID );
             for ( String name : names )
             {
                 records.add( new AuditRecord( repositoryId, name ) );
@@ -70,9 +70,9 @@ public class DefaultAuditManager
         List<AuditEvent> events = new ArrayList<>( records.size() );
         for ( AuditRecord record : records )
         {
-            AuditEvent auditEvent = (AuditEvent) metadataRepository.getMetadataFacet( record.repositoryId,
-                                                                                      AuditEvent.FACET_ID,
-                                                                                      record.name );
+            AuditEvent auditEvent = (AuditEvent) metadataRepository.getMetadataFacet( ,
+                record.repositoryId,
+                AuditEvent.FACET_ID, record.name );
             events.add( auditEvent );
         }
         return events;
@@ -85,7 +85,7 @@ public class DefaultAuditManager
         // ignore those with no repository - they will still be logged to the textual audit log
         if ( event.getRepositoryId() != null )
         {
-            repository.addMetadataFacet( event.getRepositoryId(), event );
+            repository.addMetadataFacet( , event.getRepositoryId(), event );
         }
     }
 
@@ -93,7 +93,7 @@ public class DefaultAuditManager
     public void deleteAuditEvents( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
-        metadataRepository.removeMetadataFacets( repositoryId, AuditEvent.FACET_ID );
+        metadataRepository.removeMetadataFacets( , repositoryId, AuditEvent.FACET_ID );
     }
 
     @Override
@@ -113,7 +113,7 @@ public class DefaultAuditManager
         List<AuditEvent> results = new ArrayList<>();
         for ( String repositoryId : repositoryIds )
         {
-            List<String> list = metadataRepository.getMetadataFacets( repositoryId, AuditEvent.FACET_ID );
+            List<String> list = metadataRepository.getMetadataFacets( , repositoryId, AuditEvent.FACET_ID );
             for ( String name : list )
             {
                 try
@@ -122,9 +122,9 @@ public class DefaultAuditManager
                     if ( ( startTime == null || !date.before( startTime ) ) && ( endTime == null || !date.after(
                         endTime ) ) )
                     {
-                        AuditEvent event = (AuditEvent) metadataRepository.getMetadataFacet( repositoryId,
-                                                                                             AuditEvent.FACET_ID,
-                                                                                             name );
+                        AuditEvent event = (AuditEvent) metadataRepository.getMetadataFacet( ,
+                            repositoryId,
+                            AuditEvent.FACET_ID, name );
 
                         if ( resource == null || event.getResource().startsWith( resource ) )
                         {
diff --git a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java
index 8406bbb..ea535fd 100644
--- a/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java
+++ b/archiva-modules/plugins/audit/src/main/java/org/apache/archiva/audit/MetadataAuditListener.java
@@ -59,7 +59,15 @@ public class MetadataAuditListener
         if ( event.getAction().equals( AuditEvent.CREATE_FILE ) || event.getAction().equals( AuditEvent.UPLOAD_FILE ) ||
             event.getAction().equals( AuditEvent.MERGING_REPOSITORIES ) )
         {
-            RepositorySession repositorySession = repositorySessionFactory.createSession();
+            RepositorySession repositorySession = null;
+            try
+            {
+                repositorySession = repositorySessionFactory.createSession();
+            }
+            catch ( MetadataRepositoryException e )
+            {
+                e.printStackTrace( );
+            }
             try
             {
                 auditManager.addAuditEvent( repositorySession.getRepository(), event );
@@ -73,6 +81,10 @@ public class MetadataAuditListener
             {
                 repositorySession.close();
             }
+            catch ( org.apache.archiva.metadata.repository.MetadataSessionException e )
+            {
+                e.printStackTrace( );
+            }
         }
     }
 }
diff --git a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java
index 8119ba4..da40c68 100644
--- a/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java
+++ b/archiva-modules/plugins/audit/src/test/java/org/apache/archiva/audit/AuditManagerTest.java
@@ -104,13 +104,13 @@ public class AuditManagerTest
             expectedEvents.add( event );
         }
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             getEventNames( expectedEvents ) );
 
         for ( AuditEvent event : expectedEvents.subList( 1, expectedEvents.size() ) )
         {
             EasyMock.expect(
-                metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, event.getName() ) ).andReturn(
+                metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, event.getName() ) ).andReturn(
                 event );
         }
         metadataRepositoryControl.replay();
@@ -141,12 +141,12 @@ public class AuditManagerTest
             expectedEvents.add( createEvent( AUDIT_EVENT_BASE + MILLIS_FORMAT.format( i ) ) );
         }
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             getEventNames( expectedEvents ) );
         for ( AuditEvent event : expectedEvents )
         {
             EasyMock.expect(
-                metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, event.getName() ) ).andReturn(
+                metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, event.getName() ) ).andReturn(
                 event );
         }
         metadataRepositoryControl.replay();
@@ -184,15 +184,15 @@ public class AuditManagerTest
             eventNames.get( repositoryId ).add( event.getName() );
         }
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             eventNames.get( TEST_REPO_ID ) );
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID_2, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID_2, AuditEvent.FACET_ID ) ).andReturn(
             eventNames.get( TEST_REPO_ID_2 ) );
 
         for ( AuditEvent event : events.subList( 1, events.size() ) )
         {
-            EasyMock.expect( metadataRepository.getMetadataFacet( event.getRepositoryId(), AuditEvent.FACET_ID,
-                                                                  event.getName() ) ).andReturn( event );
+            EasyMock.expect( metadataRepository.getMetadataFacet( , event.getRepositoryId(),
+                AuditEvent.FACET_ID, event.getName() ) ).andReturn( event );
         }
         metadataRepositoryControl.replay();
 
@@ -218,7 +218,7 @@ public class AuditManagerTest
 
     {
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Collections.<String>emptyList() );
         metadataRepositoryControl.replay();
 
@@ -235,7 +235,7 @@ public class AuditManagerTest
     {
         AuditEvent event = createEvent( new Date() );
 
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, event );
+        metadataRepository.addMetadataFacet( , TEST_REPO_ID, event );
 
         metadataRepositoryControl.replay();
 
@@ -265,7 +265,7 @@ public class AuditManagerTest
         throws Exception
 
     {
-        metadataRepository.removeMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID );
+        metadataRepository.removeMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID );
 
         metadataRepositoryControl.replay();
 
@@ -286,12 +286,12 @@ public class AuditManagerTest
         AuditEvent expectedEvent = createEvent( expectedTimestamp );
         AuditEvent event3 = createEvent( new Date( current.getTime() - 1000 ) );
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( event1.getName(), expectedEvent.getName(), event3.getName() ) );
 
         // only match the middle one
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent.getName() ) ).andReturn( expectedEvent );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent.getName() ) ).andReturn( expectedEvent );
 
         metadataRepositoryControl.replay();
 
@@ -318,13 +318,13 @@ public class AuditManagerTest
         Date ts3 = new Date( current.getTime() - 1000 );
         AuditEvent expectedEvent3 = createEvent( ts3 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( event1.getName(), expectedEvent2.getName(), expectedEvent3.getName() ) );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
         metadataRepositoryControl.replay();
 
         List<AuditEvent> events =
@@ -350,14 +350,14 @@ public class AuditManagerTest
         AuditEvent expectedEvent2 = createEvent( expectedTimestamp );
         AuditEvent event3 = createEvent( new Date( current.getTime() - 1000 ) );
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( expectedEvent1.getName(), expectedEvent2.getName(), event3.getName() ) );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
 
         metadataRepositoryControl.replay();
 
@@ -386,17 +386,17 @@ public class AuditManagerTest
         Date ts3 = new Date( current.getTime() - 1000 );
         AuditEvent expectedEvent3 = createEvent( ts3 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName() ) );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
         metadataRepositoryControl.replay();
 
         List<AuditEvent> events =
@@ -426,18 +426,18 @@ public class AuditManagerTest
         AuditEvent expectedEvent3 = createEvent( ts3 );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName() ) );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID,
-                                                              expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            AuditEvent.FACET_ID, expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
         metadataRepositoryControl.replay();
 
         List<AuditEvent> events =
@@ -464,15 +464,15 @@ public class AuditManagerTest
         AuditEvent expectedEvent3 = createEvent( new Date( current.getTime() - 1000 ) );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) ).andReturn(
             Arrays.asList( expectedEvent1.getName(), expectedEvent2.getName(), expectedEvent3.getName() ) );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent1.getName() ) ).andReturn( expectedEvent1 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent2.getName() ) ).andReturn( expectedEvent2 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName() ) ).andReturn( expectedEvent3 );
 
         metadataRepositoryControl.replay();
 
@@ -500,20 +500,20 @@ public class AuditManagerTest
         AuditEvent expectedEvent3 = createEvent( ts3 );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) )
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) )
             .andReturn( Arrays.asList( expectedEvent1.getName(), expectedEvent3.getName() )  );
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID_2, AuditEvent.FACET_ID ) )
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID_2, AuditEvent.FACET_ID ) )
             .andReturn( Arrays.asList( expectedEvent2.getName() ) );
 
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent1.getName() ) )
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent1.getName() ) )
             .andReturn( expectedEvent1 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID_2, AuditEvent.FACET_ID, expectedEvent2.getName() ) )
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID_2, AuditEvent.FACET_ID, expectedEvent2.getName() ) )
             .andReturn( expectedEvent2 );
 
-        EasyMock.expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName() ) )
+        EasyMock.expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, AuditEvent.FACET_ID, expectedEvent3.getName() ) )
             .andReturn( expectedEvent3 );
 
         metadataRepositoryControl.replay();
@@ -542,7 +542,7 @@ public class AuditManagerTest
         String name2 = createEvent( expectedTimestamp ).getName();
         String name3 = createEvent( new Date( current.getTime() - 1000 ) ).getName();
 
-        EasyMock.expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, AuditEvent.FACET_ID ) )
+        EasyMock.expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, AuditEvent.FACET_ID ) )
             .andReturn( Arrays.asList( name1, name2, name3 ) );
 
         metadataRepositoryControl.replay();
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
index 5cc9fac..05d6c5c3 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepository.java
@@ -55,6 +55,7 @@ import org.apache.archiva.metadata.model.Scm;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.cassandra.model.ArtifactMetadataModel;
 import org.apache.archiva.metadata.repository.cassandra.model.MetadataFacetModel;
 import org.apache.archiva.metadata.repository.cassandra.model.Namespace;
@@ -66,7 +67,6 @@ import org.modelmapper.ModelMapper;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.persistence.PersistenceException;
 import java.util.ArrayList;
 import java.util.Collection;
 import java.util.Collections;
@@ -230,7 +230,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void updateNamespace( String repositoryId, String namespaceId )
+    public void updateNamespace( RepositorySession session, String repositoryId, String namespaceId )
         throws MetadataRepositoryException
     {
         updateOrAddNamespace( repositoryId, namespaceId );
@@ -289,7 +289,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public void removeNamespace( String repositoryId, String namespaceId )
+    public void removeNamespace( RepositorySession session, String repositoryId, String namespaceId )
         throws MetadataRepositoryException
     {
 
@@ -367,7 +367,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public void removeRepository( final String repositoryId )
+    public void removeRepository( RepositorySession session, final String repositoryId )
         throws MetadataRepositoryException
     {
 
@@ -447,41 +447,9 @@ public class CassandraMetadataRepository
 
     }
 
-    @Override
-    public Collection<String> getRepositories()
-        throws MetadataRepositoryException
-    {
-        try
-        {
-            logger.debug( "getRepositories" );
-
-            final QueryResult<OrderedRows<String, String, String>> cResult = //
-                HFactory.createRangeSlicesQuery( cassandraArchivaManager.getKeyspace(), //
-                                                 ss, ss, ss ) //
-                    .setColumnFamily( cassandraArchivaManager.getRepositoryFamilyName() ) //
-                    .setColumnNames( REPOSITORY_NAME.toString() ) //
-                    .setRange( null, null, false, Integer.MAX_VALUE ) //
-                    .execute();
-
-            List<String> repoIds = new ArrayList<>( cResult.get().getCount() );
-
-            for ( Row<String, String, String> row : cResult.get() )
-            {
-                repoIds.add( getStringValue( row.getColumnSlice(), REPOSITORY_NAME.toString() ) );
-            }
-
-            return repoIds;
-        }
-        catch ( PersistenceException e )
-        {
-            throw new MetadataRepositoryException( e.getMessage(), e );
-        }
-
-    }
-
     // FIXME this one need peformance improvement maybe a cache?
     @Override
-    public Collection<String> getRootNamespaces( final String repoId )
+    public Collection<String> getRootNamespaces( RepositorySession session, final String repoId )
         throws MetadataResolutionException
     {
 
@@ -504,7 +472,7 @@ public class CassandraMetadataRepository
 
     // FIXME this one need peformance improvement maybe a cache?
     @Override
-    public Collection<String> getNamespaces( final String repoId, final String namespaceId )
+    public Collection<String> getNamespaces( RepositorySession session, final String repoId, final String namespaceId )
         throws MetadataResolutionException
     {
 
@@ -563,7 +531,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public void updateProject( String repositoryId, ProjectMetadata projectMetadata )
+    public void updateProject( RepositorySession session, String repositoryId, ProjectMetadata projectMetadata )
         throws MetadataRepositoryException
     {
 
@@ -599,7 +567,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjects( final String repoId, final String namespace )
+    public Collection<String> getProjects( RepositorySession session, final String repoId, final String namespace )
         throws MetadataResolutionException
     {
 
@@ -622,7 +590,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeProject( final String repositoryId, final String namespaceId, final String projectId )
+    public void removeProject( RepositorySession session, final String repositoryId, final String namespaceId, final String projectId )
         throws MetadataRepositoryException
     {
 
@@ -664,7 +632,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( final String repoId, final String namespace, final String projectId )
+    public Collection<String> getProjectVersions( RepositorySession session, final String repoId, final String namespace, final String projectId )
         throws MetadataResolutionException
     {
 
@@ -696,7 +664,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public ProjectMetadata getProject( final String repoId, final String namespace, final String id )
+    public ProjectMetadata getProject( RepositorySession session, final String repoId, final String namespace, final String id )
         throws MetadataResolutionException
     {
 
@@ -744,7 +712,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public void updateProjectVersion( String repositoryId, String namespaceId, String projectId,
+    public void updateProjectVersion( RepositorySession session, String repositoryId, String namespaceId, String projectId,
                                       ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException
     {
@@ -757,12 +725,12 @@ public class CassandraMetadataRepository
                 updateOrAddNamespace( repositoryId, namespaceId );
             }
 
-            if ( getProject( repositoryId, namespaceId, projectId ) == null )
+            if ( getProject( session, repositoryId, namespaceId, projectId ) == null )
             {
                 ProjectMetadata projectMetadata = new ProjectMetadata();
                 projectMetadata.setNamespace( namespaceId );
                 projectMetadata.setId( projectId );
-                updateProject( repositoryId, projectMetadata );
+                updateProject( session, repositoryId, projectMetadata );
             }
 
         }
@@ -953,7 +921,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public ProjectVersionMetadata getProjectVersion( final String repoId, final String namespace,
+    public ProjectVersionMetadata getProjectVersion( RepositorySession session, final String repoId, final String namespace,
                                                      final String projectId, final String projectVersion )
         throws MetadataResolutionException
     {
@@ -1333,7 +1301,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void updateArtifact( String repositoryId, String namespaceId, String projectId, String projectVersion,
+    public void updateArtifact( RepositorySession session, String repositoryId, String namespaceId, String projectId, String projectVersion,
                                 ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException
     {
@@ -1347,7 +1315,7 @@ public class CassandraMetadataRepository
         ProjectMetadata projectMetadata = new ProjectMetadata();
         projectMetadata.setId( projectId );
         projectMetadata.setNamespace( namespaceId );
-        updateProject( repositoryId, projectMetadata );
+        updateProject( session, repositoryId, projectMetadata );
 
         String key = new ArtifactMetadataModel.KeyBuilder().withNamespace( namespace ).withProject( projectId ).withId(
             artifactMeta.getId() ).withProjectVersion( projectVersion ).build();
@@ -1439,7 +1407,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( final String repoId, final String namespace, final String projectId,
+    public Collection<String> getArtifactVersions( RepositorySession session, final String repoId, final String namespace, final String projectId,
                                                    final String projectVersion )
         throws MetadataResolutionException
     {
@@ -1529,7 +1497,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public List<String> getMetadataFacets( final String repositoryId, final String facetId )
+    public List<String> getMetadataFacets( RepositorySession session, final String repositoryId, final String facetId )
         throws MetadataRepositoryException
     {
 
@@ -1551,14 +1519,14 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public boolean hasMetadataFacet( String repositoryId, String facetId )
+    public boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
-        return !getMetadataFacets( repositoryId, facetId ).isEmpty();
+        return !getMetadataFacets( session, repositoryId, facetId ).isEmpty();
     }
 
     @Override
-    public MetadataFacet getMetadataFacet( final String repositoryId, final String facetId, final String name )
+    public MetadataFacet getMetadataFacet( RepositorySession session, final String repositoryId, final String facetId, final String name )
         throws MetadataRepositoryException
     {
 
@@ -1594,7 +1562,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
+    public void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
 
@@ -1658,7 +1626,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacets( final String repositoryId, final String facetId )
+    public void removeMetadataFacets( RepositorySession session, final String repositoryId, final String facetId )
         throws MetadataRepositoryException
     {
 
@@ -1678,7 +1646,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacet( final String repositoryId, final String facetId, final String name )
+    public void removeMetadataFacet( RepositorySession session, final String repositoryId, final String facetId, final String name )
         throws MetadataRepositoryException
     {
 
@@ -1698,7 +1666,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( final String repositoryId, final Date startTime,
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, final String repositoryId, final Date startTime,
                                                            final Date endTime )
         throws MetadataRepositoryException
     {
@@ -1779,7 +1747,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifactsByChecksum( final String repositoryId, final String checksum )
+    public Collection<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, final String repositoryId, final String checksum )
         throws MetadataRepositoryException
     {
 
@@ -1826,17 +1794,17 @@ public class CassandraMetadataRepository
 
     /**
      * Project version and artifact level metadata are stored in the same place, no distinctions in Cassandra
-     * implementation, just calls {@link #getArtifactsByMetadata(String, String, String)}
+     * implementation, just calls {@link MetadataRepository#getArtifactsByMetadata(RepositorySession, String, String, String)}
      */
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
-        return getArtifactsByMetadata( key, value, repositoryId );
+        return getArtifactsByMetadata( session, key, value, repositoryId );
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         RangeSlicesQuery<String, String, String> query =
@@ -1894,7 +1862,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         QueryResult<OrderedRows<String, String, String>> result =
@@ -1920,10 +1888,10 @@ public class CassandraMetadataRepository
             // projects
             try
             {
-                artifacts.addAll( getArtifacts( getStringValue( row.getColumnSlice(), REPOSITORY_NAME ),
-                                                getStringValue( row.getColumnSlice(), NAMESPACE_ID ),
-                                                getStringValue( row.getColumnSlice(), PROJECT_ID ),
-                                                getStringValue( row.getColumnSlice(), PROJECT_VERSION ) ) );
+                artifacts.addAll( getArtifacts( session,
+                    getStringValue( row.getColumnSlice(), REPOSITORY_NAME ),
+                    getStringValue( row.getColumnSlice(), NAMESPACE_ID ),
+                    getStringValue( row.getColumnSlice(), PROJECT_ID ), getStringValue( row.getColumnSlice(), PROJECT_VERSION ) ) );
             }
             catch ( MetadataResolutionException e )
             {
@@ -1935,7 +1903,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeArtifact( final String repositoryId, final String namespace, final String project,
+    public void removeArtifact( RepositorySession session, final String repositoryId, final String namespace, final String project,
                                 final String version, final String id )
         throws MetadataRepositoryException
     {
@@ -1959,7 +1927,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
         logger.debug( "removeArtifact repositoryId: '{}', namespace: '{}', project: '{}', version: '{}', id: '{}'",
@@ -1975,7 +1943,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeArtifact( final String repositoryId, final String namespace, final String project,
+    public void removeArtifact( RepositorySession session, final String repositoryId, final String namespace, final String project,
                                 final String version, final MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
@@ -2000,7 +1968,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public List<ArtifactMetadata> getArtifacts( final String repositoryId )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, final String repositoryId )
         throws MetadataRepositoryException
     {
 
@@ -2028,7 +1996,7 @@ public class CassandraMetadataRepository
 
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
+    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
                                                                      String projectVersion )
         throws MetadataResolutionException
     {
@@ -2065,7 +2033,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void removeProjectVersion( final String repoId, final String namespace, final String projectId,
+    public void removeProjectVersion( RepositorySession session, final String repoId, final String namespace, final String projectId,
                                       final String projectVersion )
         throws MetadataRepositoryException
     {
@@ -2108,7 +2076,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( final String repoId, final String namespace,
+    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, final String repoId, final String namespace,
                                                       final String projectId, final String projectVersion )
         throws MetadataResolutionException
     {
@@ -2230,23 +2198,12 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public void save()
-    {
-        logger.trace( "save" );
-    }
-
-    @Override
     public void close()
         throws MetadataRepositoryException
     {
         logger.trace( "close" );
     }
 
-    @Override
-    public void revert()
-    {
-        logger.warn( "CassandraMetadataRepository cannot revert" );
-    }
 
     @Override
     public boolean canObtainAccess( Class<?> aClass )
@@ -2255,7 +2212,7 @@ public class CassandraMetadataRepository
     }
 
     @Override
-    public <T> T obtainAccess( Class<T> aClass )
+    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
         throws MetadataRepositoryException
     {
         throw new IllegalArgumentException(
@@ -2278,23 +2235,23 @@ public class CassandraMetadataRepository
      * any property.
      */
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException
     {
-        return getArtifactsByMetadata( null, text, repositoryId );
+        return getArtifactsByMetadata( session, null, text, repositoryId );
     }
 
     /**
      * The exact parameter is ignored as we can't do non exact searches in Cassandra
      */
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
         throws MetadataRepositoryException
     {
         // TODO optimize
         List<ArtifactMetadata> artifacts = new LinkedList<ArtifactMetadata>();
-        artifacts.addAll( getArtifactsByMetadata( key, text, repositoryId ) );
-        artifacts.addAll( getArtifactsByProperty( key, text, repositoryId ) );
+        artifacts.addAll( getArtifactsByMetadata( session, key, text, repositoryId ) );
+        artifacts.addAll( getArtifactsByProperty( session, key, text, repositoryId ) );
         return artifacts;
     }
 }
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraRepositorySessionFactory.java b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraRepositorySessionFactory.java
index c4b5241..6413fa9 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraRepositorySessionFactory.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/main/java/org/apache/archiva/metadata/repository/cassandra/CassandraRepositorySessionFactory.java
@@ -22,6 +22,7 @@ package org.apache.archiva.metadata.repository.cassandra;
 import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.metadata.model.MetadataFacetFactory;
 import org.apache.archiva.metadata.repository.AbstractRepositorySessionFactory;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
@@ -79,7 +80,7 @@ public class CassandraRepositorySessionFactory extends AbstractRepositorySession
 
 
     @Override
-    public RepositorySession createSession()
+    public RepositorySession createSession() throws MetadataRepositoryException
     {
         CassandraMetadataRepository metadataRepository =
             new CassandraMetadataRepository( metadataFacetFactories, configuration, cassandraArchivaManager );
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
index 21e72ab..f9d32b2 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/CassandraMetadataRepositoryTest.java
@@ -87,10 +87,10 @@ public class CassandraMetadataRepositoryTest
             .withId( TEST_PROJECT_VERSION ) //
             .build();
 
-        this.cmr.removeProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
+        this.cmr.removeProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION );
 
         assertThat(
-            repository.getProjectVersion( TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNull();
+            repository.getProjectVersion( , TEST_REPO_ID, TEST_NAMESPACE, TEST_PROJECT, TEST_PROJECT_VERSION ) ).isNull();
 
         assertThat( cmr.getMailingLists( key ) ).isNotNull().isEmpty();
 
diff --git a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
index 061d8e7..28d7f24 100644
--- a/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
+++ b/archiva-modules/plugins/metadata-store-cassandra/src/test/java/org/apache/archiva/metadata/repository/cassandra/RepositoriesNamespaceTest.java
@@ -85,7 +85,7 @@ public class RepositoriesNamespaceTest
         try
         {
 
-            cmr.updateNamespace( "release", "org" );
+            cmr.updateNamespace( , "release", "org" );
 
             r = cmr.getRepository( "release" );
 
@@ -99,14 +99,14 @@ public class RepositoriesNamespaceTest
             assertThat( n ).isNotNull();
             assertThat( n.getRepository() ).isNotNull();
 
-            cmr.updateNamespace( "release", "org.apache" );
+            cmr.updateNamespace( , "release", "org.apache" );
 
             r = cmr.getRepository( "release" );
 
             assertThat( r ).isNotNull();
             assertThat( cmr.getNamespaces( "release" ) ).isNotEmpty().hasSize( 2 );
 
-            cmr.removeNamespace( "release", "org.apache" );
+            cmr.removeNamespace( , "release", "org.apache" );
             assertThat( cmr.getNamespaces( "release" ) ).isNotEmpty().hasSize( 1 );
             assertThat( cmr.getNamespaces( "release" ) ).containsExactly( "org" );
 
@@ -114,16 +114,16 @@ public class RepositoriesNamespaceTest
             projectMetadata.setId( "theproject" );
             projectMetadata.setNamespace( "org" );
 
-            cmr.updateProject( "release", projectMetadata );
+            cmr.updateProject( , "release", projectMetadata );
 
-            assertThat( cmr.getProjects( "release", "org" ) ).isNotEmpty().hasSize( 1 ).containsExactly(
+            assertThat( cmr.getProjects( , "release", "org" ) ).isNotEmpty().hasSize( 1 ).containsExactly(
                 "theproject" );
 
-            cmr.removeProject( "release", "org", "theproject" );
+            cmr.removeProject( , "release", "org", "theproject" );
 
-            assertThat( cmr.getProjects( "release", "org" ) ).isEmpty();
+            assertThat( cmr.getProjects( , "release", "org" ) ).isEmpty();
 
-            cmr.removeRepository( "release" );
+            cmr.removeRepository( , "release" );
 
             r = cmr.getRepository( "release" );
 
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
index a0b7a31..6359355 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileMetadataRepository.java
@@ -37,6 +37,7 @@ import org.apache.archiva.metadata.model.Scm;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
@@ -111,15 +112,15 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void updateProject( String repoId, ProjectMetadata project )
+    public void updateProject( RepositorySession session, String repoId, ProjectMetadata project )
     {
-        updateProject( repoId, project.getNamespace(), project.getId() );
+        updateProject( session, repoId, project.getNamespace(), project.getId() );
     }
 
-    private void updateProject( String repoId, String namespace, String id )
+    private void updateProject( RepositorySession session, String repoId, String namespace, String id )
     {
         // TODO: this is a more braindead implementation than we would normally expect, for prototyping purposes
-        updateNamespace( repoId, namespace );
+        updateNamespace( session, repoId, namespace );
 
         try
         {
@@ -136,13 +137,13 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void updateProjectVersion( String repoId, String namespace, String projectId,
+    public void updateProjectVersion( RepositorySession session, String repoId, String namespace, String projectId,
                                       ProjectVersionMetadata versionMetadata )
     {
 
         try
         {
-            updateProject( repoId, namespace, projectId );
+            updateProject( session, repoId, namespace, projectId );
 
             Path directory =
                 getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + versionMetadata.getId() );
@@ -298,7 +299,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void updateNamespace( String repoId, String namespace )
+    public void updateNamespace( RepositorySession session, String repoId, String namespace )
     {
         try
         {
@@ -315,7 +316,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public List<String> getMetadataFacets( String repoId, String facetId )
+    public List<String> getMetadataFacets( RepositorySession session, String repoId, String facetId )
         throws MetadataRepositoryException
     {
         try
@@ -339,7 +340,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public boolean hasMetadataFacet( String repositoryId, String facetId )
+    public boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
 
@@ -361,7 +362,7 @@ public class FileMetadataRepository
 
 
     @Override
-    public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
+    public MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
     {
         Properties properties;
         try
@@ -395,7 +396,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
+    public void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
     {
         Properties properties = new Properties();
         properties.putAll( metadataFacet.toProperties() );
@@ -414,7 +415,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacets( String repositoryId, String facetId )
+    public void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
         try
@@ -429,7 +430,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacet( String repoId, String facetId, String name )
+    public void removeMetadataFacet( RepositorySession session, String repoId, String facetId, String name )
         throws MetadataRepositoryException
     {
         try
@@ -444,7 +445,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime )
         throws MetadataRepositoryException
     {
         try
@@ -453,9 +454,9 @@ public class FileMetadataRepository
             //  of this information (eg. in Lucene, as before)
 
             List<ArtifactMetadata> artifacts = new ArrayList<>();
-            for ( String ns : getRootNamespaces( repoId ) )
+            for ( String ns : getRootNamespaces(session , repoId ) )
             {
-                getArtifactsByDateRange( artifacts, repoId, ns, startTime, endTime );
+                getArtifactsByDateRange( session, artifacts, repoId, ns, startTime, endTime );
             }
             artifacts.sort(new ArtifactComparator() );
             return artifacts;
@@ -466,22 +467,22 @@ public class FileMetadataRepository
         }
     }
 
-    private void getArtifactsByDateRange( List<ArtifactMetadata> artifacts, String repoId, String ns, Date startTime,
+    private void getArtifactsByDateRange( RepositorySession session, List<ArtifactMetadata> artifacts, String repoId, String ns, Date startTime,
                                           Date endTime )
         throws MetadataRepositoryException
     {
         try
         {
-            for ( String namespace : getNamespaces( repoId, ns ) )
+            for ( String namespace : getNamespaces( session, repoId, ns ) )
             {
-                getArtifactsByDateRange( artifacts, repoId, ns + "." + namespace, startTime, endTime );
+                getArtifactsByDateRange( session, artifacts, repoId, ns + "." + namespace, startTime, endTime );
             }
 
-            for ( String project : getProjects( repoId, ns ) )
+            for ( String project : getProjects( session, repoId, ns ) )
             {
-                for ( String version : getProjectVersions( repoId, ns, project ) )
+                for ( String version : getProjectVersions( session, repoId, ns, project ) )
                 {
-                    for ( ArtifactMetadata artifact : getArtifacts( repoId, ns, project, version ) )
+                    for ( ArtifactMetadata artifact : getArtifacts( session, repoId, ns, project, version ) )
                     {
                         if ( startTime == null || startTime.before( artifact.getWhenGathered() ) )
                         {
@@ -501,7 +502,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( String repoId, String namespace, String projectId,
+    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId, String namespace, String projectId,
                                                       String projectVersion )
         throws MetadataResolutionException
     {
@@ -604,11 +605,6 @@ public class FileMetadataRepository
         }
     }
 
-    @Override
-    public void save()
-    {
-        // it's all instantly persisted
-    }
 
     @Override
     public void close()
@@ -616,11 +612,6 @@ public class FileMetadataRepository
         // nothing additional to close
     }
 
-    @Override
-    public void revert()
-    {
-        log.warn( "Attempted to revert a session, but the file-based repository storage doesn't support it" );
-    }
 
     @Override
     public boolean canObtainAccess( Class<?> aClass )
@@ -629,7 +620,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public <T> T obtainAccess( Class<T> aClass )
+    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
     {
         throw new IllegalArgumentException(
             "Access using " + aClass + " is not supported on the file metadata storage" );
@@ -649,18 +640,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getRepositories()
-    {
-        List<String> repositories = new ArrayList<>();
-        for ( ManagedRepositoryConfiguration managedRepositoryConfiguration : configuration.getConfiguration().getManagedRepositories() )
-        {
-            repositories.add( managedRepositoryConfiguration.getId() );
-        }
-        return repositories;
-    }
-
-    @Override
-    public List<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
+    public List<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
         throws MetadataRepositoryException
     {
         try
@@ -671,9 +651,9 @@ public class FileMetadataRepository
             // of depth to avoid being too broad to be useful (eg. /repository/checksums/a/ab/abcdef1234567)
 
             List<ArtifactMetadata> artifacts = new ArrayList<>();
-            for ( String ns : getRootNamespaces( repositoryId ) )
+            for ( String ns : getRootNamespaces( session, repositoryId ) )
             {
-                getArtifactsByChecksum( artifacts, repositoryId, ns, checksum );
+                getArtifactsByChecksum( session, artifacts, repositoryId, ns, checksum );
             }
             return artifacts;
         }
@@ -684,7 +664,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeNamespace( String repositoryId, String project )
+    public void removeNamespace( RepositorySession session, String repositoryId, String project )
         throws MetadataRepositoryException
     {
         try
@@ -703,7 +683,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
 
@@ -745,7 +725,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeArtifact( String repoId, String namespace, String project, String version, String id )
+    public void removeArtifact( RepositorySession session, String repoId, String namespace, String project, String version, String id )
         throws MetadataRepositoryException
     {
         try
@@ -784,6 +764,8 @@ public class FileMetadataRepository
     /**
      * FIXME implements this !!!!
      *
+     *
+     * @param session
      * @param repositoryId
      * @param namespace
      * @param project
@@ -792,7 +774,7 @@ public class FileMetadataRepository
      * @throws MetadataRepositoryException
      */
     @Override
-    public void removeArtifact( String repositoryId, String namespace, String project, String projectVersion,
+    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
                                 MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
@@ -800,7 +782,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeRepository( String repoId )
+    public void removeRepository( RepositorySession session, String repoId )
         throws MetadataRepositoryException
     {
         try
@@ -814,22 +796,22 @@ public class FileMetadataRepository
         }
     }
 
-    private void getArtifactsByChecksum( List<ArtifactMetadata> artifacts, String repositoryId, String ns,
+    private void getArtifactsByChecksum( RepositorySession session, List<ArtifactMetadata> artifacts, String repositoryId, String ns,
                                          String checksum )
         throws MetadataRepositoryException
     {
         try
         {
-            for ( String namespace : getNamespaces( repositoryId, ns ) )
+            for ( String namespace : getNamespaces( session, repositoryId, ns ) )
             {
-                getArtifactsByChecksum( artifacts, repositoryId, ns + "." + namespace, checksum );
+                getArtifactsByChecksum( session, artifacts, repositoryId, ns + "." + namespace, checksum );
             }
 
-            for ( String project : getProjects( repositoryId, ns ) )
+            for ( String project : getProjects( session, repositoryId, ns ) )
             {
-                for ( String version : getProjectVersions( repositoryId, ns, project ) )
+                for ( String version : getProjectVersions( session, repositoryId, ns, project ) )
                 {
-                    for ( ArtifactMetadata artifact : getArtifacts( repositoryId, ns, project, version ) )
+                    for ( ArtifactMetadata artifact : getArtifacts( session, repositoryId, ns, project, version ) )
                     {
                         if ( checksum.equals( artifact.getMd5() ) || checksum.equals( artifact.getSha1() ) )
                         {
@@ -846,21 +828,21 @@ public class FileMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException( "not yet implemented in File backend" );
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException( "not yet implemented in File backend" );
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
         throw new UnsupportedOperationException( "getArtifactsByProperty not yet implemented in File backend" );
@@ -896,14 +878,14 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void updateArtifact( String repoId, String namespace, String projectId, String projectVersion,
+    public void updateArtifact( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion,
                                 ArtifactMetadata artifact )
     {
         try
         {
             ProjectVersionMetadata metadata = new ProjectVersionMetadata();
             metadata.setId( projectVersion );
-            updateProjectVersion( repoId, namespace, projectId, metadata );
+            updateProjectVersion( session, repoId, namespace, projectId, metadata );
 
             Path directory = getDirectory( repoId ).resolve( namespace + "/" + projectId + "/" + projectVersion );
 
@@ -975,7 +957,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public ProjectMetadata getProject( String repoId, String namespace, String projectId )
+    public ProjectMetadata getProject( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         try
@@ -1003,7 +985,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public ProjectVersionMetadata getProjectVersion( String repoId, String namespace, String projectId,
+    public ProjectVersionMetadata getProjectVersion( RepositorySession session, String repoId, String namespace, String projectId,
                                                      String projectVersion )
         throws MetadataResolutionException
     {
@@ -1185,7 +1167,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getArtifactVersions( String repoId, String namespace, String projectId,
+    public Collection<String> getArtifactVersions( RepositorySession session, String repoId, String namespace, String projectId,
                                                    String projectVersion )
         throws MetadataResolutionException
     {
@@ -1213,7 +1195,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( String repoId, String namespace, String projectId,
+    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repoId, String namespace, String projectId,
                                                                      String projectVersion )
         throws MetadataResolutionException
     {
@@ -1244,14 +1226,14 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getRootNamespaces( String repoId )
+    public Collection<String> getRootNamespaces( RepositorySession session, String repoId )
         throws MetadataResolutionException
     {
-        return getNamespaces( repoId, null );
+        return getNamespaces( session, repoId, null );
     }
 
     @Override
-    public Collection<String> getNamespaces( String repoId, String baseNamespace )
+    public Collection<String> getNamespaces( RepositorySession session, String repoId, String baseNamespace )
         throws MetadataResolutionException
     {
         try
@@ -1294,7 +1276,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjects( String repoId, String namespace )
+    public Collection<String> getProjects( RepositorySession session, String repoId, String namespace )
         throws MetadataResolutionException
     {
         try
@@ -1320,7 +1302,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public Collection<String> getProjectVersions( String repoId, String namespace, String projectId )
+    public Collection<String> getProjectVersions( RepositorySession session, String repoId, String namespace, String projectId )
         throws MetadataResolutionException
     {
         try
@@ -1345,7 +1327,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeProject( String repositoryId, String namespace, String projectId )
+    public void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException
     {
         try
@@ -1360,7 +1342,7 @@ public class FileMetadataRepository
     }
 
     @Override
-    public void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+    public void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataRepositoryException
     {
         try
@@ -1408,15 +1390,15 @@ public class FileMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifacts( String repoId )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repoId )
         throws MetadataRepositoryException
     {
         try
         {
             List<ArtifactMetadata> artifacts = new ArrayList<>();
-            for ( String ns : getRootNamespaces( repoId ) )
+            for ( String ns : getRootNamespaces( session, repoId ) )
             {
-                getArtifacts( artifacts, repoId, ns );
+                getArtifacts( session, artifacts, repoId, ns );
             }
             return artifacts;
         }
@@ -1426,31 +1408,31 @@ public class FileMetadataRepository
         }
     }
 
-    private void getArtifacts( List<ArtifactMetadata> artifacts, String repoId, String ns )
+    private void getArtifacts( RepositorySession session, List<ArtifactMetadata> artifacts, String repoId, String ns )
         throws MetadataResolutionException
     {
-        for ( String namespace : getNamespaces( repoId, ns ) )
+        for ( String namespace : getNamespaces( session, repoId, ns ) )
         {
-            getArtifacts( artifacts, repoId, ns + "." + namespace );
+            getArtifacts( session, artifacts, repoId, ns + "." + namespace );
         }
 
-        for ( String project : getProjects( repoId, ns ) )
+        for ( String project : getProjects( session, repoId, ns ) )
         {
-            for ( String version : getProjectVersions( repoId, ns, project ) )
+            for ( String version : getProjectVersions( session, repoId, ns, project ) )
             {
-                artifacts.addAll( getArtifacts( repoId, ns, project, version ) );
+                artifacts.addAll( getArtifacts( session, repoId, ns, project, version ) );
             }
         }
     }
 
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
     {
         throw new UnsupportedOperationException( "searchArtifacts not yet implemented in File backend" );
     }
 
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean exact )
     {
         throw new UnsupportedOperationException( "searchArtifacts not yet implemented in File backend" );
     }
diff --git a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java
index e471cc6..e61a845 100644
--- a/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java
+++ b/archiva-modules/plugins/metadata-store-file/src/main/java/org/apache/archiva/metadata/repository/file/FileRepositorySessionFactory.java
@@ -23,6 +23,7 @@ import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.metadata.model.MetadataFacetFactory;
 import org.apache.archiva.metadata.repository.AbstractRepositorySessionFactory;
 import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
 import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.RepositorySessionFactory;
@@ -76,7 +77,7 @@ public class FileRepositorySessionFactory extends AbstractRepositorySessionFacto
     }
 
     @Override
-    public RepositorySession createSession()
+    public RepositorySession createSession() throws MetadataRepositoryException
     {
         MetadataRepository metadataRepository = new FileMetadataRepository( metadataFacetFactories, configuration );
 
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
index 1231a14..a6ac55f 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepository.java
@@ -23,6 +23,7 @@ import com.google.common.collect.ImmutableMap;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
 import org.apache.archiva.metadata.model.CiManagement;
 import org.apache.archiva.metadata.model.Dependency;
+import org.apache.archiva.metadata.model.FacetedMetadata;
 import org.apache.archiva.metadata.model.IssueManagement;
 import org.apache.archiva.metadata.model.License;
 import org.apache.archiva.metadata.model.MailingList;
@@ -37,6 +38,7 @@ import org.apache.archiva.metadata.model.maven2.MavenArtifactFacet;
 import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatistics;
 import org.apache.archiva.metadata.repository.stats.model.RepositoryStatisticsProvider;
 import org.apache.commons.lang.StringUtils;
@@ -44,10 +46,8 @@ import org.apache.jackrabbit.commons.JcrUtils;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
-import javax.jcr.InvalidItemStateException;
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
-import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
 import javax.jcr.Repository;
@@ -94,10 +94,26 @@ public class JcrMetadataRepository
     static final String PROJECT_VERSION_NODE_TYPE = "archiva:projectVersion";
 
     static final String ARTIFACT_NODE_TYPE = "archiva:artifact";
+    private static final String QUERY_ARTIFACT_1 = "SELECT * FROM [" + ARTIFACT_NODE_TYPE + "] AS artifact WHERE ISDESCENDANTNODE(artifact,'/";
 
     static final String FACET_NODE_TYPE = "archiva:facet";
 
+    static final String QUERY_ARTIFACTS_BY_PROJECT_VERSION_1 = "SELECT * FROM [" + PROJECT_VERSION_NODE_TYPE + "] AS projectVersion INNER JOIN [" + ARTIFACT_NODE_TYPE
+        + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) INNER JOIN [" + FACET_NODE_TYPE
+        + "] AS facet ON ISCHILDNODE(facet, projectVersion) WHERE ([facet].[";
+    static final String QUERY_ARTIFACTS_BY_PROJECT_VERSION_2= "] = $value)";
+
+    static final String QUERY_ARTIFACTS_BY_METADATA_1 = "SELECT * FROM [" + ARTIFACT_NODE_TYPE + "] AS artifact INNER JOIN [" + FACET_NODE_TYPE
+        + "] AS facet ON ISCHILDNODE(facet, artifact) WHERE ([facet].[";
+    static final String QUERY_ARTIFACTS_BY_METADATA_2 = "] = $value)";
+
+    static final String QUERY_ARTIFACTS_BY_PROPERTY_1 = "SELECT * FROM [" + PROJECT_VERSION_NODE_TYPE + "] AS projectVersion INNER JOIN [" + ARTIFACT_NODE_TYPE
+           + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) WHERE ([projectVersion].[";
+    static final String QUERY_ARTIFACTS_BY_PROPERTY_2 = "] = $value)";
+
+
     private static final String DEPENDENCY_NODE_TYPE = "archiva:dependency";
+    private static final String QUERY_ARTIFACT_2 = "')";
 
     private final Map<String, MetadataFacetFactory> metadataFacetFactories;
 
@@ -105,8 +121,6 @@ public class JcrMetadataRepository
 
     private Repository repository;
 
-    private Session jcrSession;
-
     public JcrMetadataRepository( Map<String, MetadataFacetFactory> metadataFacetFactories, Repository repository )
         throws RepositoryException
     {
@@ -115,7 +129,7 @@ public class JcrMetadataRepository
     }
 
 
-    public static void initialize( Session session )
+    public static void initializeNodeTypes( Session session )
         throws RepositoryException
     {
 
@@ -147,34 +161,41 @@ public class JcrMetadataRepository
     private static void registerMixinNodeType( NodeTypeManager nodeTypeManager, String name )
         throws RepositoryException
     {
-        NodeTypeTemplate nodeType = nodeTypeManager.createNodeTypeTemplate();
-        nodeType.setMixin( true );
-        nodeType.setName( name );
-
         // for now just don't re-create - but in future if we change the definition, make sure to remove first as an
         // upgrade path
         if ( !nodeTypeManager.hasNodeType( name ) )
         {
+            NodeTypeTemplate nodeType = nodeTypeManager.createNodeTypeTemplate();
+            nodeType.setMixin( true );
+            nodeType.setName( name );
             nodeTypeManager.registerNodeType( nodeType, false );
         }
     }
 
+    private Session getSession(RepositorySession repositorySession) throws MetadataRepositoryException {
+        if (repositorySession instanceof JcrSession) {
+            return ( (JcrSession) repositorySession ).getJcrSession();
+        } else {
+            throw new MetadataRepositoryException( "The given session object is not a JcrSession instance: " + repositorySession.getClass( ).getName( ) );
+        }
+    }
 
     @Override
-    public void updateProject( String repositoryId, ProjectMetadata project )
+    public void updateProject( RepositorySession session, String repositoryId, ProjectMetadata project )
         throws MetadataRepositoryException
     {
-        updateProject( repositoryId, project.getNamespace(), project.getId() );
+        final Session jcrSession = getSession( session );
+        updateProject( jcrSession, repositoryId, project.getNamespace(), project.getId() );
     }
 
-    private void updateProject( String repositoryId, String namespace, String projectId )
+    private void updateProject( Session jcrSession, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException
     {
-        updateNamespace( repositoryId, namespace );
+        updateNamespace( jcrSession , repositoryId, namespace );
 
         try
         {
-            getOrAddProjectNode( repositoryId, namespace, projectId );
+            getOrAddProjectNode( jcrSession, repositoryId, namespace, projectId );
         }
         catch ( RepositoryException e )
         {
@@ -183,16 +204,17 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void updateArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
+    public void updateArtifact( RepositorySession session, String repositoryId, String namespace, String projectId, String projectVersion,
                                 ArtifactMetadata artifactMeta )
         throws MetadataRepositoryException
     {
-        updateNamespace( repositoryId, namespace );
+        final Session jcrSession = getSession( session );
+        updateNamespace( session, repositoryId, namespace );
 
         try
         {
             Node node =
-                getOrAddArtifactNode( repositoryId, namespace, projectId, projectVersion, artifactMeta.getId() );
+                getOrAddArtifactNode( jcrSession, repositoryId, namespace, projectId, projectVersion, artifactMeta.getId() );
 
             Calendar cal = Calendar.getInstance();
             cal.setTime( artifactMeta.getFileLastModified() );
@@ -240,16 +262,17 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void updateProjectVersion( String repositoryId, String namespace, String projectId,
+    public void updateProjectVersion( RepositorySession session, String repositoryId, String namespace, String projectId,
                                       ProjectVersionMetadata versionMetadata )
         throws MetadataRepositoryException
     {
-        updateProject( repositoryId, namespace, projectId );
+        final Session jcrSession = getSession( session );
+        updateProject( jcrSession, repositoryId, namespace, projectId );
 
         try
         {
             Node versionNode =
-                getOrAddProjectVersionNode( repositoryId, namespace, projectId, versionMetadata.getId() );
+                getOrAddProjectVersionNode( jcrSession, repositoryId, namespace, projectId, versionMetadata.getId() );
 
             versionNode.setProperty( "name", versionMetadata.getName() );
             versionNode.setProperty( "description", versionMetadata.getDescription() );
@@ -370,13 +393,11 @@ public class JcrMetadataRepository
         }
     }
 
-    @Override
-    public void updateNamespace( String repositoryId, String namespace )
-        throws MetadataRepositoryException
+    private void updateNamespace(Session jcrSession, String repositoryId, String namespace) throws MetadataRepositoryException
     {
         try
         {
-            Node node = getOrAddNamespaceNode( repositoryId, namespace );
+            Node node = getOrAddNamespaceNode( jcrSession, repositoryId, namespace );
             node.setProperty( "namespace", namespace );
         }
         catch ( RepositoryException e )
@@ -386,12 +407,20 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeProject( String repositoryId, String namespace, String projectId )
+    public void updateNamespace( RepositorySession session, String repositoryId, String namespace )
+        throws MetadataRepositoryException
+    {
+        updateNamespace( getSession(session), repositoryId, namespace );
+    }
+
+    @Override
+    public void removeProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String namespacePath = getNamespacePath( repositoryId, namespace );
 
             if ( root.hasNode( namespacePath ) )
@@ -417,12 +446,13 @@ public class JcrMetadataRepository
 
 
     @Override
-    public boolean hasMetadataFacet( String repositoryId, String facetId )
+    public boolean hasMetadataFacet( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node node = getJcrSession().getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
+            Node node = jcrSession.getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
             return node.getNodes().hasNext();
         }
         catch ( PathNotFoundException e )
@@ -437,16 +467,17 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public List<String> getMetadataFacets( String repositoryId, String facetId )
+    public List<String> getMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         List<String> facets = new ArrayList<>();
 
         try
         {
             // no need to construct node-by-node here, as we'll find in the next instance, the facet names have / and
             // are paths themselves
-            Node node = getJcrSession().getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
+            Node node = jcrSession.getRootNode().getNode( getFacetPath( repositoryId, facetId ) );
 
             // TODO: this is a bit awkward. Might be better to review the purpose of this function - why is the list of
             //   paths helpful?
@@ -482,13 +513,14 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public MetadataFacet getMetadataFacet( String repositoryId, String facetId, String name )
+    public MetadataFacet getMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         MetadataFacet metadataFacet = null;
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             Node node = root.getNode( getFacetPath( repositoryId, facetId, name ) );
 
             if ( metadataFacetFactories == null )
@@ -524,12 +556,13 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void addMetadataFacet( String repositoryId, MetadataFacet metadataFacet )
+    public void addMetadataFacet( RepositorySession session, String repositoryId, MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node repo = getOrAddRepositoryNode( repositoryId );
+            Node repo = getOrAddRepositoryNode( jcrSession, repositoryId );
             Node facets = JcrUtils.getOrAddNode( repo, "facets" );
 
             String id = metadataFacet.getFacetId();
@@ -549,12 +582,13 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeNamespace( String repositoryId, String projectId )
+    public void removeNamespace( RepositorySession session, String repositoryId, String projectId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getNamespacePath( repositoryId, projectId );
             if ( root.hasNode( path ) )
             {
@@ -572,12 +606,13 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacets( String repositoryId, String facetId )
+    public void removeMetadataFacets( RepositorySession session, String repositoryId, String facetId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getFacetPath( repositoryId, facetId );
             if ( root.hasNode( path ) )
             {
@@ -591,12 +626,13 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeMetadataFacet( String repositoryId, String facetId, String name )
+    public void removeMetadataFacet( RepositorySession session, String repositoryId, String facetId, String name )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getFacetPath( repositoryId, facetId, name );
             if ( root.hasNode( path ) )
             {
@@ -618,9 +654,11 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByDateRange( String repoId, Date startTime, Date endTime )
+    public List<ArtifactMetadata> getArtifactsByDateRange( RepositorySession session, String repoId, Date startTime, Date endTime )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
+
         List<ArtifactMetadata> artifacts;
 
         String q = getArtifactQuery( repoId );
@@ -636,8 +674,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
-            ValueFactory valueFactory = getJcrSession().getValueFactory();
+            Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            ValueFactory valueFactory = jcrSession.getValueFactory();
             if ( startTime != null )
             {
                 query.bindValue( "start", valueFactory.createValue( createCalendar( startTime ) ) );
@@ -661,51 +699,20 @@ public class JcrMetadataRepository
         return artifacts;
     }
 
-    @Override
-    public Collection<String> getRepositories()
-        throws MetadataRepositoryException
-    {
-        List<String> repositories;
-
-        try
-        {
-            Node root = getJcrSession().getRootNode();
-            if ( root.hasNode( "repositories" ) )
-            {
-                Node node = root.getNode( "repositories" );
-
-                repositories = new ArrayList<>();
-                NodeIterator i = node.getNodes();
-                while ( i.hasNext() )
-                {
-                    Node n = i.nextNode();
-                    repositories.add( n.getName() );
-                }
-            }
-            else
-            {
-                repositories = Collections.emptyList();
-            }
-        }
-        catch ( RepositoryException e )
-        {
-            throw new MetadataRepositoryException( e.getMessage(), e );
-        }
-        return repositories;
-    }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByChecksum( String repositoryId, String checksum )
+    public List<ArtifactMetadata> getArtifactsByChecksum( RepositorySession session, String repositoryId, String checksum )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         List<ArtifactMetadata> artifacts;
 
         String q = getArtifactQuery( repositoryId ) + " AND ([sha1] = $checksum OR [md5] = $checksum)";
 
         try
         {
-            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
-            ValueFactory valueFactory = getJcrSession().getValueFactory();
+            Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            ValueFactory valueFactory = jcrSession.getValueFactory();
             query.bindValue( "checksum", valueFactory.createValue( checksum ) );
             QueryResult result = query.execute();
 
@@ -722,7 +729,7 @@ public class JcrMetadataRepository
         return artifacts;
     }
 
-    private List<ArtifactMetadata> runJcrQuery( String repositoryId, String q, Map<String, String> bindings )
+    private List<ArtifactMetadata> runJcrQuery( Session jcrSession, String repositoryId, String q, Map<String, String> bindings )
         throws MetadataRepositoryException
     {
         List<ArtifactMetadata> artifacts;
@@ -735,8 +742,8 @@ public class JcrMetadataRepository
 
         try
         {
-            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
-            ValueFactory valueFactory = getJcrSession().getValueFactory();
+            Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            ValueFactory valueFactory = jcrSession.getValueFactory();
             for ( Entry<String, String> entry : bindings.entrySet() )
             {
                 query.bindValue( entry.getKey(), valueFactory.createValue( entry.getValue() ) );
@@ -768,49 +775,43 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProjectVersionMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
-        String q =
-            "SELECT * FROM [" + PROJECT_VERSION_NODE_TYPE + "] AS projectVersion INNER JOIN [" + ARTIFACT_NODE_TYPE
-                + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) INNER JOIN [" + FACET_NODE_TYPE
-                + "] AS facet ON ISCHILDNODE(facet, projectVersion) WHERE ([facet].[" + key + "] = $value)";
-
-        return runJcrQuery( repositoryId, q, ImmutableMap.of( "value", value ) );
+        final Session jcrSession = getSession( session );
+        final String q = new StringBuilder( QUERY_ARTIFACTS_BY_PROJECT_VERSION_1 ).append( key ).append( QUERY_ARTIFACTS_BY_PROJECT_VERSION_2 ).toString();
+        return runJcrQuery( jcrSession, repositoryId, q, ImmutableMap.of( "value", value ) );
     }
 
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByMetadata( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByMetadata( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
-        String q = "SELECT * FROM [" + ARTIFACT_NODE_TYPE + "] AS artifact INNER JOIN [" + FACET_NODE_TYPE
-            + "] AS facet ON ISCHILDNODE(facet, artifact) WHERE ([facet].[" + key + "] = $value)";
-
-        return runJcrQuery( repositoryId, q, ImmutableMap.of( "value", value ) );
+        final Session jcrSession = getSession( session );
+        final String q = new StringBuilder( QUERY_ARTIFACTS_BY_METADATA_1 ).append( key ).append( QUERY_ARTIFACTS_BY_METADATA_2 ).toString( );
+        return runJcrQuery( jcrSession, repositoryId, q, ImmutableMap.of( "value", value ) );
     }
 
 
     @Override
-    public List<ArtifactMetadata> getArtifactsByProperty( String key, String value, String repositoryId )
+    public List<ArtifactMetadata> getArtifactsByProperty( RepositorySession session, String key, String value, String repositoryId )
         throws MetadataRepositoryException
     {
-        String q =
-            "SELECT * FROM [" + PROJECT_VERSION_NODE_TYPE + "] AS projectVersion INNER JOIN [" + ARTIFACT_NODE_TYPE
-                + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) WHERE ([projectVersion].[" + key
-                + "] = $value)";
-
-        return runJcrQuery( repositoryId, q, ImmutableMap.of( "value", value ) );
+        final Session jcrSession = getSession( session );
+        final String q = new StringBuilder( QUERY_ARTIFACTS_BY_PROPERTY_1 ).append( key ).append( QUERY_ARTIFACTS_BY_PROPERTY_2 ).toString();
+        return runJcrQuery( jcrSession, repositoryId, q, ImmutableMap.of( "value", value ) );
     }
 
 
     @Override
-    public void removeRepository( String repositoryId )
+    public void removeRepository( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getRepositoryPath( repositoryId );
             if ( root.hasNode( path ) )
             {
@@ -824,16 +825,17 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public List<ArtifactMetadata> getArtifacts( String repositoryId )
+    public List<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         List<ArtifactMetadata> artifacts;
 
         String q = getArtifactQuery( repositoryId );
 
         try
         {
-            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
             QueryResult result = query.execute();
 
             artifacts = new ArrayList<>();
@@ -854,19 +856,27 @@ public class JcrMetadataRepository
 
     private static String getArtifactQuery( String repositoryId )
     {
-        return "SELECT * FROM [" + ARTIFACT_NODE_TYPE + "] AS artifact WHERE ISDESCENDANTNODE(artifact,'/"
-            + getRepositoryContentPath( repositoryId ) + "')";
+        return new StringBuilder(QUERY_ARTIFACT_1).append(getRepositoryContentPath( repositoryId )).append(QUERY_ARTIFACT_2).toString();
     }
 
     @Override
-    public ProjectMetadata getProject( String repositoryId, String namespace, String projectId )
+    public ProjectMetadata getProject( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataResolutionException
     {
+        final Session jcrSession;
+        try
+        {
+            jcrSession = getSession( session );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage() );
+        }
         ProjectMetadata metadata = null;
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
 
             // basically just checking it exists
             String path = getProjectPath( repositoryId, namespace, projectId );
@@ -886,15 +896,24 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public ProjectVersionMetadata getProjectVersion( String repositoryId, String namespace, String projectId,
+    public ProjectVersionMetadata getProjectVersion( RepositorySession session, String repositoryId, String namespace, String projectId,
                                                      String projectVersion )
         throws MetadataResolutionException
     {
+        final Session jcrSession;
+        try
+        {
+            jcrSession = getSession( session );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage() );
+        }
         ProjectVersionMetadata versionMetadata;
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
 
             String path = getProjectVersionPath( repositoryId, namespace, projectId, projectVersion );
             if ( !root.hasNode( path ) )
@@ -1028,52 +1047,66 @@ public class JcrMetadataRepository
                 }
             }
 
-            for ( Node n : JcrUtils.getChildNodes( node ) )
+            retrieveFacetProperties( versionMetadata, node );
+        }
+        catch ( RepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage(), e );
+        }
+
+        return versionMetadata;
+    }
+
+    private void retrieveFacetProperties( FacetedMetadata metadata, Node node ) throws RepositoryException
+    {
+        for ( Node n : JcrUtils.getChildNodes( node ) )
+        {
+            if ( n.isNodeType( FACET_NODE_TYPE ) )
             {
-                if ( n.isNodeType( FACET_NODE_TYPE ) )
+                String name = n.getName();
+                MetadataFacetFactory factory = metadataFacetFactories.get( name );
+                if ( factory == null )
                 {
-                    String name = n.getName();
-                    MetadataFacetFactory factory = metadataFacetFactories.get( name );
-                    if ( factory == null )
-                    {
-                        log.error( "Attempted to load unknown project version metadata facet: {}", name );
-                    }
-                    else
+                    log.error( "Attempted to load unknown project version metadata facet: {}", name );
+                }
+                else
+                {
+                    MetadataFacet facet = factory.createMetadataFacet();
+                    Map<String, String> map = new HashMap<>();
+                    for ( Property property : JcrUtils.getProperties( n ) )
                     {
-                        MetadataFacet facet = factory.createMetadataFacet();
-                        Map<String, String> map = new HashMap<>();
-                        for ( Property property : JcrUtils.getProperties( n ) )
+                        String p = property.getName();
+                        if ( !p.startsWith( "jcr:" ) )
                         {
-                            String p = property.getName();
-                            if ( !p.startsWith( "jcr:" ) )
-                            {
-                                map.put( p, property.getString() );
-                            }
+                            map.put( p, property.getString() );
                         }
-                        facet.fromProperties( map );
-                        versionMetadata.addFacet( facet );
                     }
+                    facet.fromProperties( map );
+                    metadata.addFacet( facet );
                 }
             }
         }
-        catch ( RepositoryException e )
-        {
-            throw new MetadataResolutionException( e.getMessage(), e );
-        }
-
-        return versionMetadata;
     }
 
     @Override
-    public Collection<String> getArtifactVersions( String repositoryId, String namespace, String projectId,
+    public Collection<String> getArtifactVersions( RepositorySession session, String repositoryId, String namespace, String projectId,
                                                    String projectVersion )
         throws MetadataResolutionException
     {
+        final Session jcrSession;
+        try
+        {
+            jcrSession = getSession( session );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage() );
+        }
         Set<String> versions = new LinkedHashSet<String>();
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
 
             Node node = root.getNode( getProjectVersionPath( repositoryId, namespace, projectId, projectVersion ) );
 
@@ -1095,10 +1128,19 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<ProjectVersionReference> getProjectReferences( String repositoryId, String namespace,
+    public Collection<ProjectVersionReference> getProjectReferences( RepositorySession session, String repositoryId, String namespace,
                                                                      String projectId, String projectVersion )
         throws MetadataResolutionException
     {
+        final Session jcrSession;
+        try
+        {
+            jcrSession = getSession( session );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage() );
+        }
 
         List<ProjectVersionReference> references = new ArrayList<>();
 
@@ -1111,7 +1153,7 @@ public class JcrMetadataRepository
         }
         try
         {
-            Query query = getJcrSession().getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
+            Query query = jcrSession.getWorkspace().getQueryManager().createQuery( q, Query.JCR_SQL2 );
             QueryResult result = query.execute();
 
             for ( Node n : JcrUtils.getNodes( result ) )
@@ -1144,47 +1186,68 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<String> getRootNamespaces( String repositoryId )
+    public Collection<String> getRootNamespaces( RepositorySession session, String repositoryId )
         throws MetadataResolutionException
     {
-        return getNamespaces( repositoryId, null );
+        return getNamespaces(session , repositoryId, null );
     }
 
     @Override
-    public Collection<String> getNamespaces( String repositoryId, String baseNamespace )
+    public Collection<String> getNamespaces( RepositorySession session, String repositoryId, String baseNamespace )
         throws MetadataResolutionException
     {
         String path = baseNamespace != null
             ? getNamespacePath( repositoryId, baseNamespace )
             : getRepositoryContentPath( repositoryId );
 
-        return getNodeNames( path, NAMESPACE_NODE_TYPE );
+        try
+        {
+            return getNodeNames( getSession(session), path, NAMESPACE_NODE_TYPE );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage( ) );
+        }
     }
 
     @Override
-    public Collection<String> getProjects( String repositoryId, String namespace )
+    public Collection<String> getProjects( RepositorySession session, String repositoryId, String namespace )
         throws MetadataResolutionException
     {
-        return getNodeNames( getNamespacePath( repositoryId, namespace ), PROJECT_NODE_TYPE );
+        try
+        {
+            return getNodeNames( getSession(session), getNamespacePath( repositoryId, namespace ), PROJECT_NODE_TYPE );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage( ) );
+        }
     }
 
     @Override
-    public Collection<String> getProjectVersions( String repositoryId, String namespace, String projectId )
+    public Collection<String> getProjectVersions( RepositorySession session, String repositoryId, String namespace, String projectId )
         throws MetadataResolutionException
     {
-        return getNodeNames( getProjectPath( repositoryId, namespace, projectId ), PROJECT_VERSION_NODE_TYPE );
+        try
+        {
+            return getNodeNames( getSession(session), getProjectPath( repositoryId, namespace, projectId ), PROJECT_VERSION_NODE_TYPE );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage( ) );
+        }
     }
 
     @Override
-    public void removeArtifact( ArtifactMetadata artifactMetadata, String baseVersion )
+    public void removeArtifact( RepositorySession session, ArtifactMetadata artifactMetadata, String baseVersion )
         throws MetadataRepositoryException
     {
-
+        final Session jcrSession = getSession( session );
         String repositoryId = artifactMetadata.getRepositoryId();
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path =
                 getProjectVersionPath( repositoryId, artifactMetadata.getNamespace(), artifactMetadata.getProject(),
                                        baseVersion );
@@ -1220,14 +1283,15 @@ public class JcrMetadataRepository
 
 
     @Override
-    public void removeProjectVersion( String repoId, String namespace, String projectId, String projectVersion )
+    public void removeProjectVersion( RepositorySession session, String repoId, String namespace, String projectId, String projectVersion )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
 
             String path = getProjectPath( repoId, namespace, projectId );
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
 
             Node nodeAtPath = root.getNode( path );
 
@@ -1247,13 +1311,14 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeArtifact( String repositoryId, String namespace, String projectId, String projectVersion,
+    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String projectId, String projectVersion,
                                 String id )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getArtifactPath( repositoryId, namespace, projectId, projectVersion, id );
             if ( root.hasNode( path ) )
             {
@@ -1282,13 +1347,14 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public void removeArtifact( String repositoryId, String namespace, String project, String projectVersion,
+    public void removeArtifact( RepositorySession session, String repositoryId, String namespace, String project, String projectVersion,
                                 MetadataFacet metadataFacet )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getProjectVersionPath( repositoryId, namespace, project, projectVersion );
 
             if ( root.hasNode( path ) )
@@ -1317,15 +1383,24 @@ public class JcrMetadataRepository
     }
 
     @Override
-    public Collection<ArtifactMetadata> getArtifacts( String repositoryId, String namespace, String projectId,
+    public Collection<ArtifactMetadata> getArtifacts( RepositorySession session, String repositoryId, String namespace, String projectId,
                                                       String projectVersion )
         throws MetadataResolutionException
     {
+        final Session jcrSession;
+        try
+        {
+            jcrSession = getSession( session );
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            throw new MetadataResolutionException( e.getMessage( ) );
+        }
         List<ArtifactMetadata> artifacts = new ArrayList<>();
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
             String path = getProjectVersionPath( repositoryId, namespace, projectId, projectVersion );
 
             if ( root.hasNode( path ) )
@@ -1349,36 +1424,6 @@ public class JcrMetadataRepository
         return artifacts;
     }
 
-    @Override
-    public void save()
-    {
-        try
-        {
-            getJcrSession().save();
-        }
-        catch ( InvalidItemStateException e )
-        {
-            // olamy this might happen when deleting a repo while is under scanning
-            log.warn( "skip InvalidItemStateException:{}", e.getMessage(), e );
-        }
-        catch ( RepositoryException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-    }
-
-    @Override
-    public void revert()
-    {
-        try
-        {
-            getJcrSession().refresh( false );
-        }
-        catch ( RepositoryException e )
-        {
-            throw new RuntimeException( e.getMessage(), e );
-        }
-    }
 
     @Override
     public boolean canObtainAccess( Class<?> aClass )
@@ -1388,20 +1433,12 @@ public class JcrMetadataRepository
 
     @SuppressWarnings( "unchecked" )
     @Override
-    public <T> T obtainAccess( Class<T> aClass )
+    public <T> T obtainAccess( RepositorySession session, Class<T> aClass )
         throws MetadataRepositoryException
     {
         if ( aClass == Session.class )
         {
-            try
-            {
-                return (T) getJcrSession();
-            }
-            catch ( RepositoryException e )
-            {
-                log.error( e.getMessage(), e );
-                throw new MetadataRepositoryException( e.getMessage(), e );
-            }
+            return (T) getSession( session );
         }
         throw new IllegalArgumentException(
             "Access using " + aClass + " is not supported on the JCR metadata storage" );
@@ -1411,10 +1448,6 @@ public class JcrMetadataRepository
     public void close()
         throws MetadataRepositoryException
     {
-        if ( jcrSession != null && jcrSession.isLive() )
-        {
-            jcrSession.logout();
-        }
     }
 
 
@@ -1422,16 +1455,17 @@ public class JcrMetadataRepository
      * Exact is ignored as we can't do exact search in any property, we need a key
      */
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String text, String repositoryId, boolean exact )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String text, boolean exact )
         throws MetadataRepositoryException
     {
-        return searchArtifacts( null, text, repositoryId, exact );
+        return searchArtifacts( null, repositoryId, text, exact );
     }
 
     @Override
-    public List<ArtifactMetadata> searchArtifacts( String key, String text, String repositoryId, boolean e )
+    public List<ArtifactMetadata> searchArtifacts( RepositorySession session, String repositoryId, String key, String text, boolean e )
         throws MetadataRepositoryException
     {
+        final Session jcrSession = getSession( session );
         String theKey = key == null ? "*" : "[" + key + "]";
         String projectVersionCondition =
             e ? "(projectVersion." + theKey + " = $value)" : "contains([projectVersion]." + theKey + ", $value)";
@@ -1441,7 +1475,7 @@ public class JcrMetadataRepository
                 + "] AS artifact ON ISCHILDNODE(artifact, projectVersion) LEFT OUTER JOIN [" + FACET_NODE_TYPE
                 + "] AS facet ON ISCHILDNODE(facet, projectVersion) WHERE (" + projectVersionCondition + " OR "
                 + facetCondition + ")";
-        return runJcrQuery( repositoryId, q, ImmutableMap.of( "value", text ) );
+        return runJcrQuery( jcrSession, repositoryId, q, ImmutableMap.of( "value", text ) );
     }
 
     private ArtifactMetadata getArtifactFromNode( String repositoryId, Node artifactNode )
@@ -1489,33 +1523,7 @@ public class JcrMetadataRepository
             artifact.setSha1( artifactNode.getProperty( "sha1" ).getString() );
         }
 
-        for ( Node n : JcrUtils.getChildNodes( artifactNode ) )
-        {
-            if ( n.isNodeType( FACET_NODE_TYPE ) )
-            {
-                String name = n.getName();
-                MetadataFacetFactory factory = metadataFacetFactories.get( name );
-                if ( factory == null )
-                {
-                    log.error( "Attempted to load unknown project version metadata facet: {}", name );
-                }
-                else
-                {
-                    MetadataFacet facet = factory.createMetadataFacet();
-                    Map<String, String> map = new HashMap<>();
-                    for ( Property p : JcrUtils.getProperties( n ) )
-                    {
-                        String property = p.getName();
-                        if ( !property.startsWith( "jcr:" ) )
-                        {
-                            map.put( property, p.getString() );
-                        }
-                    }
-                    facet.fromProperties( map );
-                    artifact.addFacet( facet );
-                }
-            }
-        }
+        retrieveFacetProperties( artifact, artifactNode );
         return artifact;
     }
 
@@ -1525,14 +1533,15 @@ public class JcrMetadataRepository
         return node.hasProperty( name ) ? node.getProperty( name ).getString() : null;
     }
 
-    private Collection<String> getNodeNames( String path, String nodeType )
+    private Collection<String> getNodeNames( Session jcrSession, String path, String nodeType )
         throws MetadataResolutionException
     {
+
         List<String> names = new ArrayList<>();
 
         try
         {
-            Node root = getJcrSession().getRootNode();
+            Node root = jcrSession.getRootNode();
 
             Node nodeAtPath = root.getNode( path );
 
@@ -1620,55 +1629,55 @@ public class JcrMetadataRepository
         return getFacetPath( repositoryId, facetId ) + "/" + name;
     }
 
-    private Node getOrAddRepositoryNode( String repositoryId )
+    private Node getOrAddRepositoryNode( Session jcrSession, String repositoryId )
         throws RepositoryException
     {
         log.debug( "getOrAddRepositoryNode " + repositoryId );
-        Node root = getJcrSession().getRootNode();
+        Node root = jcrSession.getRootNode();
         Node node = JcrUtils.getOrAddNode( root, "repositories" );
         log.debug( "Repositories " + node );
         node = JcrUtils.getOrAddNode( node, repositoryId );
         return node;
     }
 
-    private Node getOrAddRepositoryContentNode( String repositoryId )
+    private Node getOrAddRepositoryContentNode( Session jcrSession, String repositoryId )
         throws RepositoryException
     {
-        Node node = getOrAddRepositoryNode( repositoryId );
+        Node node = getOrAddRepositoryNode( jcrSession, repositoryId );
         return JcrUtils.getOrAddNode( node, "content" );
     }
 
-    private Node getOrAddNamespaceNode( String repositoryId, String namespace )
+    private Node getOrAddNamespaceNode( Session jcrSession, String repositoryId, String namespace )
         throws RepositoryException
     {
-        Node repo = getOrAddRepositoryContentNode( repositoryId );
+        Node repo = getOrAddRepositoryContentNode( jcrSession, repositoryId );
         return getOrAddNodeByPath( repo, namespace.replace( '.', '/' ), NAMESPACE_NODE_TYPE );
     }
 
-    private Node getOrAddProjectNode( String repositoryId, String namespace, String projectId )
+    private Node getOrAddProjectNode( Session jcrSession, String repositoryId, String namespace, String projectId )
         throws RepositoryException
     {
-        Node namespaceNode = getOrAddNamespaceNode( repositoryId, namespace );
+        Node namespaceNode = getOrAddNamespaceNode( jcrSession, repositoryId, namespace );
         Node node = JcrUtils.getOrAddNode( namespaceNode, projectId );
         node.addMixin( PROJECT_NODE_TYPE );
         return node;
     }
 
-    private Node getOrAddProjectVersionNode( String repositoryId, String namespace, String projectId,
+    private Node getOrAddProjectVersionNode( Session jcrSession, String repositoryId, String namespace, String projectId,
                                              String projectVersion )
         throws RepositoryException
     {
-        Node projectNode = getOrAddProjectNode( repositoryId, namespace, projectId );
+        Node projectNode = getOrAddProjectNode( jcrSession, repositoryId, namespace, projectId );
         Node node = JcrUtils.getOrAddNode( projectNode, projectVersion );
         node.addMixin( PROJECT_VERSION_NODE_TYPE );
         return node;
     }
 
-    private Node getOrAddArtifactNode( String repositoryId, String namespace, String projectId, String projectVersion,
+    private Node getOrAddArtifactNode( Session jcrSession, String repositoryId, String namespace, String projectId, String projectVersion,
                                        String id )
         throws RepositoryException
     {
-        Node versionNode = getOrAddProjectVersionNode( repositoryId, namespace, projectId, projectVersion );
+        Node versionNode = getOrAddProjectVersionNode( jcrSession, repositoryId, namespace, projectId, projectVersion );
         Node node = JcrUtils.getOrAddNode( versionNode, id );
         node.addMixin( ARTIFACT_NODE_TYPE );
         return node;
@@ -1696,18 +1705,9 @@ public class JcrMetadataRepository
         return null;
     }
 
-    public Session getJcrSession()
-        throws RepositoryException
-    {
-        if ( this.jcrSession == null || !this.jcrSession.isLive() )
-        {
-            jcrSession = repository.login( new SimpleCredentials( "admin", "admin".toCharArray() ) );
-        }
-        return this.jcrSession;
-    }
 
     @Override
-    public void populateStatistics( MetadataRepository repository, String repositoryId,
+    public void populateStatistics( RepositorySession repositorySession, MetadataRepository repository, String repositoryId,
                                     RepositoryStatistics repositoryStatistics )
         throws MetadataRepositoryException
     {
@@ -1716,7 +1716,7 @@ public class JcrMetadataRepository
             throw new MetadataRepositoryException(
                 "The statistics population is only possible for JcrMetdataRepository implementations" );
         }
-        Session session = (Session) repository.obtainAccess( Session.class );
+        Session session = getSession( repositorySession );
         // TODO: these may be best as running totals, maintained by observations on the properties in JCR
 
         try
@@ -1785,4 +1785,9 @@ public class JcrMetadataRepository
         }
     }
 
+
+    public Session login() throws RepositoryException
+    {
+        return repository.login(new SimpleCredentials( "admin", "admin".toCharArray() ) );
+    }
 }
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java
index 53a7d61..7549229 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrRepositorySessionFactory.java
@@ -21,7 +21,6 @@ package org.apache.archiva.metadata.repository.jcr;
 
 import org.apache.archiva.metadata.model.MetadataFacetFactory;
 import org.apache.archiva.metadata.repository.AbstractRepositorySessionFactory;
-import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
 import org.apache.archiva.metadata.repository.RepositorySession;
@@ -70,19 +69,14 @@ public class JcrRepositorySessionFactory extends AbstractRepositorySessionFactor
 
     private RepositoryFactory repositoryFactory;
 
+    private JcrMetadataRepository jcrMetadataRepository;
+
     @Override
-    public RepositorySession createSession()
+    public RepositorySession createSession() throws MetadataRepositoryException
     {
         try
         {
-            // FIXME: is this the right separation? or should a JCR session object contain the JCR session information?
-            //  such a change might allow us to avoid creating two objects for each request. It would also clear up
-            //  the ambiguities in the API where session & repository are the inverse of JCR; and the resolver is
-            //  retrieved from the session but must have it passed in. These should be reviewed before finalising the
-            //  API.
-            MetadataRepository metadataRepository = new JcrMetadataRepository( metadataFacetFactories, repository );
-
-            return new RepositorySession( metadataRepository, getMetadataResolver() );
+            return new JcrSession( jcrMetadataRepository, getMetadataResolver() );
         }
         catch ( RepositoryException e )
         {
@@ -127,7 +121,6 @@ public class JcrRepositorySessionFactory extends AbstractRepositorySessionFactor
 
         metadataFacetFactories = cleanedMetadataFacetFactories;
 
-        JcrMetadataRepository metadataRepository = null;
         try
         {
 
@@ -141,24 +134,16 @@ public class JcrRepositorySessionFactory extends AbstractRepositorySessionFactor
                 logger.error("Repository creation failed {}", e.getMessage());
                 throw new RuntimeException("Fatal error. Could not create metadata repository.");
             }
-            metadataRepository = new JcrMetadataRepository( metadataFacetFactories, repository );
-            JcrMetadataRepository.initialize( metadataRepository.getJcrSession() );
+            jcrMetadataRepository = new JcrMetadataRepository( metadataFacetFactories, repository );
+            try (JcrSession session = new JcrSession( jcrMetadataRepository, metadataResolver )) {
+                JcrMetadataRepository.initializeNodeTypes( session.getJcrSession() );
+                // Saves automatically with close
+            }
         }
         catch ( RepositoryException e )
         {
             throw new RuntimeException( e.getMessage(), e );
         }
-        finally
-        {
-            if ( metadataRepository != null )
-            {
-                try {
-                    metadataRepository.close();
-                } catch (MetadataRepositoryException e) {
-                    logger.error("Close of metadata repository failed {}", e.getMessage());
-                }
-            }
-        }
 
         stopWatch.stop();
         logger.info( "time to initialize JcrRepositorySessionFactory: {}", stopWatch.getTime() );
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrSession.java b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrSession.java
new file mode 100644
index 0000000..3878619
--- /dev/null
+++ b/archiva-modules/plugins/metadata-store-jcr/src/main/java/org/apache/archiva/metadata/repository/jcr/JcrSession.java
@@ -0,0 +1,108 @@
+package org.apache.archiva.metadata.repository.jcr;
+
+/*
+ * 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.
+ */
+
+import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.MetadataSessionException;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import javax.jcr.RepositoryException;
+import javax.jcr.Session;
+
+/**
+ *
+ * Session implementation for a JCR repository.
+ *
+ * @author Martin Stockhammer <ma...@apache.org>
+ */
+public class JcrSession extends RepositorySession implements AutoCloseable
+{
+
+    private static final Logger log = LoggerFactory.getLogger( JcrSession.class );
+
+    private Session jcrSession;
+    private JcrMetadataRepository repository;
+
+    public JcrSession( JcrMetadataRepository metadataRepository, MetadataResolver resolver) throws RepositoryException
+    {
+        super( metadataRepository, resolver );
+        this.repository = metadataRepository;
+        this.jcrSession = metadataRepository.login();
+    }
+
+    public Session getJcrSession() {
+        return jcrSession;
+    }
+
+    public JcrMetadataRepository getJcrRepository() {
+        return repository;
+    }
+
+    @Override
+    public void close( )
+    {
+        super.close( );
+        jcrSession.logout();
+    }
+
+    @Override
+    protected boolean isDirty( )
+    {
+        try
+        {
+            return jcrSession.hasPendingChanges( );
+        }
+        catch ( RepositoryException e )
+        {
+            log.error( "Could not check pending changes {}", e.getMessage( ) );
+            return true;
+        }
+    }
+
+    @Override
+    public void save( ) throws MetadataSessionException
+    {
+        super.save( );
+        try
+        {
+            jcrSession.save();
+        }
+        catch ( RepositoryException e )
+        {
+            throw new MetadataSessionException( e.getMessage( ), e );
+        }
+    }
+
+    @Override
+    public void revert( ) throws MetadataSessionException
+    {
+        super.revert( );
+        try
+        {
+            jcrSession.refresh( false );
+        }
+        catch ( RepositoryException e )
+        {
+            throw new MetadataSessionException( e.getMessage( ), e );
+        }
+    }
+}
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java b/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
index 0c6dedb..9082a1f 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/jcr/JcrMetadataRepositoryTest.java
@@ -78,7 +78,7 @@ public class JcrMetadataRepositoryTest
             Session session = jcrMetadataRepository.getJcrSession();
 
             // set up namespaces, etc.
-            JcrMetadataRepository.initialize( session );
+            JcrMetadataRepository.initializeNodeTypes( session );
 
             // removing content is faster than deleting and re-copying the files from target/jcr
             session.getRootNode().getNode( "repositories" ).remove();
diff --git a/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java b/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
index 4978a0c..55fb96b 100644
--- a/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
+++ b/archiva-modules/plugins/metadata-store-jcr/src/test/java/org/apache/archiva/metadata/repository/stats/JcrRepositoryStatisticsGatheringTest.java
@@ -115,7 +115,7 @@ public class JcrRepositoryStatisticsGatheringTest
             session = jcrMetadataRepository.getJcrSession();
 
             // set up namespaces, etc.
-            JcrMetadataRepository.initialize( session );
+            JcrMetadataRepository.initializeNodeTypes( session );
 
             // removing content is faster than deleting and re-copying the files from target/jcr
             session.getRootNode().getNode( "repositories" ).remove();
@@ -166,7 +166,7 @@ public class JcrRepositoryStatisticsGatheringTest
         testedStatistics.setScanStartTime( startTime );
         testedStatistics.setScanEndTime( endTime );
 
-        repository.populateStatistics( repository, TEST_REPO, testedStatistics );
+        repository.populateStatistics( , repository, TEST_REPO, testedStatistics );
 
         DefaultRepositoryStatistics expectedStatistics = new DefaultRepositoryStatistics();
         expectedStatistics.setNewFileCount( NEW_FILE_COUNT );
diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
index 304866a..64b067b 100644
--- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
+++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/RepositoryProblemEventListener.java
@@ -49,7 +49,7 @@ public class RepositoryProblemEventListener
 
         try
         {
-            metadataRepository.removeMetadataFacet( repositoryId, RepositoryProblemFacet.FACET_ID, name );
+            metadataRepository.removeMetadataFacet( , repositoryId, RepositoryProblemFacet.FACET_ID, name );
         }
         catch ( MetadataRepositoryException e )
         {
@@ -67,7 +67,7 @@ public class RepositoryProblemEventListener
         try
         {
             MetadataRepository metadataRepository = session.getRepository();
-            metadataRepository.removeMetadataFacet( repoId, RepositoryProblemFacet.FACET_ID, name );
+            metadataRepository.removeMetadataFacet( , repoId, RepositoryProblemFacet.FACET_ID, name );
             session.markDirty();
         }
         catch ( MetadataRepositoryException e )
@@ -91,7 +91,7 @@ public class RepositoryProblemEventListener
 
         try
         {
-            session.getRepository().addMetadataFacet( repoId, problem );
+            session.getRepository().addMetadataFacet( , repoId, problem );
             session.markDirty();
         }
         catch ( MetadataRepositoryException e )
diff --git a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
index 95c5ac3..dca503e 100644
--- a/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
+++ b/archiva-modules/plugins/problem-reports/src/main/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumer.java
@@ -129,7 +129,14 @@ public class DuplicateArtifactsConsumer
     {
         repoId = repo.getId();
         this.repositoryDir = Paths.get( repo.getLocation() );
-        repositorySession = repositorySessionFactory.createSession();
+        try
+        {
+            repositorySession = repositorySessionFactory.createSession();
+        }
+        catch ( MetadataRepositoryException e )
+        {
+            e.printStackTrace( );
+        }
     }
 
     @Override
@@ -165,7 +172,7 @@ public class DuplicateArtifactsConsumer
         Collection<ArtifactMetadata> results;
         try
         {
-            results = metadataRepository.getArtifactsByChecksum( repoId, checksumSha1 );
+            results = metadataRepository.getArtifactsByChecksum( , repoId, checksumSha1 );
         }
         catch ( MetadataRepositoryException e )
         {
@@ -217,7 +224,7 @@ public class DuplicateArtifactsConsumer
 
                 try
                 {
-                    metadataRepository.addMetadataFacet( repoId, problem );
+                    metadataRepository.addMetadataFacet( , repoId, problem );
                 }
                 catch ( MetadataRepositoryException e )
                 {
diff --git a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
index 31c58c7..1dc1739 100644
--- a/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
+++ b/archiva-modules/plugins/problem-reports/src/test/java/org/apache/archiva/reports/consumers/DuplicateArtifactsConsumerTest.java
@@ -114,14 +114,14 @@ public class DuplicateArtifactsConsumerTest
     public void testConsumerArtifactNotDuplicated()
         throws Exception
     {
-        when( metadataRepository.getArtifactsByChecksum( TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
+        when( metadataRepository.getArtifactsByChecksum( , TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
             Arrays.asList( TEST_METADATA ) );
 
         consumer.beginScan( config, new Date() );
         consumer.processFile( TEST_FILE );
         consumer.completeScan();
 
-        verify( metadataRepository, never() ).addMetadataFacet( eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
+        verify( metadataRepository, never() ).addMetadataFacet( , eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
     }
 
     // TODO: Doesn't currently work
@@ -142,7 +142,7 @@ public class DuplicateArtifactsConsumerTest
     public void testConsumerArtifactDuplicated()
         throws Exception
     {
-        when( metadataRepository.getArtifactsByChecksum( TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
+        when( metadataRepository.getArtifactsByChecksum( , TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
             Arrays.asList( TEST_METADATA, createMetadata( "1.0" ) ) );
 
         consumer.beginScan( config, new Date() );
@@ -150,7 +150,7 @@ public class DuplicateArtifactsConsumerTest
         consumer.completeScan();
 
         ArgumentCaptor<RepositoryProblemFacet> argument = ArgumentCaptor.forClass( RepositoryProblemFacet.class );
-        verify( metadataRepository ).addMetadataFacet( eq( TEST_REPO ), argument.capture() );
+        verify( metadataRepository ).addMetadataFacet( , eq( TEST_REPO ), argument.capture() );
         RepositoryProblemFacet problem = argument.getValue();
         assertProblem( problem );
     }
@@ -159,7 +159,7 @@ public class DuplicateArtifactsConsumerTest
     public void testConsumerArtifactDuplicatedButSelfNotInMetadataRepository()
         throws Exception
     {
-        when( metadataRepository.getArtifactsByChecksum( TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
+        when( metadataRepository.getArtifactsByChecksum( , TEST_REPO, TEST_CHECKSUM ) ).thenReturn(
             Arrays.asList( createMetadata( "1.0" ) ) );
 
         consumer.beginScan( config, new Date() );
@@ -167,7 +167,7 @@ public class DuplicateArtifactsConsumerTest
         consumer.completeScan();
 
         ArgumentCaptor<RepositoryProblemFacet> argument = ArgumentCaptor.forClass( RepositoryProblemFacet.class );
-        verify( metadataRepository ).addMetadataFacet( eq( TEST_REPO ), argument.capture() );
+        verify( metadataRepository ).addMetadataFacet( , eq( TEST_REPO ), argument.capture() );
         RepositoryProblemFacet problem = argument.getValue();
         assertProblem( problem );
     }
@@ -191,7 +191,7 @@ public class DuplicateArtifactsConsumerTest
             consumer.completeScan();
         }
 
-        verify( metadataRepository, never() ).addMetadataFacet( eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
+        verify( metadataRepository, never() ).addMetadataFacet( , eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
     }
 
     @Test
@@ -203,14 +203,14 @@ public class DuplicateArtifactsConsumerTest
         consumer.processFile( "com/example/invalid-artifact.txt" );
         consumer.completeScan();
 
-        verify( metadataRepository, never() ).addMetadataFacet( eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
+        verify( metadataRepository, never() ).addMetadataFacet( , eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
     }
 
     @Test
     public void testConsumerArtifactNotAnArtifactPathResults()
         throws Exception
     {
-        when( metadataRepository.getArtifactsByChecksum( eq( TEST_REPO ), anyString() ) ).thenReturn(
+        when( metadataRepository.getArtifactsByChecksum( , eq( TEST_REPO ), anyString() ) ).thenReturn(
             Arrays.asList( TEST_METADATA, createMetadata( "1.0" ) ) );
 
         // override, this feels a little overspecified though
@@ -222,7 +222,7 @@ public class DuplicateArtifactsConsumerTest
         consumer.processFile( "com/example/invalid-artifact.txt" );
         consumer.completeScan();
 
-        verify( metadataRepository, never() ).addMetadataFacet( eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
+        verify( metadataRepository, never() ).addMetadataFacet( , eq( TEST_REPO ), Matchers.<MetadataFacet>anyObject() );
     }
 
     private static void assertProblem( RepositoryProblemFacet problem )
diff --git a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
index 9611bbb..698d887 100644
--- a/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
+++ b/archiva-modules/plugins/repository-statistics/src/main/java/org/apache/archiva/metadata/repository/stats/DefaultRepositoryStatisticsManager.java
@@ -56,7 +56,7 @@ public class DefaultRepositoryStatisticsManager
     public boolean hasStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
-        return metadataRepository.hasMetadataFacet( repositoryId, DefaultRepositoryStatistics.FACET_ID );
+        return metadataRepository.hasMetadataFacet( , repositoryId, DefaultRepositoryStatistics.FACET_ID );
     }
 
     @Override
@@ -66,7 +66,7 @@ public class DefaultRepositoryStatisticsManager
         StopWatch stopWatch = new StopWatch();
         stopWatch.start();
         // TODO: consider a more efficient implementation that directly gets the last one from the content repository
-        List<String> scans = metadataRepository.getMetadataFacets( repositoryId, DefaultRepositoryStatistics.FACET_ID );
+        List<String> scans = metadataRepository.getMetadataFacets( , repositoryId, DefaultRepositoryStatistics.FACET_ID );
         if ( scans == null )
         {
             return null;
@@ -76,8 +76,8 @@ public class DefaultRepositoryStatisticsManager
         {
             String name = scans.get( scans.size() - 1 );
             RepositoryStatistics repositoryStatistics =
-                RepositoryStatistics.class.cast( metadataRepository.getMetadataFacet( repositoryId, RepositoryStatistics.FACET_ID,
-                                                                            name ));
+                RepositoryStatistics.class.cast( metadataRepository.getMetadataFacet( , repositoryId,
+                    RepositoryStatistics.FACET_ID, name ));
             stopWatch.stop();
             log.debug( "time to find last RepositoryStatistics: {} ms", stopWatch.getTime() );
             return repositoryStatistics;
@@ -111,24 +111,24 @@ public class DefaultRepositoryStatisticsManager
 
         if ( metadataRepository instanceof RepositoryStatisticsProvider)
         {
-            ((RepositoryStatisticsProvider)metadataRepository).populateStatistics( metadataRepository,
-                repositoryId, repositoryStatistics);
+            ((RepositoryStatisticsProvider)metadataRepository).populateStatistics( ,
+                metadataRepository, repositoryId, repositoryStatistics );
         }
         else
         {
-            walkingProvider.populateStatistics( metadataRepository, repositoryId, repositoryStatistics );
+            walkingProvider.populateStatistics( , metadataRepository, repositoryId, repositoryStatistics );
         }
 
         log.info( "Gathering statistics executed in {} ms",  ( System.currentTimeMillis() - startGather ) );
 
-        metadataRepository.addMetadataFacet( repositoryId, repositoryStatistics );
+        metadataRepository.addMetadataFacet( , repositoryId, repositoryStatistics );
     }
 
     @Override
     public void deleteStatistics( MetadataRepository metadataRepository, String repositoryId )
         throws MetadataRepositoryException
     {
-        metadataRepository.removeMetadataFacets( repositoryId, DefaultRepositoryStatistics.FACET_ID );
+        metadataRepository.removeMetadataFacets( , repositoryId, DefaultRepositoryStatistics.FACET_ID );
     }
 
     @Override
@@ -137,7 +137,7 @@ public class DefaultRepositoryStatisticsManager
         throws MetadataRepositoryException
     {
         List<RepositoryStatistics> results = new ArrayList<>();
-        List<String> list = metadataRepository.getMetadataFacets( repositoryId, DefaultRepositoryStatistics.FACET_ID );
+        List<String> list = metadataRepository.getMetadataFacets( , repositoryId, DefaultRepositoryStatistics.FACET_ID );
         Collections.sort( list, Collections.reverseOrder() );
         for ( String name : list )
         {
@@ -148,9 +148,9 @@ public class DefaultRepositoryStatisticsManager
                     endTime ) ) )
                 {
                     RepositoryStatistics stats =
-                        (RepositoryStatistics) metadataRepository.getMetadataFacet( repositoryId,
-                                                                                    DefaultRepositoryStatistics.FACET_ID,
-                                                                                    name );
+                        (RepositoryStatistics) metadataRepository.getMetadataFacet( ,
+                            repositoryId,
+                            DefaultRepositoryStatistics.FACET_ID, name );
                     results.add( stats );
                 }
             }
diff --git a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
index b0a1742..dfa185b 100644
--- a/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
+++ b/archiva-modules/plugins/repository-statistics/src/test/java/org/apache/archiva/metadata/repository/stats/RepositoryStatisticsManagerTest.java
@@ -103,11 +103,11 @@ public class RepositoryStatisticsManagerTest
         stats.setTotalFileCount( 56229 );
 
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Arrays.asList( FIRST_TEST_SCAN, SECOND_TEST_SCAN ) );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID,
-                                                     SECOND_TEST_SCAN ) ).andReturn( stats );
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            DefaultRepositoryStatistics.FACET_ID, SECOND_TEST_SCAN ) ).andReturn( stats );
 
         metadataRepositoryControl.replay();
 
@@ -131,7 +131,7 @@ public class RepositoryStatisticsManagerTest
         throws Exception
     {
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Collections.<String>emptyList() );
         metadataRepositoryControl.replay();
 
@@ -152,13 +152,13 @@ public class RepositoryStatisticsManagerTest
 
         walkRepository( 1 );
 
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, stats );
+        metadataRepository.addMetadataFacet( , TEST_REPO_ID, stats );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Arrays.asList( stats.getName() ) );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID,
-                                                     stats.getName() ) ).andReturn( stats );
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            DefaultRepositoryStatistics.FACET_ID, stats.getName() ) ).andReturn( stats );
 
         metadataRepositoryControl.replay();
 
@@ -189,21 +189,21 @@ public class RepositoryStatisticsManagerTest
 
         Date startTime1 = new Date( current.getTime() - 12345 );
         DefaultRepositoryStatistics stats1 = createTestStats( startTime1, new Date( current.getTime() - 6000 ) );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, stats1 );
+        metadataRepository.addMetadataFacet( , TEST_REPO_ID, stats1 );
 
         Date startTime2 = new Date( current.getTime() - 3000 );
         DefaultRepositoryStatistics stats2 = createTestStats( startTime2, current );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, stats2 );
+        metadataRepository.addMetadataFacet( , TEST_REPO_ID, stats2 );
 
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Arrays.asList( stats1.getName(), stats2.getName() ) );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID,
-                                                     stats2.getName() ) ).andReturn( stats2 );
-        metadataRepository.removeMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID );
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID,
+            DefaultRepositoryStatistics.FACET_ID, stats2.getName() ) ).andReturn( stats2 );
+        metadataRepository.removeMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Collections.<String>emptyList() );
 
         metadataRepositoryControl.replay();
@@ -227,9 +227,9 @@ public class RepositoryStatisticsManagerTest
         throws Exception
     {
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn(
             Collections.<String>emptyList() ).times( 2 );
-        metadataRepository.removeMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID );
+        metadataRepository.removeMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID );
 
         metadataRepositoryControl.replay();
 
@@ -256,12 +256,12 @@ public class RepositoryStatisticsManagerTest
 
         ArrayList<String> keys = new ArrayList<>( statsCreated.keySet() );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
 
         // only match the middle one
         String key = keys.get( 1 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
 
 
@@ -299,16 +299,16 @@ public class RepositoryStatisticsManagerTest
 
         List<String> keys = new ArrayList<>( statsCreated.keySet() );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
 
         String key = keys.get( 1 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
 
         key = keys.get( 2 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
 
 
@@ -346,15 +346,15 @@ public class RepositoryStatisticsManagerTest
 
         List<String> keys = new ArrayList<>( statsCreated.keySet() );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
 
         String key = keys.get( 0 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
         key = keys.get( 1 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
 
         metadataRepositoryControl.replay();
@@ -392,19 +392,19 @@ public class RepositoryStatisticsManagerTest
 
         ArrayList<String> keys = new ArrayList<>( statsCreated.keySet() );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
 
         String key = keys.get( 0 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
         key = keys.get( 1 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
         key = keys.get( 2 );
 
-        expect( metadataRepository.getMetadataFacet( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
+        expect( metadataRepository.getMetadataFacet( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID, key ) ).andReturn(
             statsCreated.get( key ) );
 
         metadataRepositoryControl.replay();
@@ -442,7 +442,7 @@ public class RepositoryStatisticsManagerTest
 
         ArrayList<String> keys = new ArrayList<>( statsCreated.keySet() );
 
-        expect( metadataRepository.getMetadataFacets( TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
+        expect( metadataRepository.getMetadataFacets( , TEST_REPO_ID, DefaultRepositoryStatistics.FACET_ID ) ).andReturn( keys );
 
         metadataRepositoryControl.replay();
 
@@ -467,7 +467,7 @@ public class RepositoryStatisticsManagerTest
         throws Exception
     {
         DefaultRepositoryStatistics stats = createTestStats( startTime, endTime );
-        metadataRepository.addMetadataFacet( TEST_REPO_ID, stats );
+        metadataRepository.addMetadataFacet( , TEST_REPO_ID, stats );
         statsCreated.put( stats.getName(), stats );
     }
 
@@ -512,104 +512,104 @@ public class RepositoryStatisticsManagerTest
         for ( int i = 0; i < count; i++ )
         {
 
-            expect( metadataRepository.getRootNamespaces( TEST_REPO_ID ) ).andReturn( Arrays.asList( "com", "org" ) );
+            expect( metadataRepository.getRootNamespaces( , TEST_REPO_ID ) ).andReturn( Arrays.asList( "com", "org" ) );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "com" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "com" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "com" ) ).andReturn( Arrays.asList( "example" ) );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "com" ) ).andReturn( Arrays.asList( "example" ) );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "com.example" ) ).andReturn(
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "com.example" ) ).andReturn(
                 Arrays.<String>asList() );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "com.example" ) ).andReturn(
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "com.example" ) ).andReturn(
                 Arrays.asList( "example-project" ) );
 
-            expect( metadataRepository.getProjectVersions( TEST_REPO_ID, "com.example", "example-project" ) ).andReturn(
+            expect( metadataRepository.getProjectVersions( , TEST_REPO_ID, "com.example", "example-project" ) ).andReturn(
                 Arrays.asList( "1.0", "1.1" ) );
 
             expect(
-                metadataRepository.getArtifacts( TEST_REPO_ID, "com.example", "example-project", "1.0" ) ).andReturn(
+                metadataRepository.getArtifacts( , TEST_REPO_ID, "com.example", "example-project", "1.0" ) ).andReturn(
                 Arrays.asList( createArtifact( "com.example", "example-project", "1.0", "jar" ),
                                createArtifact( "com.example", "example-project", "1.0", "pom" ) ) );
 
             expect(
-                metadataRepository.getArtifacts( TEST_REPO_ID, "com.example", "example-project", "1.1" ) ).andReturn(
+                metadataRepository.getArtifacts( , TEST_REPO_ID, "com.example", "example-project", "1.1" ) ).andReturn(
                 Arrays.asList( createArtifact( "com.example", "example-project", "1.1", "jar" ),
                                createArtifact( "com.example", "example-project", "1.1", "pom" ) ) );
 
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org" ) ).andReturn( Arrays.asList( "apache", "codehaus" ) );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org" ) ).andReturn( Arrays.asList( "apache", "codehaus" ) );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.asList( "archiva", "maven" )  );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.asList( "archiva", "maven" )  );
 
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org.apache" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.asList( "metadata-repository-api", "metadata-model" ) );
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org.apache.archiva" ) ).andReturn( Arrays.asList( "metadata-repository-api", "metadata-model" ) );
 
-            expect( metadataRepository.getProjectVersions( TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api" ) )
+            expect( metadataRepository.getProjectVersions( , TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api" ) )
                 .andReturn( Arrays.asList( "1.3-SNAPSHOT", "1.3" )  );
 
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api", "1.3-SNAPSHOT" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api", "1.3-SNAPSHOT" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "metadata-repository-api", "1.3-SNAPSHOT", "jar" ),
                                            createArtifact( "org.apache.archiva", "metadata-repository-api", "1.3-SNAPSHOT",
                                                            "pom" ) )  );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api", "1.3" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.apache.archiva", "metadata-repository-api", "1.3" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "metadata-repository-api", "1.3", "jar" ),
                                            createArtifact( "org.apache.archiva", "metadata-repository-api", "1.3", "pom" ) ) );
 
-            expect( metadataRepository.getProjectVersions( TEST_REPO_ID, "org.apache.archiva", "metadata-model" ) )
+            expect( metadataRepository.getProjectVersions( , TEST_REPO_ID, "org.apache.archiva", "metadata-model" ) )
                 .andReturn( Arrays.asList( "1.3-SNAPSHOT", "1.3" )  );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.apache.archiva", "metadata-model", "1.3-SNAPSHOT" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.apache.archiva", "metadata-model", "1.3-SNAPSHOT" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "metadata-model", "1.3-SNAPSHOT", "jar" ),
                                            createArtifact( "org.apache.archiva", "metadata-model", "1.3-SNAPSHOT", "pom" ) ) );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.apache.archiva", "metadata-model", "1.3" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.apache.archiva", "metadata-model", "1.3" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "metadata-model", "1.3", "jar" ),
                                            createArtifact( "org.apache.archiva", "metadata-model", "1.3", "pom" ) ) );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org.apache.maven" ) ).andReturn( Arrays.<String>asList() );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org.apache.maven" ) ).andReturn( Arrays.<String>asList() );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org.apache.maven" ) )
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org.apache.maven" ) )
                 .andReturn( Arrays.asList( "maven-model" )  );
 
-            expect( metadataRepository.getProjectVersions( TEST_REPO_ID, "org.apache.maven", "maven-model" ) )
+            expect( metadataRepository.getProjectVersions( , TEST_REPO_ID, "org.apache.maven", "maven-model" ) )
                 .andReturn( Arrays.asList( "2.2.1" ) );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.apache.maven", "maven-model", "2.2.1" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.apache.maven", "maven-model", "2.2.1" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.apache.archiva", "maven-model", "2.2.1", "jar" ),
                                            createArtifact( "org.apache.archiva", "maven-model", "2.2.1", "pom" ) ) );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org.codehaus" ) ).andReturn( Arrays.asList( "plexus" ) );
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org.codehaus" ) ).andReturn( Arrays.asList( "plexus" ) );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org" ) ).andReturn( Arrays.<String>asList(  ) );
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org" ) ).andReturn( Arrays.<String>asList(  ) );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org.codehaus" ) )
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org.codehaus" ) )
                 .andReturn( Arrays.<String>asList(  ) );
 
-            expect( metadataRepository.getNamespaces( TEST_REPO_ID, "org.codehaus.plexus" ) )
+            expect( metadataRepository.getNamespaces( , TEST_REPO_ID, "org.codehaus.plexus" ) )
                 .andReturn( Arrays.<String>asList(  ) );
 
-            expect( metadataRepository.getProjects( TEST_REPO_ID, "org.codehaus.plexus" ) )
+            expect( metadataRepository.getProjects( , TEST_REPO_ID, "org.codehaus.plexus" ) )
                 .andReturn( Arrays.asList( "plexus-spring" )  );
 
-            expect( metadataRepository.getProjectVersions( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring" ) )
+            expect( metadataRepository.getProjectVersions( , TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring" ) )
                 .andReturn( Arrays.asList( "1.0", "1.1", "1.2" ) );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.0" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.0" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.codehaus.plexus", "plexus-spring", "1.0", "jar" ),
                                            createArtifact( "org.codehaus.plexus", "plexus-spring", "1.0", "pom" ) ) );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.1" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.1" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.codehaus.plexus", "plexus-spring", "1.1", "jar" ),
                                            createArtifact( "org.codehaus.plexus", "plexus-spring", "1.1", "pom" ) )  );
 
-            expect( metadataRepository.getArtifacts( TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2" ) )
+            expect( metadataRepository.getArtifacts( , TEST_REPO_ID, "org.codehaus.plexus", "plexus-spring", "1.2" ) )
                 .andReturn( Arrays.asList( createArtifact( "org.codehaus.plexus", "plexus-spring", "1.2", "jar" ),
                                            createArtifact( "org.codehaus.plexus", "plexus-spring", "1.2", "pom" ) )  );
         }
diff --git a/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java b/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java
index 0b427fd..19c5333 100644
--- a/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java
+++ b/archiva-modules/plugins/stage-repository-merge/src/main/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMerger.java
@@ -103,7 +103,7 @@ public class Maven2RepositoryMerger
 
         try
         {
-            List<ArtifactMetadata> artifactsInSourceRepo = metadataRepository.getArtifacts( sourceRepoId );
+            List<ArtifactMetadata> artifactsInSourceRepo = metadataRepository.getArtifacts( , sourceRepoId );
             for ( ArtifactMetadata artifactMetadata : artifactsInSourceRepo )
             {
                 artifactMetadata.setRepositoryId( targetRepoId );
@@ -132,7 +132,7 @@ public class Maven2RepositoryMerger
     {
         try
         {
-            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( sourceRepoId );
+            List<ArtifactMetadata> sourceArtifacts = metadataRepository.getArtifacts( , sourceRepoId );
             for ( ArtifactMetadata metadata : sourceArtifacts )
             {
                 if ( filter.accept( metadata ) )
@@ -399,9 +399,9 @@ public class Maven2RepositoryMerger
         try
         {
             TreeSet<ArtifactMetadata> targetArtifacts = new TreeSet<>(META_COMPARATOR);
-            targetArtifacts.addAll(metadataRepository.getArtifacts(targetRepo));
+            targetArtifacts.addAll(metadataRepository.getArtifacts( , targetRepo ));
             TreeSet<ArtifactMetadata> sourceArtifacts = new TreeSet<>(META_COMPARATOR);
-            sourceArtifacts.addAll(metadataRepository.getArtifacts(sourceRepo));
+            sourceArtifacts.addAll(metadataRepository.getArtifacts( , sourceRepo ));
             sourceArtifacts.retainAll(targetArtifacts);
 
             return new ArrayList<>(sourceArtifacts);
diff --git a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java
index 5626f99..facc184 100644
--- a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java
+++ b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/stagerepository/merge/Maven2RepositoryMergerTest.java
@@ -120,9 +120,9 @@ public class Maven2RepositoryMergerTest
         c.addManagedRepository( targetRepo );
         configuration.save( c );
 
-        when( metadataRepository.getArtifacts( TEST_REPO_ID ) ).thenReturn( getArtifacts() );
+        when( metadataRepository.getArtifacts( , TEST_REPO_ID ) ).thenReturn( getArtifacts() );
         repositoryMerger.merge( metadataRepository, TEST_REPO_ID, "target-rep" );
-        verify( metadataRepository ).getArtifacts( TEST_REPO_ID );
+        verify( metadataRepository ).getArtifacts( , TEST_REPO_ID );
         assertTrue( Files.exists(mergedArtifact) );
         assertTrue( Files.exists(mavenMetadata) );
         assertTrue( Files.exists(pom) );
@@ -169,12 +169,12 @@ public class Maven2RepositoryMergerTest
             "/target/test-repository/com/example/test/test-artifact/1.0-SNAPSHOT/test-artifact-1.0-20100308.230825-1.jar" );
         targetRepoFile.toFile().setReadOnly();
 
-        when( metadataRepository.getArtifacts( sourceRepoId ) ).thenReturn( sourceRepoArtifactsList );
-        when( metadataRepository.getArtifacts( TEST_REPO_ID ) ).thenReturn( targetRepoArtifactsList );
+        when( metadataRepository.getArtifacts( , sourceRepoId ) ).thenReturn( sourceRepoArtifactsList );
+        when( metadataRepository.getArtifacts( , TEST_REPO_ID ) ).thenReturn( targetRepoArtifactsList );
 
         assertEquals( 1, repositoryMerger.getConflictingArtifacts( metadataRepository, sourceRepoId,
                                                                    TEST_REPO_ID ).size() );
-        verify( metadataRepository ).getArtifacts( TEST_REPO_ID );
+        verify( metadataRepository ).getArtifacts( , TEST_REPO_ID );
     }
 
 }
\ No newline at end of file