You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:42:29 UTC

[sling-org-apache-sling-installer-factory-configuration] 05/11: SLING-1971 : Persist configuration (and bundle) changes not made through the installer

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

rombert pushed a commit to annotated tag org.apache.sling.installer.factory.configuration-1.0.0
in repository https://gitbox.apache.org/repos/asf/sling-org-apache-sling-installer-factory-configuration.git

commit 39d3129c763065bef4973cce4c25672354bc0c1b
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Wed Mar 2 12:51:19 2011 +0000

    SLING-1971 : Persist configuration (and bundle) changes not made through the installer
    
    git-svn-id: https://svn.apache.org/repos/asf/sling/trunk/installer/factories/configuration@1076199 13f79535-47bb-0310-9956-ffa450edef68
---
 .../configuration/impl/ConfigInstallTask.java      | 66 +++++++++++-----------
 .../configuration/impl/ConfigRemoveTask.java       | 32 ++++++-----
 .../configuration/impl/ConfigTaskCreator.java      | 36 +++++++-----
 3 files changed, 73 insertions(+), 61 deletions(-)

diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
index 3b0d657..775d605 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigInstallTask.java
@@ -43,42 +43,44 @@ public class ConfigInstallTask extends AbstractConfigTask {
     @SuppressWarnings("unchecked")
 	@Override
     public void execute(final InstallationContext ctx) {
-        final ConfigurationAdmin ca = this.getConfigurationAdmin();
+        synchronized ( ConfigTaskCreator.getLock() ) {
+            final ConfigurationAdmin ca = this.getConfigurationAdmin();
 
-        // Get or create configuration, but do not
-        // update if the new one has the same values.
-        boolean created = false;
-        try {
-            Configuration config = getConfiguration(ca, false);
-            if (config == null) {
-                created = true;
-                config = getConfiguration(ca, true);
-            } else {
-    			if (ConfigUtil.isSameData(config.getProperties(), getResource().getDictionary())) {
-    			    this.getLogger().debug("Configuration {} already installed with same data, update request ignored: {}",
-    	                        config.getPid(), getResource());
-    				config = null;
-    			}
-            }
-
-            if (config != null) {
-                if (config.getBundleLocation() != null) {
-                    config.setBundleLocation(null);
+            // Get or create configuration, but do not
+            // update if the new one has the same values.
+            boolean created = false;
+            try {
+                Configuration config = getConfiguration(ca, false);
+                if (config == null) {
+                    created = true;
+                    config = getConfiguration(ca, true);
+                } else {
+        			if (ConfigUtil.isSameData(config.getProperties(), getResource().getDictionary())) {
+        			    this.getLogger().debug("Configuration {} already installed with same data, update request ignored: {}",
+        	                        config.getPid(), getResource());
+        				config = null;
+        			}
                 }
-                config.update(getDictionary());
-                ctx.log("Installed configuration {} from resource {}", config.getPid(), getResource());
-                if ( this.factoryPid != null ) {
-                    this.aliasPid = config.getPid();
+
+                if (config != null) {
+                    if (config.getBundleLocation() != null) {
+                        config.setBundleLocation(null);
+                    }
+                    config.update(getDictionary());
+                    ctx.log("Installed configuration {} from resource {}", config.getPid(), getResource());
+                    if ( this.factoryPid != null ) {
+                        this.aliasPid = config.getPid();
+                    }
+                    this.setFinishedState(ResourceState.INSTALLED, this.getCompositeAliasPid());
+                    this.getLogger().debug("Configuration " + config.getPid()
+                                + " " + (created ? "created" : "updated")
+                                + " from " + getResource());
+                } else {
+                    this.setFinishedState(ResourceState.IGNORED, this.getCompositeAliasPid());
                 }
-                this.setFinishedState(ResourceState.INSTALLED, this.getCompositeAliasPid());
-                this.getLogger().debug("Configuration " + config.getPid()
-                            + " " + (created ? "created" : "updated")
-                            + " from " + getResource());
-            } else {
-                this.setFinishedState(ResourceState.IGNORED, this.getCompositeAliasPid());
+            } catch (Exception e) {
+                this.getLogger().debug("Exception during installation of config " + this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
             }
-        } catch (Exception e) {
-            this.getLogger().debug("Exception during installation of config " + this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
index 0db55de..0acb4b9 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigRemoveTask.java
@@ -44,26 +44,28 @@ public class ConfigRemoveTask extends AbstractConfigTask {
      */
     @SuppressWarnings("unchecked")
     public void execute(final InstallationContext ctx) {
-        final ConfigurationAdmin ca = this.getConfigurationAdmin();
+        synchronized ( ConfigTaskCreator.getLock() ) {
+            final ConfigurationAdmin ca = this.getConfigurationAdmin();
 
-        try {
-            final Configuration cfg = getConfiguration(ca, false);
-            if (cfg == null) {
-                this.getLogger().debug("Cannot delete config , pid={} not found, ignored ({})", getCompositePid(), getResource());
-                this.setFinishedState(ResourceState.IGNORED);
-            } else {
-                if ( !ConfigUtil.isSameData(cfg.getProperties(), this.getResource().getDictionary()) ) {
-                    this.getLogger().debug("Configuration has changed after it has been installed. Not removing!");
+            try {
+                final Configuration cfg = getConfiguration(ca, false);
+                if (cfg == null) {
+                    this.getLogger().debug("Cannot delete config , pid={} not found, ignored ({})", getCompositePid(), getResource());
                     this.setFinishedState(ResourceState.IGNORED);
                 } else {
-                    this.getLogger().debug("Deleting config {} ({})", getCompositePid(), getResource());
-                    cfg.delete();
-                    ctx.log("Deleted configuration {} from resource {}", getCompositePid(), getResource());
-                    this.setFinishedState(ResourceState.UNINSTALLED);
+                    if ( !ConfigUtil.isSameData(cfg.getProperties(), this.getResource().getDictionary()) ) {
+                        this.getLogger().debug("Configuration has changed after it has been installed. Not removing!");
+                        this.setFinishedState(ResourceState.IGNORED);
+                    } else {
+                        this.getLogger().debug("Deleting config {} ({})", getCompositePid(), getResource());
+                        cfg.delete();
+                        ctx.log("Deleted configuration {} from resource {}", getCompositePid(), getResource());
+                        this.setFinishedState(ResourceState.UNINSTALLED);
+                    }
                 }
+            } catch (Exception e) {
+                this.getLogger().debug("Exception during removal of config " + this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
             }
-        } catch (Exception e) {
-            this.getLogger().debug("Exception during removal of config " + this.getResource() + " : " + e.getMessage() + ". Retrying later.", e);
         }
     }
 }
\ No newline at end of file
diff --git a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
index da6d602..ce608ff 100644
--- a/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
+++ b/src/main/java/org/apache/sling/installer/factories/configuration/impl/ConfigTaskCreator.java
@@ -80,21 +80,23 @@ public class ConfigTaskCreator
      */
     @SuppressWarnings("unchecked")
     public void configurationEvent(final ConfigurationEvent event) {
-        final String id = (event.getFactoryPid() == null ? "" : event.getFactoryPid() + ".") + event.getPid();
-        if ( event.getType() == ConfigurationEvent.CM_DELETED ) {
-            this.changeListener.resourceRemoved(InstallableResource.TYPE_CONFIG, id);
-        } else {
-            try {
-                final Configuration config = ConfigUtil.getConfiguration(configAdmin,
-                        event.getFactoryPid(),
-                        event.getPid(),
-                        false);
-                if ( config != null ) {
-                    final Dictionary<String, Object> dict = ConfigUtil.cleanConfiguration(config.getProperties());
-                    this.changeListener.resourceAddedOrUpdated(InstallableResource.TYPE_CONFIG, id, null, dict);
+        synchronized ( ConfigTaskCreator.getLock() ) {
+            final String id = (event.getFactoryPid() == null ? "" : event.getFactoryPid() + ".") + event.getPid();
+            if ( event.getType() == ConfigurationEvent.CM_DELETED ) {
+                this.changeListener.resourceRemoved(InstallableResource.TYPE_CONFIG, id);
+            } else {
+                try {
+                    final Configuration config = ConfigUtil.getConfiguration(configAdmin,
+                            event.getFactoryPid(),
+                            event.getPid(),
+                            false);
+                    if ( config != null ) {
+                        final Dictionary<String, Object> dict = ConfigUtil.cleanConfiguration(config.getProperties());
+                        this.changeListener.resourceAddedOrUpdated(InstallableResource.TYPE_CONFIG, id, null, dict);
+                    }
+                } catch ( final Exception ignore) {
+                    // ignore for now (TODO)
                 }
-            } catch ( final Exception ignore) {
-                // ignore for now (TODO)
             }
         }
     }
@@ -176,4 +178,10 @@ public class ConfigTaskCreator
         }
         return false;
     }
+
+    private static final Object LOCK = new Object();
+
+    public static Object getLock() {
+        return LOCK;
+    }
 }

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.