[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
