You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@archiva.apache.org by br...@apache.org on 2010/12/29 07:14:07 UTC

svn commit: r1053542 [2/7] - in /archiva/trunk/archiva-modules: archiva-base/archiva-consumers/archiva-core-consumers/ archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/maven/archiva/consumers/core/repository/ archiva-base/...

Added: archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java?rev=1053542&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java (added)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java Wed Dec 29 06:14:04 2010
@@ -0,0 +1,36 @@
+package org.apache.archiva.metadata.repository;
+
+/*
+ * 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.
+ */
+
+public class TestRepositorySessionFactory
+    implements RepositorySessionFactory
+{
+    private MetadataResolver resolver;
+
+    public RepositorySession createSession()
+    {
+        return new RepositorySession( new TestMetadataRepository(), resolver );
+    }
+
+    public void setResolver( MetadataResolver resolver )
+    {
+        this.resolver = resolver;
+    }
+}

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/AbstractProxyTestCase.java Wed Dec 29 06:14:04 2010
@@ -19,17 +19,6 @@ package org.apache.maven.archiva.proxy;
  * under the License.
  */
 
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.text.ParseException;
-import java.text.SimpleDateFormat;
-import java.util.Calendar;
-import java.util.Collection;
-import java.util.Date;
-import java.util.Locale;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.commons.lang.ArrayUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
@@ -48,6 +37,17 @@ import org.codehaus.plexus.spring.Plexus
 import org.easymock.ArgumentsMatcher;
 import org.easymock.MockControl;
 
+import java.io.BufferedReader;
+import java.io.File;
+import java.io.FileReader;
+import java.io.IOException;
+import java.text.ParseException;
+import java.text.SimpleDateFormat;
+import java.util.Calendar;
+import java.util.Collection;
+import java.util.Date;
+import java.util.Locale;
+
 /**
  * AbstractProxyTestCase
  *
@@ -88,52 +88,57 @@ public abstract class AbstractProxyTestC
 
     protected static final String REPOPATH_LEGACY_MANAGED_TARGET = "target/test-repository/legacy-managed";
 
-    protected static final ArgumentsMatcher customWagonGetIfNewerMatcher = new ArgumentsMatcher() {
+    protected static final ArgumentsMatcher customWagonGetIfNewerMatcher = new ArgumentsMatcher()
+    {
 
-        public boolean matches(Object[] expected, Object[] actual) {
-            if (expected.length < 1 || actual.length < 1)
+        public boolean matches( Object[] expected, Object[] actual )
+        {
+            if ( expected.length < 1 || actual.length < 1 )
             {
                 return false;
             }
-            return MockControl.ARRAY_MATCHER.matches(ArrayUtils.remove(expected, 1), ArrayUtils.remove(actual, 1));
+            return MockControl.ARRAY_MATCHER.matches( ArrayUtils.remove( expected, 1 ), ArrayUtils.remove( actual,
+                                                                                                           1 ) );
         }
 
-        public String toString(Object[] arguments) {
-            return ArrayUtils.toString(arguments);
+        public String toString( Object[] arguments )
+        {
+            return ArrayUtils.toString( arguments );
         }
     };
 
-    protected static final ArgumentsMatcher customWagonGetMatcher = new ArgumentsMatcher() {
+    protected static final ArgumentsMatcher customWagonGetMatcher = new ArgumentsMatcher()
+    {
 
-            public boolean matches(Object[] expected, Object[] actual)
+        public boolean matches( Object[] expected, Object[] actual )
+        {
+            if ( expected.length == 2 && actual.length == 2 )
             {
-                if (expected.length == 2 && actual.length == 2)
+                if ( expected[0] == null && actual[0] == null )
                 {
-                    if (expected[0] == null && actual[0] == null)
-                    {
-                        return true;
-                    }
-
-                    if (expected[0] == null)
-                    {
-                        return actual[0] == null;
-                    }
+                    return true;
+                }
 
-                    if (actual[0] == null)
-                    {
-                        return expected[0] == null;
-                    }
+                if ( expected[0] == null )
+                {
+                    return actual[0] == null;
+                }
 
-                    return expected[0].equals(actual[0]);
+                if ( actual[0] == null )
+                {
+                    return expected[0] == null;
                 }
-                return false;
-            }
 
-            public String toString(Object[] arguments)
-            {
-                return ArrayUtils.toString(arguments);
+                return expected[0].equals( actual[0] );
             }
-        };
+            return false;
+        }
+
+        public String toString( Object[] arguments )
+        {
+            return ArrayUtils.toString( arguments );
+        }
+    };
 
     protected MockControl wagonMockControl;
 
@@ -187,7 +192,8 @@ public abstract class AbstractProxyTestC
         assertNotNull( "Actual File should not be null.", actualFile );
 
         assertTrue( "Check actual file exists.", actualFile.exists() );
-        assertEquals( "Check filename path is appropriate.", expectedFile.getCanonicalPath(), actualFile.getCanonicalPath() );
+        assertEquals( "Check filename path is appropriate.", expectedFile.getCanonicalPath(),
+                      actualFile.getCanonicalPath() );
         assertEquals( "Check file path matches.", expectedFile.getAbsolutePath(), actualFile.getAbsolutePath() );
 
         String expectedContents = FileUtils.readFileToString( sourceFile, null );
@@ -200,7 +206,7 @@ public abstract class AbstractProxyTestC
         assertNull( "Found file: " + downloadedFile + "; but was expecting a failure", downloadedFile );
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings( "unchecked" )
     protected void assertNoTempFiles( File expectedFile )
     {
         File workingDir = expectedFile.getParentFile();
@@ -209,7 +215,7 @@ public abstract class AbstractProxyTestC
             return;
         }
 
-        Collection<File> tmpFiles = FileUtils.listFiles( workingDir, new String[] { "tmp" }, false );
+        Collection<File> tmpFiles = FileUtils.listFiles( workingDir, new String[]{"tmp"}, false );
         if ( !tmpFiles.isEmpty() )
         {
             StringBuffer emsg = new StringBuffer();
@@ -266,8 +272,8 @@ public abstract class AbstractProxyTestC
                 {
                     if ( !destination.exists() && !destination.mkdirs() )
                     {
-                        throw new IOException( "Could not create destination directory '"
-                            + destination.getAbsolutePath() + "'." );
+                        throw new IOException(
+                            "Could not create destination directory '" + destination.getAbsolutePath() + "'." );
                     }
 
                     copyDirectoryStructure( file, destination );
@@ -340,8 +346,8 @@ public abstract class AbstractProxyTestC
 
     protected void saveConnector( String sourceRepoId, String targetRepoId, boolean disabled )
     {
-        saveConnector( sourceRepoId, targetRepoId, ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS,
-                       SnapshotsPolicy.ALWAYS, CachedFailuresPolicy.NO, disabled );
+        saveConnector( sourceRepoId, targetRepoId, ChecksumPolicy.IGNORE, ReleasesPolicy.ALWAYS, SnapshotsPolicy.ALWAYS,
+                       CachedFailuresPolicy.NO, disabled );
     }
 
     protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
@@ -352,7 +358,8 @@ public abstract class AbstractProxyTestC
     }
 
     protected void saveConnector( String sourceRepoId, String targetRepoId, String checksumPolicy, String releasePolicy,
-                                  String snapshotPolicy, String cacheFailuresPolicy, String errorPolicy, boolean disabled )
+                                  String snapshotPolicy, String cacheFailuresPolicy, String errorPolicy,
+                                  boolean disabled )
     {
         saveConnector( sourceRepoId, targetRepoId, checksumPolicy, releasePolicy, snapshotPolicy, cacheFailuresPolicy,
                        errorPolicy, PropagateErrorsOnUpdateDownloadPolicy.NOT_PRESENT, disabled );
@@ -371,7 +378,7 @@ public abstract class AbstractProxyTestC
         connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_CACHE_FAILURES, cacheFailuresPolicy );
         connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS, errorPolicy );
         connectorConfig.addPolicy( ProxyConnectorConfiguration.POLICY_PROPAGATE_ERRORS_ON_UPDATE, errorOnUpdatePolicy );
-        connectorConfig.setDisabled(disabled);
+        connectorConfig.setDisabled( disabled );
 
         int count = config.getConfiguration().getProxyConnectors().size();
         config.getConfiguration().addProxyConnector( connectorConfig );
@@ -385,10 +392,10 @@ public abstract class AbstractProxyTestC
         config.triggerChange( prefix + ".policies.checksum", connectorConfig.getPolicy( "checksum", "" ) );
         config.triggerChange( prefix + ".policies.snapshots", connectorConfig.getPolicy( "snapshots", "" ) );
         config.triggerChange( prefix + ".policies.cache-failures", connectorConfig.getPolicy( "cache-failures", "" ) );
-        config.triggerChange( prefix + ".policies.propagate-errors",
-                              connectorConfig.getPolicy( "propagate-errors", "" ) );
-        config.triggerChange( prefix + ".policies.propagate-errors-on-update",
-                              connectorConfig.getPolicy( "propagate-errors-on-update", "" ) );
+        config.triggerChange( prefix + ".policies.propagate-errors", connectorConfig.getPolicy( "propagate-errors",
+                                                                                                "" ) );
+        config.triggerChange( prefix + ".policies.propagate-errors-on-update", connectorConfig.getPolicy(
+            "propagate-errors-on-update", "" ) );
     }
 
     protected void saveManagedRepositoryConfig( String id, String name, String path, String layout )
@@ -444,6 +451,7 @@ public abstract class AbstractProxyTestC
 
     /**
      * {@inheritDoc}
+     *
      * @see org.codehaus.plexus.spring.PlexusInSpringTestCase#getConfigLocation()
      */
     @Override
