From: Mathieu Baudier Date: Wed, 14 Sep 2016 18:34:40 +0000 (+0000) Subject: Make deploy config initialisation more robust. X-Git-Tag: argeo-commons-2.1.46~30 X-Git-Url: https://git.argeo.org/?a=commitdiff_plain;h=277bb126a4b8523b93c2cd9abd345833a8387eba;p=lgpl%2Fargeo-commons.git Make deploy config initialisation more robust. git-svn-id: https://svn.argeo.org/commons/trunk@9147 4cfe0d0a-d680-48aa-b62c-e0a02a3f76cc --- diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java index 7a4ca1bf4..7a180cfc5 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/CmsDeployment.java @@ -34,6 +34,7 @@ import org.osgi.framework.ServiceReference; import org.osgi.framework.wiring.BundleCapability; import org.osgi.framework.wiring.BundleWire; import org.osgi.framework.wiring.BundleWiring; +import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.http.HttpService; import org.osgi.service.useradmin.UserAdmin; import org.osgi.util.tracker.ServiceTracker; @@ -42,11 +43,12 @@ public class CmsDeployment implements NodeDeployment { private final Log log = LogFactory.getLog(getClass()); private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); - private final DeployConfig deployConfig; + private DeployConfig deployConfig; private HomeRepository homeRepository; private Long availableSince; + private final boolean cleanState; // Readiness private boolean nodeAvailable = false; private boolean userAdminAvailable = false; @@ -59,8 +61,7 @@ public class CmsDeployment implements NodeDeployment { throw new CmsException("No node state available"); NodeState nodeState = bc.getService(nodeStateSr); - deployConfig = new DeployConfig(nodeState.isClean()); - httpExpected = deployConfig.getProps(KernelConstants.JETTY_FACTORY_PID, "default") != null; + cleanState = nodeState.isClean(); initTrackers(); } @@ -76,10 +77,20 @@ public class CmsDeployment implements NodeDeployment { return super.addingService(reference); } }.open(); + new ServiceTracker(bc, ConfigurationAdmin.class, null) { + @Override + public ConfigurationAdmin addingService(ServiceReference reference) { + ConfigurationAdmin configurationAdmin = bc.getService(reference); + deployConfig = new DeployConfig(configurationAdmin, cleanState); + httpExpected = deployConfig.getProps(KernelConstants.JETTY_FACTORY_PID, "default") != null; + return super.addingService(reference); + } + }.open(); } public void shutdown() { - deployConfig.save(); + if (deployConfig != null) + deployConfig.save(); } private void checkReadiness() { diff --git a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java index fbe206644..80bd91247 100644 --- a/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java +++ b/org.argeo.cms/src/org/argeo/cms/internal/kernel/DeployConfig.java @@ -39,8 +39,9 @@ class DeployConfig implements ConfigurationListener { private Path deployConfigPath = KernelUtils.getOsgiInstancePath(KernelConstants.DEPLOY_CONFIG_PATH); private SortedMap deployConfigs = new TreeMap<>(); - public DeployConfig(boolean isClean) { - ConfigurationAdmin configurationAdmin = bc.getService(bc.getServiceReference(ConfigurationAdmin.class)); + public DeployConfig(ConfigurationAdmin configurationAdmin,boolean isClean) { + // ConfigurationAdmin configurationAdmin = + // bc.getService(bc.getServiceReference(ConfigurationAdmin.class)); try { if (!Files.exists(deployConfigPath)) { // first init firstInit();