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>.