@@ -488,19 +496,28 @@ public abstract class AbstractProxyTestC
         config.getConfiguration().addManagedRepository( repoConfig );
 
         // Setup target (proxied to) repository.
-        saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1", new File( REPOPATH_PROXIED1 ).toURL()
-            .toExternalForm(), "default" );
+        saveRemoteRepositoryConfig( ID_PROXIED1, "Proxied Repository 1", new File(
+            REPOPATH_PROXIED1 ).toURL().toExternalForm(), "default" );
 
         // Setup target (proxied to) repository.
-        saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2", new File( REPOPATH_PROXIED2 ).toURL()
-            .toExternalForm(), "default" );
+        saveRemoteRepositoryConfig( ID_PROXIED2, "Proxied Repository 2", new File(
+            REPOPATH_PROXIED2 ).toURL().toExternalForm(), "default" );
 
         // Setup target (proxied to) repository using legacy layout.
-        saveRemoteRepositoryConfig( ID_LEGACY_PROXIED, "Proxied Legacy Repository", new File( REPOPATH_PROXIED_LEGACY )
-            .toURL().toExternalForm(), "legacy" );
+        saveRemoteRepositoryConfig( ID_LEGACY_PROXIED, "Proxied Legacy Repository", new File(
+            REPOPATH_PROXIED_LEGACY ).toURL().toExternalForm(), "legacy" );
 
         // Setup the proxy handler.
-        proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
+        try
+        {
+            proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
+        }
+        catch ( Exception e )
+        {
+            // TODO: handle in plexus-spring instead
+            applicationContext.close();
+            throw e;
+        }
 
         // Setup the wagon mock.
         wagonMockControl = MockControl.createNiceControl( Wagon.class );
@@ -548,8 +565,8 @@ public abstract class AbstractProxyTestC
         if ( !sourceDir.exists() )
         {
             // This is just a warning.
-            System.err.println( "[WARN] Skipping setup of testable managed repository, source dir does not exist: "
-                + sourceDir );
+            System.err.println(
+                "[WARN] Skipping setup of testable managed repository, source dir does not exist: " + sourceDir );
         }
         else
         {
@@ -583,8 +600,8 @@ public abstract class AbstractProxyTestC
 
     protected void assertNotModified( File file, long expectedModificationTime )
     {
-        assertEquals( "File <" + file.getAbsolutePath() + "> not have been modified.",
-                      expectedModificationTime, file.lastModified() );
+        assertEquals( "File <" + file.getAbsolutePath() + "> not have been modified.", expectedModificationTime,
+                      file.lastModified() );
     }
 
     protected void assertNotExistsInManagedLegacyRepo( File file )
@@ -593,9 +610,9 @@ public abstract class AbstractProxyTestC
         String managedLegacyPath = managedLegacyDir.getCanonicalPath();
         String testFile = file.getCanonicalPath();
 
-        assertTrue( "Unit Test Failure: File <" + testFile
-            + "> should be have been defined within the legacy managed path of <" + managedLegacyPath + ">", testFile
-            .startsWith( managedLegacyPath ) );
+        assertTrue( "Unit Test Failure: File <" + testFile +
+                        "> should be have been defined within the legacy managed path of <" + managedLegacyPath + ">",
+                    testFile.startsWith( managedLegacyPath ) );
 
         assertFalse( "File < " + testFile + "> should not exist in managed legacy repository.", file.exists() );
     }
@@ -606,9 +623,9 @@ public abstract class AbstractProxyTestC
         String managedDefaultPath = managedDefaultDir.getCanonicalPath();
         String testFile = file.getCanonicalPath();
 
-        assertTrue( "Unit Test Failure: File <" + testFile
-            + "> should be have been defined within the managed default path of <" + managedDefaultPath + ">", testFile
-            .startsWith( managedDefaultPath ) );
+        assertTrue( "Unit Test Failure: File <" + testFile +
+                        "> should be have been defined within the managed default path of <" + managedDefaultPath + ">",
+                    testFile.startsWith( managedDefaultPath ) );
 
         assertFalse( "File < " + testFile + "> should not exist in managed default repository.", file.exists() );
     }

Modified: archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/HttpProxyTransferTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/HttpProxyTransferTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/HttpProxyTransferTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/maven/archiva/proxy/HttpProxyTransferTest.java Wed Dec 29 06:14:04 2010
@@ -19,13 +19,6 @@ package org.apache.maven.archiva.proxy;
  * under the License.
  */
 
-import java.io.File;
-import java.io.IOException;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
 import org.apache.commons.io.FileUtils;
 import org.apache.maven.archiva.configuration.ArchivaConfiguration;
 import org.apache.maven.archiva.configuration.ManagedRepositoryConfiguration;
@@ -46,9 +39,15 @@ import org.mortbay.jetty.Request;
 import org.mortbay.jetty.Server;
 import org.mortbay.jetty.handler.AbstractHandler;
 
+import java.io.File;
+import java.io.IOException;
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+
 /**
  * Integration test for connecting over a HTTP proxy.
- * 
+ *
  * @version $Id: ManagedDefaultTransferTest.java 677852 2008-07-18 08:16:24Z brett $
  */
 public class HttpProxyTransferTest
@@ -75,7 +74,7 @@ public class HttpProxyTransferTest
         throws Exception
     {
         super.setUp();
-     
+
         // Setup source repository (using default layout)
         String repoPath = "target/test-repository/managed/" + getName();
 
@@ -96,8 +95,8 @@ public class HttpProxyTransferTest
         repo.setLocation( repoPath );
         repo.setLayout( "default" );
 
-        ManagedRepositoryContent repoContent =
-            (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class, "default" );
+        ManagedRepositoryContent repoContent = (ManagedRepositoryContent) lookup( ManagedRepositoryContent.class,
+                                                                                  "default" );
         repoContent.setRepository( repo );
         managedDefaultRepository = repoContent;
 
@@ -113,7 +112,7 @@ public class HttpProxyTransferTest
                 response.setStatus( HttpServletResponse.SC_OK );
                 response.getWriter().print( "get-default-layout-1.0.jar\n\n" );
                 assertNotNull( request.getHeader( "Proxy-Connection" ) );
-                
+
                 ( (Request) request ).setHandled( true );
             }
         };
