X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FCmsDeployment.java;h=20418ec4d21e803890e838abdfaec1b092a24337;hb=aa3eae8ed83ae3b8b3cc98826ee02d121795cb60;hp=c4dee903fb4513946a6dee37ce0fb07d67808330;hpb=8e9b429428549d18c14e6ccfab31d9c88fca68bc;p=lgpl%2Fargeo-commons.git 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 c4dee903f..20418ec4d 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.argeo.node.security.CryptoKeyring; import org.argeo.node.security.Keyring; import org.argeo.osgi.useradmin.UserAdminConf; import org.argeo.util.LangUtils; +import org.eclipse.equinox.http.jetty.JettyConfigurator; import org.osgi.framework.Bundle; import org.osgi.framework.BundleContext; import org.osgi.framework.Constants; @@ -45,6 +46,7 @@ import org.osgi.framework.wiring.BundleWiring; import org.osgi.service.cm.Configuration; import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.cm.ManagedService; +import org.osgi.service.useradmin.Group; import org.osgi.service.useradmin.Role; import org.osgi.service.useradmin.UserAdmin; import org.osgi.util.tracker.ServiceTracker; @@ -160,10 +162,14 @@ public class CmsDeployment implements NodeDeployment { UserTransaction userTransaction = bc.getService(bc.getServiceReference(UserTransaction.class)); try { userTransaction.begin(); - if (userAdmin.getRole(NodeConstants.ROLE_ADMIN) == null) - userAdmin.createRole(NodeConstants.ROLE_ADMIN, Role.GROUP); - if (userAdmin.getRole(NodeConstants.ROLE_USER_ADMIN) == null) - userAdmin.createRole(NodeConstants.ROLE_USER_ADMIN, Role.GROUP); + Role adminRole = userAdmin.getRole(NodeConstants.ROLE_ADMIN); + if (adminRole == null) { + adminRole = userAdmin.createRole(NodeConstants.ROLE_ADMIN, Role.GROUP); + } + if (userAdmin.getRole(NodeConstants.ROLE_USER_ADMIN) == null) { + Group userAdminRole = (Group) userAdmin.createRole(NodeConstants.ROLE_USER_ADMIN, Role.GROUP); + userAdminRole.addMember(adminRole); + } userTransaction.commit(); } catch (Exception e) { try { @@ -187,11 +193,25 @@ public class CmsDeployment implements NodeDeployment { public void shutdown() { if (nodeHttp != null) nodeHttp.destroy(); - if (deployConfig != null) - deployConfig.save(); + + try { + JettyConfigurator.stopServer(KernelConstants.DEFAULT_JETTY_SERVER); + } catch (Exception e) { + log.error("Cannot stop default Jetty server.", e); + } + + if (deployConfig != null) { + new Thread(() -> deployConfig.save(), "Save Argeo Deploy Config").start(); + } } - private void checkReadiness() { + /** + * Checks whether the deployment is available according to expectations, and + * mark it as available. + */ + private synchronized void checkReadiness() { + if (isAvailable()) + return; if (nodeAvailable && userAdminAvailable && (httpExpected ? httpAvailable : true)) { String data = KernelUtils.getFrameworkProp(KernelUtils.OSGI_INSTANCE_AREA); String state = KernelUtils.getFrameworkProp(KernelUtils.OSGI_CONFIGURATION_AREA); @@ -358,15 +378,19 @@ public class CmsDeployment implements NodeDeployment { properties.put(Constants.SERVICE_RANKING, Integer.MAX_VALUE); LocalRepository localRepository = new LocalRepository(repository, dataModelName); bc.registerService(Repository.class, localRepository, properties); - if (log.isDebugEnabled()) - log.debug("Published data model " + dataModelName); + if (log.isTraceEnabled()) + log.trace("Published data model " + dataModelName); } @Override - public Long getAvailableSince() { + public synchronized Long getAvailableSince() { return availableSince; } + public synchronized boolean isAvailable() { + return availableSince != null; + } + private class RepositoryContextStc extends ServiceTracker { public RepositoryContextStc() {