[MRM-1837] cleanup registry listeners from Archiva Configuration

Project: http://git-wip-us.apache.org/repos/asf/archiva/repo
Commit: http://git-wip-us.apache.org/repos/asf/archiva/commit/7808ee5f
Tree: http://git-wip-us.apache.org/repos/asf/archiva/tree/7808ee5f
Diff: http://git-wip-us.apache.org/repos/asf/archiva/diff/7808ee5f

Branch: refs/heads/master
Commit: 7808ee5fafdb02b7d9e0b104fc4a8642bce4f8ac
Parents: 9bb8edc
Author: Olivier Lamy <[email protected]>
Authored: Wed Apr 30 17:22:41 2014 +1000
Committer: Olivier Lamy <[email protected]>
Committed: Wed Apr 30 17:22:41 2014 +1000

----------------------------------------------------------------------
 .../configuration/ArchivaConfiguration.java     |  4 ++-
 .../DefaultArchivaConfiguration.java            |  9 ++++++
 .../KnownRepositoryContentConsumer.java         |  2 --
 .../consumers/core/MetadataUpdaterConsumer.java | 15 ----------
 .../apache/archiva/proxy/MockConfiguration.java |  6 ++++
 .../scanner/DefaultRepositoryScanner.java       |  8 +++++-
 .../scanner/RepositoryContentConsumers.java     | 29 ++++++++++++++++++--
 .../configuration/TestConfiguration.java        |  6 ++++
 .../storage/maven2/conf/MockConfiguration.java  |  6 ++++
 .../configuration/StubConfiguration.java        |  6 ++++
 10 files changed, 69 insertions(+), 22 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
 
b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
index 3a259da..4f6798c 100644
--- 
a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
+++ 
b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/ArchivaConfiguration.java
@@ -70,13 +70,15 @@ public interface ArchivaConfiguration
     void removeListener( ConfigurationListener listener );
 
     /**
-     * Add a registry listener to notify of events in plexus-registry.
+     * Add a registry listener to notify of events in spring-registry.
      *
      * @param listener the listener
      *                 TODO: Remove in future.
      */
     void addChangeListener( RegistryListener listener );
 
+    void removeChangeListener( RegistryListener listener );
+
     /**
      * reload configuration from file included registry
      *

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
 
b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
index 6373a50..9b403d1 100644
--- 
a/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
+++ 
b/archiva-modules/archiva-base/archiva-configuration/src/main/java/org/apache/archiva/configuration/DefaultArchivaConfiguration.java
@@ -650,6 +650,8 @@ public class DefaultArchivaConfiguration
         listeners.remove( listener );
     }
 
+
+
     @Override
     public void addChangeListener( RegistryListener listener )
     {
@@ -673,6 +675,13 @@ public class DefaultArchivaConfiguration
         }
     }
 
+    @Override
+    public void removeChangeListener( RegistryListener listener )
+    {
+        boolean removed = registryListeners.remove( listener );
+        log.debug( "RegistryListener: '{}' removed {}", listener, removed );
+    }
+
     @PostConstruct
     public void initialize()
     {

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/KnownRepositoryContentConsumer.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/KnownRepositoryContentConsumer.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/KnownRepositoryContentConsumer.java
index 41c4bca..4a884a6 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/KnownRepositoryContentConsumer.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-consumer-api/src/main/java/org/apache/archiva/consumers/KnownRepositoryContentConsumer.java
@@ -21,8 +21,6 @@ package org.apache.archiva.consumers;
 
 /**
  * Consumer for Known Repository Content.
- *
- *
  */
 public interface KnownRepositoryContentConsumer
     extends RepositoryContentConsumer

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
index e1b6009..cb1f78f 100644
--- 
a/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
+++ 
b/archiva-modules/archiva-base/archiva-consumers/archiva-core-consumers/src/main/java/org/apache/archiva/consumers/core/MetadataUpdaterConsumer.java
@@ -70,32 +70,17 @@ public class MetadataUpdaterConsumer
      */
     private String id = "metadata-updater";
 
-    /**
-     * default-value="Update / Create maven-metadata.xml files"
-     */
     private String description = "Update / Create maven-metadata.xml files";
 