@@ -130,7 +129,7 @@ public class HttpProxyTransferTest
         proxyConfig.setProtocol( "http" );
         proxyConfig.setId( PROXY_ID );
         config.getConfiguration().addNetworkProxy( proxyConfig );
-        
+
         // Setup target (proxied to) repository.
         RemoteRepositoryConfiguration repoConfig = new RemoteRepositoryConfiguration();
 
@@ -142,7 +141,16 @@ public class HttpProxyTransferTest
         config.getConfiguration().addRemoteRepository( repoConfig );
 
         // Setup the proxy handler.
-        proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
+        try
+        {
+            proxyHandler = (RepositoryProxyConnectors) lookup( RepositoryProxyConnectors.class.getName() );
+        }
+        catch ( Exception e )
+        {
+            server.stop();
+            applicationContext.close();
+            throw e;
+        }
     }
 
     @Override
@@ -150,7 +158,7 @@ public class HttpProxyTransferTest
         throws Exception
     {
         super.tearDown();
-        
+
         server.stop();
     }
 
@@ -159,7 +167,7 @@ public class HttpProxyTransferTest
     {
         assertNull( System.getProperty( "http.proxyHost" ) );
         assertNull( System.getProperty( "http.proxyPort" ) );
-        
+
         String path = "org/apache/maven/test/get-default-layout/1.0/get-default-layout-1.0.jar";
 
         // Configure Connector (usually done within archiva.xml configuration)
@@ -183,7 +191,7 @@ public class HttpProxyTransferTest
         String expectedContents = FileUtils.readFileToString( sourceFile, null );
         String actualContents = FileUtils.readFileToString( downloadedFile, null );
         assertEquals( "Check file contents.", expectedContents, actualContents );
-        
+
         assertNull( System.getProperty( "http.proxyHost" ) );
         assertNull( System.getProperty( "http.proxyPort" ) );
     }

Added: archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/resources/META-INF/spring-context.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/resources/META-INF/spring-context.xml?rev=1053542&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/resources/META-INF/spring-context.xml (added)
+++ archiva/trunk/archiva-modules/archiva-base/archiva-proxy/src/test/resources/META-INF/spring-context.xml Wed Dec 29 06:14:04 2010
@@ -0,0 +1,26 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+  ~ 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.
+  -->
+
+<beans xmlns="http://www.springframework.org/schema/beans"
+       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd">
+
+  <bean id="repositorySessionFactory" class="org.apache.archiva.metadata.repository.TestRepositorySessionFactory"/>
+</beans>
\ No newline at end of file

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/pom.xml Wed Dec 29 06:14:04 2010
@@ -1,6 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
-<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
-    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
+<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"
+         xmlns="http://maven.apache.org/POM/4.0.0"
+         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <artifactId>archiva-scheduler</artifactId>
@@ -56,6 +57,11 @@
       <artifactId>slf4j-simple</artifactId>
       <scope>test</scope>
     </dependency>
+    <dependency>
+      <groupId>org.mockito</groupId>
+      <artifactId>mockito-all</artifactId>
+      <scope>test</scope>
+    </dependency>
   </dependencies>
   <build>
     <plugins>

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutor.java Wed Dec 29 06:14:04 2010
@@ -19,7 +19,10 @@ package org.apache.archiva.scheduler.rep
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
 import org.apache.archiva.repository.scanner.RepositoryContentConsumers;
@@ -75,6 +78,13 @@ public class ArchivaRepositoryScanningTa
      */
     private RepositoryStatisticsManager repositoryStatisticsManager;
 
+    /**
+     * TODO: may be different implementations
+     *
+     * @plexus.requirement
+     */
+    private RepositorySessionFactory repositorySessionFactory;
+
     public void initialize()
         throws InitializationException
     {
@@ -127,48 +137,48 @@ public class ArchivaRepositoryScanningTa
             long sinceWhen = RepositoryScanner.FRESH_SCAN;
             long previousFileCount = 0;
 
-            if ( !repoTask.isScanAll() )
+            RepositorySession repositorySession = repositorySessionFactory.createSession();
+            MetadataRepository metadataRepository = repositorySession.getRepository();
+            try
             {
-                RepositoryStatistics previousStats;
-                try
+                if ( !repoTask.isScanAll() )
                 {
-                    previousStats = repositoryStatisticsManager.getLastStatistics( repoId );
+                    RepositoryStatistics previousStats = repositoryStatisticsManager.getLastStatistics(
+                        metadataRepository, repoId );
+                    if ( previousStats != null )
+                    {
+                        sinceWhen = previousStats.getScanStartTime().getTime();
+                        previousFileCount = previousStats.getTotalFileCount();
+                    }
                 }
-                catch ( MetadataRepositoryException e )
+
+                RepositoryScanStatistics stats;
+                try
                 {
-                    throw new TaskExecutionException( "Unable to get previous statistics: " + e.getMessage(), e );
+                    stats = repoScanner.scan( arepo, sinceWhen );
                 }
-                if ( previousStats != null )
+                catch ( RepositoryScannerException e )
                 {
-                    sinceWhen = previousStats.getScanStartTime().getTime();
-                    previousFileCount = previousStats.getTotalFileCount();
+                    throw new TaskExecutionException( "Repository error when executing repository job.", e );
                 }
-            }
 
-            RepositoryScanStatistics stats;
-            try
-            {
-                stats = repoScanner.scan( arepo, sinceWhen );
-            }
-            catch ( RepositoryScannerException e )
-            {
-                throw new TaskExecutionException( "Repository error when executing repository job.", e );
-            }
+                log.info( "Finished first scan: " + stats.toDump( arepo ) );
 
-            log.info( "Finished first scan: " + stats.toDump( arepo ) );
-
-            // further statistics will be populated by the following method
-            Date endTime = new Date( stats.getWhenGathered().getTime() + stats.getDuration() );
-            try
-            {
-                repositoryStatisticsManager.addStatisticsAfterScan( repoId, stats.getWhenGathered(), endTime,
-                                                                    stats.getTotalFileCount(),
+                // further statistics will be populated by the following method
+                Date endTime = new Date( stats.getWhenGathered().getTime() + stats.getDuration() );
+                repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, repoId, stats.getWhenGathered(),
+                                                                    endTime, stats.getTotalFileCount(),
                                                                     stats.getTotalFileCount() - previousFileCount );
+                repositorySession.save();
             }
             catch ( MetadataRepositoryException e )
             {
                 throw new TaskExecutionException( "Unable to store updated statistics: " + e.getMessage(), e );
             }
+            finally
+            {
+                repositorySession.close();
+            }
 
 //                log.info( "Scanning for removed repository content" );
 

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/RepositoryArchivaTaskScheduler.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/RepositoryArchivaTaskScheduler.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/RepositoryArchivaTaskScheduler.java (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/main/java/org/apache/archiva/scheduler/repository/RepositoryArchivaTaskScheduler.java Wed Dec 29 06:14:04 2010
@@ -19,7 +19,10 @@ package org.apache.archiva.scheduler.rep
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
+import org.apache.archiva.metadata.repository.RepositorySession;
+import org.apache.archiva.metadata.repository.RepositorySessionFactory;
 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
 import org.apache.archiva.scheduler.ArchivaTaskScheduler;
 import org.apache.maven.archiva.common.ArchivaException;
@@ -77,6 +80,13 @@ public class RepositoryArchivaTaskSchedu
      */
     private RepositoryStatisticsManager repositoryStatisticsManager;
 
+    /**
+     * TODO: could have multiple implementations
+     *
+     * @plexus.requirement
+     */
+    private RepositorySessionFactory repositorySessionFactory;
+
     private static final String REPOSITORY_SCAN_GROUP = "rg";
 
     private static final String REPOSITORY_JOB = "rj";
@@ -114,33 +124,42 @@ public class RepositoryArchivaTaskSchedu
         List<ManagedRepositoryConfiguration> repositories =
             archivaConfiguration.getConfiguration().getManagedRepositories();
 
-        for ( ManagedRepositoryConfiguration repoConfig : repositories )
+        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        try
         {
-            if ( repoConfig.isScanned() )
+            MetadataRepository metadataRepository = repositorySession.getRepository();
+            for ( ManagedRepositoryConfiguration repoConfig : repositories )
             {
-                try
+                if ( repoConfig.isScanned() )
                 {
-                    scheduleRepositoryJobs( repoConfig );
-                }
-                catch ( SchedulerException e )
-                {
-                    throw new StartingException( "Unable to start scheduler: " + e.getMessage(), e );
-                }
+                    try
+                    {
+                        scheduleRepositoryJobs( repoConfig );
+                    }
+                    catch ( SchedulerException e )
+                    {
+                        throw new StartingException( "Unable to start scheduler: " + e.getMessage(), e );
+                    }
 
-                try
-                {
-                    if ( !isPreviouslyScanned( repoConfig ) )
+                    try
                     {
-                        queueInitialRepoScan( repoConfig );
+                        if ( !isPreviouslyScanned( repoConfig, metadataRepository ) )
+                        {
+                            queueInitialRepoScan( repoConfig );
+                        }
+                    }
+                    catch ( MetadataRepositoryException e )
+                    {
+                        log.warn( "Unable to determine if a repository is already scanned, skipping initial scan: " +
+                                      e.getMessage(), e );
                     }
-                }
-                catch ( MetadataRepositoryException e )
-                {
-                    log.warn( "Unable to determine if a repository is already scanned, skipping initial scan: " +
-                                  e.getMessage(), e );
                 }
             }
         }
+        finally
+        {
+            repositorySession.close();
+        }
     }
 
     public void stop()
@@ -270,10 +289,11 @@ public class RepositoryArchivaTaskSchedu
     }
 
     @SuppressWarnings( "unchecked" )
