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