-    /**
-     *
-     */
     @Inject
     private RepositoryContentFactory repositoryFactory;
 
-    /**
-     *
-     */
     @Inject
     private MetadataTools metadataTools;
 
-    /**
-     *
-     */
     @Inject
     private ArchivaConfiguration configuration;
 
-    /**
-     *
-     */
     @Inject
     private FileTypes filetypes;
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
 
b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
index 7cd49a6..935f2a6 100644
--- 
a/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
+++ 
b/archiva-modules/archiva-base/archiva-proxy/src/test/java/org/apache/archiva/proxy/MockConfiguration.java
@@ -89,6 +89,12 @@ public class MockConfiguration
     }
 
     @Override
+    public void removeChangeListener( RegistryListener listener )
+    {
+        registryListeners.remove( listener );
+    }
+
+    @Override
     public Configuration getConfiguration()
     {
         return configuration;

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
index 492845d..56ef2fd 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/DefaultRepositoryScanner.java
@@ -21,6 +21,7 @@ package org.apache.archiva.repository.scanner;
 
 import org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
+import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.configuration.FileTypes;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
@@ -32,6 +33,7 @@ import org.springframework.stereotype.Service;
 import javax.inject.Inject;
 import java.io.File;
 import java.util.ArrayList;
+import java.util.Collections;
 import java.util.LinkedHashSet;
 import java.util.List;
 import java.util.Set;
@@ -57,9 +59,10 @@ public class DefaultRepositoryScanner
     public RepositoryScanStatistics scan( ManagedRepository repository, long 
changesSince )
         throws RepositoryScannerException
     {
+        List<KnownRepositoryContentConsumer> knownContentConsumers = null;
         try
         {
-            List<KnownRepositoryContentConsumer> knownContentConsumers = 
repositoryContentConsumers.getSelectedKnownConsumers();
+            knownContentConsumers = 
repositoryContentConsumers.getSelectedKnownConsumers();
             List<InvalidRepositoryContentConsumer> invalidContentConsumers = 
repositoryContentConsumers.getSelectedInvalidConsumers();
             List<String> ignoredPatterns = filetypes.getFileTypePatterns( 
FileTypes.IGNORED );
 
@@ -68,6 +71,9 @@ public class DefaultRepositoryScanner
         catch ( RepositoryAdminException e )
         {
             throw new RepositoryScannerException( e.getMessage(), e );
+        } finally
+        {
+            repositoryContentConsumers.releaseSelectedKnownConsumers( 
knownContentConsumers );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
index 4ce22d2..4c6077a 100644
--- 
a/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
+++ 
b/archiva-modules/archiva-base/archiva-repository-scanner/src/main/java/org/apache/archiva/repository/scanner/RepositoryContentConsumers.java
@@ -23,9 +23,11 @@ import 
org.apache.archiva.admin.model.RepositoryAdminException;
 import org.apache.archiva.admin.model.admin.ArchivaAdministration;
 import org.apache.archiva.admin.model.beans.ManagedRepository;
 import org.apache.archiva.common.utils.BaseFile;
+import org.apache.archiva.configuration.ArchivaConfiguration;
 import org.apache.archiva.consumers.InvalidRepositoryContentConsumer;
 import org.apache.archiva.consumers.KnownRepositoryContentConsumer;
 import org.apache.archiva.consumers.functors.ConsumerWantsFilePredicate;
+import org.apache.archiva.redback.components.registry.RegistryListener;
 import 
org.apache.archiva.repository.scanner.functors.ConsumerProcessFileClosure;
 import org.apache.archiva.repository.scanner.functors.TriggerBeginScanClosure;
 import 
org.apache.archiva.repository.scanner.functors.TriggerScanCompletedClosure;
@@ -48,7 +50,7 @@ import java.util.Map;
 /**
  * RepositoryContentConsumerUtil
  */
-@Service( "repositoryContentConsumers" )
+@Service("repositoryContentConsumers")
 public class RepositoryContentConsumers
     implements ApplicationContextAware
 {
@@ -63,6 +65,9 @@ public class RepositoryContentConsumers
     private List<InvalidRepositoryContentConsumer> selectedInvalidConsumers;
 
     @Inject
+    private ArchivaConfiguration archivaConfiguration;
+
+    @Inject
     public RepositoryContentConsumers( ArchivaAdministration 
archivaAdministration )
     {
         this.archivaAdministration = archivaAdministration;
@@ -156,7 +161,7 @@ public class RepositoryContentConsumers
      * @return the list of {@link KnownRepositoryContentConsumer} that have 
been selected
      * by the active configuration.
      */
-    public synchronized List<KnownRepositoryContentConsumer> 
getSelectedKnownConsumers()
+    public List<KnownRepositoryContentConsumer> getSelectedKnownConsumers()
         throws RepositoryAdminException
     {
         // FIXME only for testing
@@ -178,6 +183,22 @@ public class RepositoryContentConsumers
         return ret;
     }
 
+    public void releaseSelectedKnownConsumers( 
List<KnownRepositoryContentConsumer> repositoryContentConsumers )
+    {
+        if ( repositoryContentConsumers == null )
+        {
+            return;
+        }
+        for ( KnownRepositoryContentConsumer knownRepositoryContentConsumer : 
repositoryContentConsumers )
+        {
+            if ( RegistryListener.class.isAssignableFrom( 
knownRepositoryContentConsumer.getClass() ) )
+            {
+                archivaConfiguration.removeChangeListener(
+                    RegistryListener.class.cast( 
knownRepositoryContentConsumer ) );
+            }
+        }
+    }
+
     /**
      * Get the list of {@link InvalidRepositoryContentConsumer} objects that 
are
      * selected according to the active configuration.
@@ -248,12 +269,13 @@ public class RepositoryContentConsumers
     public void executeConsumers( ManagedRepository repository, File 
localFile, boolean updateRelatedArtifacts )
         throws RepositoryAdminException
     {
+        List<KnownRepositoryContentConsumer> selectedKnownConsumers = null;
         // Run the repository consumers
         try
         {
             Closure triggerBeginScan = new TriggerBeginScanClosure( 
repository, getStartTime(), false );
 
-            List<KnownRepositoryContentConsumer> selectedKnownConsumers = 
getSelectedKnownConsumers();
+            selectedKnownConsumers = getSelectedKnownConsumers();
 
             // MRM-1212/MRM-1197 
             // - do not create missing/fix invalid checksums and update 
metadata when deploying from webdav since these are uploaded by maven
@@ -307,6 +329,7 @@ public class RepositoryContentConsumers
                         CollectionUtils.forAllDo( availableKnownConsumers, 
triggerCompleteScan );
                         CollectionUtils.forAllDo( availableInvalidConsumers, 
triggerCompleteScan );
             */
+            releaseSelectedKnownConsumers( selectedKnownConsumers );
         }
     }
 

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
 
b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
index 12ab3b9..2056299 100644
--- 
a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
+++ 
b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/configuration/TestConfiguration.java
@@ -67,6 +67,12 @@ public class TestConfiguration
     }
 
     @Override
+    public void removeChangeListener( RegistryListener listener )
+    {
+        // no op
+    }
+
+    @Override
     public void reload()
     {
         // no op

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
 
b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
index 09ef495..51479bb 100644
--- 
a/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
+++ 
b/archiva-modules/plugins/maven2-repository/src/test/java/org/apache/archiva/metadata/repository/storage/maven2/conf/MockConfiguration.java
@@ -65,6 +65,12 @@ public class MockConfiguration
     }
 
     @Override
+    public void removeChangeListener( RegistryListener listener )
+    {
+        registryListeners.remove( listener );
+    }
+
+    @Override
     public Configuration getConfiguration()
     {
         return configuration;

http://git-wip-us.apache.org/repos/asf/archiva/blob/7808ee5f/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
----------------------------------------------------------------------
diff --git 
a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
 
b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
index 642e523..b4659ac 100644
--- 
a/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
+++ 
b/archiva-modules/plugins/stage-repository-merge/src/test/java/org/apache/archiva/configuration/StubConfiguration.java
@@ -67,6 +67,12 @@ public class StubConfiguration
     }
 
     @Override
+    public void removeChangeListener( RegistryListener listener )
+    {
+        throw new UnsupportedOperationException();
+    }
+
+    @Override
     public void reload()
     {
         // no op

Reply via email to