-    private boolean isPreviouslyScanned( ManagedRepositoryConfiguration repoConfig )
+    private boolean isPreviouslyScanned( ManagedRepositoryConfiguration repoConfig,
+                                         MetadataRepository metadataRepository )
         throws MetadataRepositoryException
     {
-        return repositoryStatisticsManager.getLastStatistics( repoConfig.getId() ) != null;
+        return repositoryStatisticsManager.getLastStatistics( metadataRepository, repoConfig.getId() ) != null;
     }
 
     // MRM-848: Pre-configured repository initially appear to be empty

Added: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java?rev=1053542&view=auto
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java (added)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/metadata/repository/TestRepositorySessionFactory.java Wed Dec 29 06:14:04 2010
@@ -0,0 +1,43 @@
+package org.apache.archiva.metadata.repository;
+
+/*
+ * 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.
+ */
+
+public class TestRepositorySessionFactory
+    implements RepositorySessionFactory
+{
+    private MetadataRepository repository;
+
+    private MetadataResolver resolver;
+
+    public RepositorySession createSession()
+    {
+        return new RepositorySession( repository, resolver );
+    }
+
+    public void setRepository( MetadataRepository repository )
+    {
+        this.repository = repository;
+    }
+
+    public void setResolver( MetadataResolver resolver )
+    {
+        this.resolver = resolver;
+    }
+}

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.java Wed Dec 29 06:14:04 2010
@@ -19,6 +19,7 @@ package org.apache.archiva.scheduler.rep
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
 import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
@@ -36,6 +37,8 @@ import java.util.Collection;
 import java.util.Date;
 import java.util.List;
 
+import static org.mockito.Mockito.mock;
+
 /**
  * ArchivaRepositoryScanningTaskExecutorTest
  *
@@ -54,12 +57,23 @@ public class ArchivaRepositoryScanningTa
 
     private TestConsumer testConsumer;
 
+    private MetadataRepository metadataRepository;
+
     protected void setUp()
         throws Exception
     {
         super.setUp();
 
-        taskExecutor = (TaskExecutor) lookup( TaskExecutor.class, "test-repository-scanning" );
+        try
+        {
+            taskExecutor = (TaskExecutor) lookup( TaskExecutor.class, "test-repository-scanning" );
+        }
+        catch ( Exception e )
+        {
+            // TODO: handle cleanup in plexus-spring lookup method instead
+            applicationContext.close();
+            throw e;
+        }
 
         File sourceRepoDir = new File( getBasedir(), "src/test/repositories/default-repository" );
         repoDir = new File( getBasedir(), "target/default-repository" );
@@ -98,6 +112,8 @@ public class ArchivaRepositoryScanningTa
 
         repositoryStatisticsManager = (RepositoryStatisticsManager) lookup( RepositoryStatisticsManager.class );
         testConsumer = (TestConsumer) lookup( KnownRepositoryContentConsumer.class, "test-consumer" );
+
+        metadataRepository = mock( MetadataRepository.class );
     }
 
     protected void tearDown()
@@ -145,7 +161,8 @@ public class ArchivaRepositoryScanningTa
                       unprocessedResultList.size() );
 
         // check correctness of new stats
-        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
+        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( metadataRepository,
+                                                                                       TEST_REPO_ID );
         assertEquals( 0, newStats.getNewFileCount() );
         assertEquals( 31, newStats.getTotalFileCount() );
         // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
@@ -176,7 +193,8 @@ public class ArchivaRepositoryScanningTa
                       unprocessedResultList.size() );
 
         // check correctness of new stats
-        RepositoryStatistics updatedStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
+        RepositoryStatistics updatedStats = repositoryStatisticsManager.getLastStatistics( metadataRepository,
+                                                                                           TEST_REPO_ID );
         assertEquals( 2, updatedStats.getNewFileCount() );
         assertEquals( 33, updatedStats.getTotalFileCount() );
         // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
@@ -220,7 +238,8 @@ public class ArchivaRepositoryScanningTa
                       unprocessedResultList.size() );
 
         // check correctness of new stats
-        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
+        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( metadataRepository,
+                                                                                       TEST_REPO_ID );
         assertEquals( 2, newStats.getNewFileCount() );
         assertEquals( 33, newStats.getTotalFileCount() );
         // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
@@ -264,7 +283,8 @@ public class ArchivaRepositoryScanningTa
                       unprocessedResultList.size() );
 
         // check correctness of new stats
-        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( TEST_REPO_ID );
+        RepositoryStatistics newStats = repositoryStatisticsManager.getLastStatistics( metadataRepository,
+                                                                                       TEST_REPO_ID );
         assertEquals( 2, newStats.getNewFileCount() );
         assertEquals( 33, newStats.getTotalFileCount() );
         // FIXME: can't test these as they weren't stored in the database, move to tests for RepositoryStatisticsManager implementation
@@ -283,8 +303,8 @@ public class ArchivaRepositoryScanningTa
         repoTask.setScanAll( true );
 
         Date date = Calendar.getInstance().getTime();
-        repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, new Date( date.getTime() - 1234567 ), date, 8,
-                                                            8 );
+        repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, new Date(
+            date.getTime() - 1234567 ), date, 8, 8 );
 
         taskExecutor.executeTask( repoTask );
 
@@ -308,7 +328,7 @@ public class ArchivaRepositoryScanningTa
         stats.setTotalProjectCount( 5 );
         stats.setTotalArtifactFileSize( 38545 );
 
-        repositoryStatisticsManager.addStatisticsAfterScan( TEST_REPO_ID, new Date( date.getTime() - 1234567 ), date,
-                                                            31, 31 );
+        repositoryStatisticsManager.addStatisticsAfterScan( metadataRepository, TEST_REPO_ID, new Date(
+            date.getTime() - 1234567 ), date, 31, 31 );
     }
 }

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/java/org/apache/archiva/scheduler/repository/TestRepositoryStatisticsManager.java Wed Dec 29 06:14:04 2010
@@ -19,21 +19,22 @@ package org.apache.archiva.scheduler.rep
  * under the License.
  */
 
