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 <[email protected]>
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
"[email protected]" <[email protected]>.

Reply via email to