+import org.apache.archiva.metadata.repository.MetadataRepository;
+import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
+import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
+
 import java.util.ArrayList;
 import java.util.Date;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
 
-import org.apache.archiva.metadata.repository.stats.RepositoryStatistics;
-import org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager;
-
 public class TestRepositoryStatisticsManager
     implements RepositoryStatisticsManager
 {
     private Map<String, List<RepositoryStatistics>> repoStats = new HashMap<String, List<RepositoryStatistics>>();
 
-    public RepositoryStatistics getLastStatistics( String repositoryId )
+    public RepositoryStatistics getLastStatistics( MetadataRepository metadataRepository, String repositoryId )
     {
         List<RepositoryStatistics> repositoryStatisticsList = getStatsList( repositoryId );
         return !repositoryStatisticsList.isEmpty()
@@ -41,8 +42,8 @@ public class TestRepositoryStatisticsMan
             : null;
     }
 
-    public void addStatisticsAfterScan( String repositoryId, Date startTime, Date endTime, long totalFiles,
-                                        long newFiles )
+    public void addStatisticsAfterScan( MetadataRepository metadataRepository, String repositoryId, Date startTime,
+                                        Date endTime, long totalFiles, long newFiles )
     {
         List<RepositoryStatistics> stats = getStatsList( repositoryId );
 
@@ -55,12 +56,13 @@ public class TestRepositoryStatisticsMan
         stats.add( repositoryStatistics );
     }
 
-    public void deleteStatistics( String repositoryId )
+    public void deleteStatistics( MetadataRepository metadataRepository, String repositoryId )
     {
         repoStats.remove( repositoryId );
     }
 
-    public List<RepositoryStatistics> getStatisticsInRange( String repositoryId, Date startDate, Date endDate )
+    public List<RepositoryStatistics> getStatisticsInRange( MetadataRepository metadataRepository, String repositoryId,
+                                                            Date startDate, Date endDate )
     {
         throw new UnsupportedOperationException();
     }

Modified: archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.xml (original)
+++ archiva/trunk/archiva-modules/archiva-scheduler/archiva-scheduler-repository/src/test/resources/org/apache/archiva/scheduler/repository/ArchivaRepositoryScanningTaskExecutorTest.xml Wed Dec 29 06:14:04 2010
@@ -37,6 +37,9 @@
         <requirement>
           <role>org.apache.archiva.metadata.repository.stats.RepositoryStatisticsManager</role>
         </requirement>
+        <requirement>
+          <role>org.apache.archiva.metadata.repository.RepositorySessionFactory</role>
+        </requirement>
       </requirements>
     </component>
 
@@ -87,5 +90,10 @@
         </requirement>
       </requirements>
     </component>
+
+    <component>
+      <role>org.apache.archiva.metadata.repository.RepositorySessionFactory</role>
+      <implementation>org.apache.archiva.metadata.repository.TestRepositorySessionFactory</implementation>
+    </component>
   </components>
 </component-set>

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/AbstractArtifactsRssFeedProcessor.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/AbstractArtifactsRssFeedProcessor.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/AbstractArtifactsRssFeedProcessor.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/AbstractArtifactsRssFeedProcessor.java Wed Dec 29 06:14:04 2010
@@ -19,22 +19,10 @@ package org.apache.archiva.rss.processor
  * under the License.
  */
 
-import org.apache.archiva.metadata.repository.MetadataRepository;
-
 public abstract class AbstractArtifactsRssFeedProcessor
     implements RssFeedProcessor
 {
-    /**
-     * @plexus.requirement
-     */
-    protected MetadataRepository metadataRepository;
-
     protected abstract String getTitle();
 
     protected abstract String getDescription();
-
-    public void setMetadataRepository( MetadataRepository metadataRepository )
-    {
-        this.metadataRepository = metadataRepository;
-    }
 }

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessor.java Wed Dec 29 06:14:04 2010
@@ -22,6 +22,7 @@ package org.apache.archiva.rss.processor
 import com.sun.syndication.feed.synd.SyndFeed;
 import com.sun.syndication.io.FeedException;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
+import org.apache.archiva.metadata.repository.MetadataRepository;
 import org.apache.archiva.metadata.repository.MetadataRepositoryException;
 import org.apache.archiva.rss.RssFeedEntry;
 import org.apache.archiva.rss.RssFeedGenerator;
@@ -64,7 +65,7 @@ public class NewArtifactsRssFeedProcesso
      * Process the newly discovered artifacts in the repository. Generate feeds for new artifacts in the repository and
      * new versions of artifact.
      */
-    public SyndFeed process( Map<String, String> reqParams )
+    public SyndFeed process( Map<String, String> reqParams, MetadataRepository metadataRepository )
         throws FeedException
     {
         log.debug( "Process new artifacts into rss feeds." );
@@ -72,20 +73,20 @@ public class NewArtifactsRssFeedProcesso
         String repoId = reqParams.get( RssFeedProcessor.KEY_REPO_ID );
         if ( repoId != null )
         {
-            return processNewArtifactsInRepo( repoId );
+            return processNewArtifactsInRepo( repoId, metadataRepository );
         }
 
         return null;
     }
 
-    private SyndFeed processNewArtifactsInRepo( String repoId )
+    private SyndFeed processNewArtifactsInRepo( String repoId, MetadataRepository metadataRepository )
         throws FeedException
     {
         Calendar greaterThanThisDate = Calendar.getInstance( GMT_TIME_ZONE );
         greaterThanThisDate.add( Calendar.DATE, -( getNumberOfDaysBeforeNow() ) );
         greaterThanThisDate.clear( Calendar.MILLISECOND );
 
-        List<ArtifactMetadata> artifacts = null;
+        List<ArtifactMetadata> artifacts;
         try
         {
             artifacts = metadataRepository.getArtifactsByDateRange( repoId, greaterThanThisDate.getTime(), null );

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessor.java Wed Dec 29 06:14:04 2010
@@ -22,6 +22,7 @@ package org.apache.archiva.rss.processor
 import com.sun.syndication.feed.synd.SyndFeed;
 import com.sun.syndication.io.FeedException;
 import org.apache.archiva.metadata.model.ArtifactMetadata;
+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.rss.RssFeedEntry;
@@ -59,7 +60,7 @@ public class NewVersionsOfArtifactRssFee
     /**
      * Process all versions of the artifact which had a rss feed request.
      */
-    public SyndFeed process( Map<String, String> reqParams )
+    public SyndFeed process( Map<String, String> reqParams, MetadataRepository metadataRepository )
         throws FeedException
     {
         String groupId = reqParams.get( RssFeedProcessor.KEY_GROUP_ID );
@@ -67,13 +68,14 @@ public class NewVersionsOfArtifactRssFee
 
         if ( groupId != null && artifactId != null )
         {
-            return processNewVersionsOfArtifact( groupId, artifactId );
+            return processNewVersionsOfArtifact( groupId, artifactId, metadataRepository );
         }
 
         return null;
     }
 
-    private SyndFeed processNewVersionsOfArtifact( String groupId, String artifactId )
+    private SyndFeed processNewVersionsOfArtifact( String groupId, String artifactId,
+                                                   MetadataRepository metadataRepository )
         throws FeedException
     {
         List<ArtifactMetadata> artifacts = new ArrayList<ArtifactMetadata>();

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/main/java/org/apache/archiva/rss/processor/RssFeedProcessor.java Wed Dec 29 06:14:04 2010
@@ -21,6 +21,7 @@ package org.apache.archiva.rss.processor
 
 import com.sun.syndication.feed.synd.SyndFeed;
 import com.sun.syndication.io.FeedException;
+import org.apache.archiva.metadata.repository.MetadataRepository;
 
 import java.util.Map;
 
@@ -35,6 +36,6 @@ public interface RssFeedProcessor
 
     public static final String KEY_ARTIFACT_ID = "artifactId";
 
-    SyndFeed process( Map<String, String> reqParams )
+    SyndFeed process( Map<String, String> reqParams, MetadataRepository metadataRepository )
         throws FeedException;
 }

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewArtifactsRssFeedProcessorTest.java Wed Dec 29 06:14:04 2010
@@ -59,7 +59,6 @@ public class NewArtifactsRssFeedProcesso
         newArtifactsProcessor.setGenerator( new RssFeedGenerator() );
 
         metadataRepository = new MetadataRepositoryMock();
-        newArtifactsProcessor.setMetadataRepository( metadataRepository );
     }
 
     @SuppressWarnings( "unchecked" )
@@ -83,7 +82,7 @@ public class NewArtifactsRssFeedProcesso
         Map<String, String> reqParams = new HashMap<String, String>();
         reqParams.put( RssFeedProcessor.KEY_REPO_ID, TEST_REPO );
 
-        SyndFeed feed = newArtifactsProcessor.process( reqParams );
+        SyndFeed feed = newArtifactsProcessor.process( reqParams, metadataRepository );
 
         // check that the date used in the call is close to the one passed (5 seconds difference at most)
         Calendar cal = Calendar.getInstance( TimeZone.getTimeZone( "GMT" ) );

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-rss/src/test/java/org/apache/archiva/rss/processor/NewVersionsOfArtifactRssFeedProcessorTest.java Wed Dec 29 06:14:04 2010
@@ -60,10 +60,9 @@ public class NewVersionsOfArtifactRssFee
 
         metadataRepositoryControl = MockControl.createControl( MetadataRepository.class );
         metadataRepository = (MetadataRepository) metadataRepositoryControl.getMock();
-        newVersionsProcessor.setMetadataRepository( metadataRepository );
     }
 
-    @SuppressWarnings("unchecked")
+    @SuppressWarnings( "unchecked" )
     public void testProcess()
         throws Exception
     {
@@ -80,23 +79,23 @@ public class NewVersionsOfArtifactRssFee
         reqParams.put( RssFeedProcessor.KEY_GROUP_ID, GROUP_ID );
         reqParams.put( RssFeedProcessor.KEY_ARTIFACT_ID, ARTIFACT_ID );
 
-        metadataRepositoryControl.expectAndReturn( metadataRepository.getRepositories(),
-                                                   Collections.singletonList( TEST_REPO ) );
-        metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getProjectVersions( TEST_REPO, GROUP_ID, ARTIFACT_ID ),
-            Arrays.asList( "1.0.1", "1.0.2", "1.0.3-SNAPSHOT" ) );
-        metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.1" ),
-            Collections.singletonList( artifact1 ) );
-        metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.2" ),
-            Collections.singletonList( artifact2 ) );
-        metadataRepositoryControl.expectAndReturn(
-            metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID, "1.0.3-SNAPSHOT" ),
-            Collections.singletonList( artifact3 ) );
+        metadataRepositoryControl.expectAndReturn( metadataRepository.getRepositories(), Collections.singletonList(
+            TEST_REPO ) );
+        metadataRepositoryControl.expectAndReturn( metadataRepository.getProjectVersions( TEST_REPO, GROUP_ID,
+                                                                                          ARTIFACT_ID ), Arrays.asList(
+            "1.0.1", "1.0.2", "1.0.3-SNAPSHOT" ) );
+        metadataRepositoryControl.expectAndReturn( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID,
+                                                                                    "1.0.1" ),
+                                                   Collections.singletonList( artifact1 ) );
+        metadataRepositoryControl.expectAndReturn( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID,
+                                                                                    "1.0.2" ),
+                                                   Collections.singletonList( artifact2 ) );
+        metadataRepositoryControl.expectAndReturn( metadataRepository.getArtifacts( TEST_REPO, GROUP_ID, ARTIFACT_ID,
+                                                                                    "1.0.3-SNAPSHOT" ),
+                                                   Collections.singletonList( artifact3 ) );
         metadataRepositoryControl.replay();
 
-        SyndFeed feed = newVersionsProcessor.process( reqParams );
+        SyndFeed feed = newVersionsProcessor.process( reqParams, metadataRepository );
 
         assertEquals( "New Versions of Artifact 'org.apache.archiva:artifact-two'", feed.getTitle() );
         assertEquals( "New versions of artifact 'org.apache.archiva:artifact-two' found during repository scan.",
@@ -108,8 +107,8 @@ public class NewVersionsOfArtifactRssFee
 
         assertEquals( 2, entries.size() );
 
-        assertEquals( "New Versions of Artifact 'org.apache.archiva:artifact-two' as of " + whenGathered,
-                      entries.get( 0 ).getTitle() );
+        assertEquals( "New Versions of Artifact 'org.apache.archiva:artifact-two' as of " + whenGathered, entries.get(
+            0 ).getTitle() );
         assertEquals( whenGathered, entries.get( 0 ).getPublishedDate() );
 
         assertEquals( "New Versions of Artifact 'org.apache.archiva:artifact-two' as of " + whenGatheredNext,

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp-test/pom.xml
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp-test/pom.xml?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp-test/pom.xml (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp-test/pom.xml Wed Dec 29 06:14:04 2010
@@ -18,7 +18,7 @@
   ~ under the License.
   -->
 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
-  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
+         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd">
   <modelVersion>4.0.0</modelVersion>
   <parent>
     <groupId>org.apache.archiva</groupId>
@@ -41,7 +41,7 @@
       <groupId>commons-io</groupId>
       <artifactId>commons-io</artifactId>
       <version>1.4</version>
-    </dependency> 
+    </dependency>
 
     <dependency>
       <groupId>org.codehaus.plexus</groupId>
@@ -73,10 +73,10 @@
       <version>1.0.1</version>
       <scope>test</scope>
       <exclusions>
-	<exclusion>
-	  <groupId>commons-logging</groupId>
-	  <artifactId>commons-logging</artifactId>
-	</exclusion>
+        <exclusion>
+          <groupId>commons-logging</groupId>
+          <artifactId>commons-logging</artifactId>
+        </exclusion>
       </exclusions>
     </dependency>
 
@@ -89,7 +89,7 @@
       <groupId>jaxen</groupId>
       <artifactId>jaxen</artifactId>
     </dependency>
-    
+
     <!-- Dependencies below are provided by the appserver -->
     <dependency>
       <groupId>org.apache.derby</groupId>
@@ -143,7 +143,7 @@
           </execution>
         </executions>
       </plugin>
-      
+
       <plugin>
         <groupId>org.apache.maven.plugins</groupId>
         <artifactId>maven-surefire-plugin</artifactId>
@@ -176,7 +176,7 @@
                   <name>browser</name>
                   <value>${selenium.browser}</value>
                 </property>
-		            <property>
+                <property>
                   <name>baseUrl</name>
                   <value>${baseUrl}</value>
                 </property>
@@ -227,6 +227,7 @@
                   <goal>copy-dependencies</goal>
                 </goals>
                 <configuration>
+                  <!-- TODO: this sometimes copies everything, causing problems with the server start up -->
                   <includeGroupIds>org.apache.derby,javax.mail,javax.activation</includeGroupIds>
                   <overWriteReleases>false</overWriteReleases>
                   <overWriteSnapshots>true</overWriteSnapshots>
@@ -247,22 +248,22 @@
                 <configuration>
                   <tasks>
                     <copy todir="${project.build.directory}/appserver-base">
-                      <fileset dir="src/test/resources/appserver-base" />
+                      <fileset dir="src/test/resources/appserver-base"/>
                     </copy>
                     <copy todir="${project.build.directory}/repository">
-                      <fileset dir="src/test/resources/repository" />
+                      <fileset dir="src/test/resources/repository"/>
                     </copy>
                     <copy todir="${project.build.directory}/index">
-                      <fileset dir="src/test/resources/index" />
+                      <fileset dir="src/test/resources/index"/>
                     </copy>
                     <copy todir="${project.build.directory}/snapshots">
-                      <fileset dir="src/test/resources/snapshots" />
+                      <fileset dir="src/test/resources/snapshots"/>
                     </copy>
                     <copy todir="${project.build.directory}/projects">
-                      <fileset dir="src/test/resources/projects" />
+                      <fileset dir="src/test/resources/projects"/>
                     </copy>
                     <copy todir="${project.build.directory}/local-repo">
-                      <fileset dir="src/test/resources/local-repo" />
+                      <fileset dir="src/test/resources/local-repo"/>
                     </copy>
                   </tasks>
                 </configuration>
@@ -273,12 +274,12 @@
                 <configuration>
                   <tasks>
                     <copy todir="${project.build.directory}/${container.name}conf">
-                      <fileset dir="src/test/${container.name}" />
+                      <fileset dir="src/test/${container.name}"/>
                     </copy>
                     <copy
-                      todir="${cargo.install.dir}/${container.name}/apache-tomcat-${tomcat5x.version}/apache-tomcat-${tomcat5x.version}/common/lib">
+                        todir="${cargo.install.dir}/${container.name}/apache-tomcat-${tomcat5x.version}/apache-tomcat-${tomcat5x.version}/common/lib">
                       <fileset dir="${project.build.directory}/providedDependencies">
-                        <include name="**/*.jar" />
+                        <include name="**/*.jar"/>
                       </fileset>
                     </copy>
                   </tasks>
@@ -292,8 +293,8 @@
                 <phase>integration-test</phase>
                 <configuration>
                   <tasks>
-                    <get src="http://localhost:9696/archiva/" dest="${project.build.directory}/index.html" />
-                    <delete file="${project.build.directory}/index.html" />
+                    <get src="http://localhost:9696/archiva/" dest="${project.build.directory}/index.html"/>
+                    <delete file="${project.build.directory}/index.html"/>
                   </tasks>
                 </configuration>
                 <goals>
@@ -386,7 +387,7 @@
                 <configuration>
                   <background>true</background>
                   <port>${seleniumPort}</port>
-                  <logOutput>true</logOutput>      
+                  <logOutput>true</logOutput>
                 </configuration>
               </execution>
             </executions>
@@ -403,7 +404,9 @@
       </activation>
       <properties>
         <container.name>tomcat5x</container.name>
-        <container.url>http://archive.apache.org/dist/tomcat/tomcat-5/v${tomcat5x.version}/bin/apache-tomcat-${tomcat5x.version}.zip</container.url>
+        <container.url>
+          http://archive.apache.org/dist/tomcat/tomcat-5/v${tomcat5x.version}/bin/apache-tomcat-${tomcat5x.version}.zip
+        </container.url>
       </properties>
     </profile>
     <profile>
@@ -415,7 +418,7 @@
       </activation>
       <properties>
         <selenium.browser>*firefox</selenium.browser>
-        <excluded.groups />
+        <excluded.groups/>
       </properties>
     </profile>
     <profile>

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/BrowseAction.java Wed Dec 29 06:14:04 2010
@@ -22,6 +22,7 @@ package org.apache.maven.archiva.web.act
 import org.apache.archiva.metadata.model.ProjectVersionMetadata;
 import org.apache.archiva.metadata.repository.MetadataResolutionException;
 import org.apache.archiva.metadata.repository.MetadataResolver;
+import org.apache.archiva.metadata.repository.RepositorySession;
 import org.apache.archiva.metadata.repository.storage.maven2.MavenProjectFacet;
 import org.apache.commons.collections.CollectionUtils;
 import org.apache.commons.lang.StringUtils;
@@ -42,11 +43,6 @@ import java.util.Set;
 public class BrowseAction
     extends AbstractRepositoryBasedAction
 {
-    /**
-     * @plexus.requirement
-     */
-    private MetadataResolver metadataResolver;
-
     private String groupId;
 
     private String artifactId;
@@ -75,29 +71,40 @@ public class BrowseAction
         // TODO: this logic should be optional, particularly remembering we want to keep this code simple
         //       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>();
-        for ( String repoId : selectedRepos )
+        Set<String> namespacesToCollapse;
+        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        try
         {
-            namespacesToCollapse.addAll( metadataResolver.resolveRootNamespaces( repoId ) );
-        }
+            MetadataResolver metadataResolver = repositorySession.getResolver();
+            namespacesToCollapse = new LinkedHashSet<String>();
+            for ( String repoId : selectedRepos )
+            {
+                namespacesToCollapse.addAll( metadataResolver.resolveRootNamespaces( repositorySession, repoId ) );
+            }
 
-        for ( String n : namespacesToCollapse )
+            for ( String n : namespacesToCollapse )
+            {
+                // TODO: check performance of this
+                namespaces.add( collapseNamespaces( repositorySession, metadataResolver, selectedRepos, n ) );
+            }
+        }
+        finally
         {
-            // TODO: check performance of this
-            namespaces.add( collapseNamespaces( selectedRepos, n ) );
+            repositorySession.close();
         }
 
         this.namespaces = getSortedList( namespaces );
         return SUCCESS;
     }
 
-    private String collapseNamespaces( Collection<String> repoIds, String n )
+    private String collapseNamespaces( RepositorySession repositorySession, MetadataResolver metadataResolver,
+                                       Collection<String> repoIds, String n )
         throws MetadataResolutionException
     {
         Set<String> subNamespaces = new LinkedHashSet<String>();
         for ( String repoId : repoIds )
         {
-            subNamespaces.addAll( metadataResolver.resolveNamespaces( repoId, n ) );
+            subNamespaces.addAll( metadataResolver.resolveNamespaces( repositorySession, repoId, n ) );
         }
         if ( subNamespaces.size() != 1 )
         {
@@ -111,7 +118,7 @@ public class BrowseAction
         {
             for ( String repoId : repoIds )
             {
-                Collection<String> projects = metadataResolver.resolveProjects( repoId, n );
+                Collection<String> projects = metadataResolver.resolveProjects( repositorySession, repoId, n );
                 if ( projects != null && !projects.isEmpty() )
                 {
                     if ( log.isDebugEnabled() )
@@ -121,7 +128,8 @@ public class BrowseAction
                     return n;
                 }
             }
-            return collapseNamespaces( repoIds, n + "." + subNamespaces.iterator().next() );
+            return collapseNamespaces( repositorySession, metadataResolver, repoIds,
+                                       n + "." + subNamespaces.iterator().next() );
         }
     }
 
@@ -143,22 +151,34 @@ public class BrowseAction
 
         Set<String> projects = new LinkedHashSet<String>();
 
-        Set<String> namespacesToCollapse = new LinkedHashSet<String>();
-        for ( String repoId : selectedRepos )
+        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        Set<String> namespaces;
+        try
         {
-            namespacesToCollapse.addAll( metadataResolver.resolveNamespaces( repoId, groupId ) );
+            MetadataResolver metadataResolver = repositorySession.getResolver();
 
-            projects.addAll( metadataResolver.resolveProjects( repoId, groupId ) );
-        }
+            Set<String> namespacesToCollapse = new LinkedHashSet<String>();
+            for ( String repoId : selectedRepos )
+            {
+                namespacesToCollapse.addAll( metadataResolver.resolveNamespaces( repositorySession, repoId, groupId ) );
 
-        // TODO: this logic should be optional, particularly remembering we want to keep this code simple
-        //       it is located here to avoid the content repository implementation needing to do too much for what
-        //       is essentially presentation code
-        Set<String> namespaces = new LinkedHashSet<String>();
-        for ( String n : namespacesToCollapse )
+                projects.addAll( metadataResolver.resolveProjects( repositorySession, repoId, groupId ) );
+            }
+
+            // TODO: this logic should be optional, particularly remembering we want to keep this code simple
+            //       it is located here to avoid the content repository implementation needing to do too much for what
+            //       is essentially presentation code
+            namespaces = new LinkedHashSet<String>();
+            for ( String n : namespacesToCollapse )
+            {
+                // TODO: check performance of this
+                namespaces.add( collapseNamespaces( repositorySession, metadataResolver, selectedRepos,
+                                                    groupId + "." + n ) );
+            }
+        }
+        finally
         {
-            // TODO: check performance of this
-            namespaces.add( collapseNamespaces( selectedRepos, groupId + "." + n ) );
+            repositorySession.close();
         }
 
         this.namespaces = getSortedList( namespaces );
@@ -196,21 +216,33 @@ public class BrowseAction
             return GlobalResults.ACCESS_TO_NO_REPOS;
         }
 
-        Set<String> versions = new LinkedHashSet<String>();
-        for ( String repoId : selectedRepos )
+        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        try
         {
-            versions.addAll( metadataResolver.resolveProjectVersions( repoId, groupId, artifactId ) );
-        }
+            MetadataResolver metadataResolver = repositorySession.getResolver();
 
-        // TODO: sort by known version ordering method
-        this.projectVersions = new ArrayList<String>( versions );
+            Set<String> versions = new LinkedHashSet<String>();
+            for ( String repoId : selectedRepos )
+            {
+                versions.addAll( metadataResolver.resolveProjectVersions( repositorySession, repoId, groupId,
+                                                                          artifactId ) );
+            }
 
-        populateSharedModel( selectedRepos, versions );
+            // TODO: sort by known version ordering method
+            this.projectVersions = new ArrayList<String>( versions );
+
+            populateSharedModel( repositorySession, metadataResolver, selectedRepos, versions );
+        }
+        finally
+        {
+            repositorySession.close();
+        }
 
         return SUCCESS;
     }
 
-    private void populateSharedModel( Collection<String> selectedRepos, Collection<String> projectVersions )
+    private void populateSharedModel( RepositorySession repositorySession, MetadataResolver metadataResolver,
+                                      Collection<String> selectedRepos, Collection<String> projectVersions )
     {
         sharedModel = new ProjectVersionMetadata();
 
@@ -230,8 +262,8 @@ public class BrowseAction
                 {
                     try
                     {
-                        versionMetadata = metadataResolver.resolveProjectVersion( repoId, groupId, artifactId,
-                                                                                  version );
+                        versionMetadata = metadataResolver.resolveProjectVersion( repositorySession, repoId, groupId,
+                                                                                  artifactId, version );
                     }
                     catch ( MetadataResolutionException e )
                     {
@@ -351,11 +383,6 @@ public class BrowseAction
         return sharedModel;
     }
 
-    public MetadataResolver getMetadataResolver()
-    {
-        return metadataResolver;
-    }
-
     public Collection<String> getProjectIds()
     {
         return projectIds;

Modified: archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java
URL: http://svn.apache.org/viewvc/archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java?rev=1053542&r1=1053541&r2=1053542&view=diff
==============================================================================
--- archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java (original)
+++ archiva/trunk/archiva-modules/archiva-web/archiva-webapp/src/main/java/org/apache/maven/archiva/web/action/DeleteArtifactAction.java Wed Dec 29 06:14:04 2010
@@ -29,6 +29,7 @@ import org.apache.archiva.metadata.model
 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.repository.events.RepositoryListener;
 import org.apache.maven.archiva.common.utils.VersionComparator;
 import org.apache.maven.archiva.common.utils.VersionUtil;
@@ -117,11 +118,6 @@ public class DeleteArtifactAction
 
     private ChecksumAlgorithm[] algorithms = new ChecksumAlgorithm[]{ChecksumAlgorithm.SHA1, ChecksumAlgorithm.MD5};
 
-    /**
-     * @plexus.requirement
-     */
-    private MetadataRepository metadataRepository;
-
     public String getGroupId()
     {
         return groupId;
@@ -194,21 +190,22 @@ public class DeleteArtifactAction
 
     public String doDelete()
     {
-        try
-        {
-            Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
+        Date lastUpdatedTimestamp = Calendar.getInstance().getTime();
 
-            TimeZone timezone = TimeZone.getTimeZone( "UTC" );
-            DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
-            fmt.setTimeZone( timezone );
-            ManagedRepositoryConfiguration repoConfig = configuration.getConfiguration().findManagedRepositoryById(
-                repositoryId );
-
-            VersionedReference ref = new VersionedReference();
-            ref.setArtifactId( artifactId );
-            ref.setGroupId( groupId );
-            ref.setVersion( version );
+        TimeZone timezone = TimeZone.getTimeZone( "UTC" );
+        DateFormat fmt = new SimpleDateFormat( "yyyyMMdd.HHmmss" );
+        fmt.setTimeZone( timezone );
+        ManagedRepositoryConfiguration repoConfig = configuration.getConfiguration().findManagedRepositoryById(
+            repositoryId );
+
+        VersionedReference ref = new VersionedReference();
+        ref.setArtifactId( artifactId );
+        ref.setGroupId( groupId );
+        ref.setVersion( version );
 
+        RepositorySession repositorySession = repositorySessionFactory.createSession();
+        try
+        {
             ManagedRepositoryContent repository = repositoryFactory.getManagedRepositoryContent( repositoryId );
 
             String path = repository.toMetadataPath( ref );
@@ -230,6 +227,7 @@ public class DeleteArtifactAction
 
             updateMetadata( metadata, metadataFile, lastUpdatedTimestamp );
 
+            MetadataRepository metadataRepository = repositorySession.getRepository();
             Collection<ArtifactMetadata> artifacts = metadataRepository.getArtifacts( repositoryId, groupId, artifactId,
                                                                                       version );
 
@@ -245,21 +243,14 @@ public class DeleteArtifactAction
                     //       repository metadata to an artifact
                     for ( RepositoryListener listener : listeners )
                     {
-                        listener.deleteArtifact( repository.getId(), artifact.getNamespace(), artifact.getProject(),
-                                                 artifact.getVersion(), artifact.getId() );
+                        listener.deleteArtifact( metadataRepository, repository.getId(), artifact.getNamespace(),
+                                                 artifact.getProject(), artifact.getVersion(), artifact.getId() );
                     }
 
                     triggerAuditEvent( repositoryId, path, AuditEvent.REMOVE_FILE );
                 }
             }
-
-            String msg = "Artifact \'" + groupId + ":" + artifactId + ":" + version +
-                "\' was successfully deleted from repository \'" + repositoryId + "\'";
-
-            addActionMessage( msg );
-
-            reset();
-            return SUCCESS;
+            repositorySession.save();
         }
         catch ( ContentNotFoundException e )
         {
@@ -286,6 +277,18 @@ public class DeleteArtifactAction
             addActionError( "Repository exception: " + e.getMessage() );
             return ERROR;
         }
+        finally
+        {
+            repositorySession.close();
+        }
+
+        String msg = "Artifact \'" + groupId + ":" + artifactId + ":" + version +
+            "\' was successfully deleted from repository \'" + repositoryId + "\'";
+
+        addActionMessage( msg );
+
+        reset();
+        return SUCCESS;
     }
 
     private File getMetadata( String targetPath )
@@ -425,9 +428,4 @@ public class DeleteArtifactAction
     {
         this.configuration = configuration;
     }
-
-    public void setMetadataRepository( MetadataRepository metadataRepository )
-    {
-        this.metadataRepository = metadataRepository;
-    }
 }