X-Git-Url: https://git.argeo.org/?a=blobdiff_plain;f=org.argeo.cms%2Fsrc%2Forg%2Fargeo%2Fcms%2Finternal%2Fkernel%2FDeployConfig.java;h=d52fe663bdea694c360ecadb622fa4d02401c09f;hb=1b09095425a7c067c097eb91bed5b4a4a33f0dc8;hp=ffb79b202b7eb0390cdec879068ab449d7a9e1ce;hpb=aa3eae8ed83ae3b8b3cc98826ee02d121795cb60;p=lgpl%2Fargeo-commons.git 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 ffb79b202..d52fe663b 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 @@ -16,10 +16,13 @@ import javax.naming.directory.Attributes; import javax.naming.directory.BasicAttributes; import javax.naming.ldap.LdapName; import javax.naming.ldap.Rdn; +import javax.websocket.server.ServerEndpointConfig; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.argeo.cms.CmsException; +import org.argeo.cms.internal.http.InternalHttpConstants; +import org.argeo.cms.websocket.CmsWebSocketConfigurator; import org.argeo.naming.AttributesDictionary; import org.argeo.naming.LdifParser; import org.argeo.naming.LdifWriter; @@ -33,6 +36,7 @@ import org.osgi.service.cm.ConfigurationAdmin; import org.osgi.service.cm.ConfigurationEvent; import org.osgi.service.cm.ConfigurationListener; +/** Manages the LDIF-based deployment configuration. */ class DeployConfig implements ConfigurationListener { private final Log log = LogFactory.getLog(getClass()); private final BundleContext bc = FrameworkUtil.getBundle(getClass()).getBundleContext(); @@ -128,17 +132,50 @@ class DeployConfig implements ConfigurationListener { // webServerConfig.put("customizer.class", "org.argeo.equinox.jetty.CmsJettyCustomizer"); // putFactoryDeployConfig(KernelConstants.JETTY_FACTORY_PID, webServerConfig); // } + LdapName defaultHttpServiceDn = serviceDn(KernelConstants.JETTY_FACTORY_PID, NodeConstants.DEFAULT); + if (deployConfigs.containsKey(defaultHttpServiceDn)) { + // remove old default configs since we have now to start Jetty servlet bridge + // indirectly + deployConfigs.remove(defaultHttpServiceDn); + } + + // SAVE save(); + // - // Explicitly configure Jetty so that the default server is not started by the + // Explicitly configures Jetty so that the default server is not started by the // activator of the Equinox Jetty bundle. Dictionary webServerConfig = InitUtils .getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, NodeConstants.DEFAULT)); if (!webServerConfig.isEmpty()) { webServerConfig.put("customizer.class", KernelConstants.CMS_JETTY_CUSTOMIZER_CLASS); + + // TODO centralise with Jetty extender + Object webSocketEnabled = webServerConfig.get(InternalHttpConstants.WEBSOCKET_ENABLED); + if (webSocketEnabled != null && webSocketEnabled.toString().equals("true")) { + bc.registerService(ServerEndpointConfig.Configurator.class, new CmsWebSocketConfigurator(), null); + webServerConfig.put(InternalHttpConstants.WEBSOCKET_ENABLED, "true"); + } } + + int tryCount = 60; try { - JettyConfigurator.startServer(KernelConstants.DEFAULT_JETTY_SERVER, webServerConfig); + tryGettyJetty: while (tryCount > 0) { + try { + JettyConfigurator.startServer(KernelConstants.DEFAULT_JETTY_SERVER, webServerConfig); + // Explicitly starts Jetty OSGi HTTP bundle, so that it gets triggered if OSGi + // configuration is not cleaned + FrameworkUtil.getBundle(JettyConfigurator.class).start(); + break tryGettyJetty; + } catch (IllegalStateException e) { + // Jetty may not be ready + try { + Thread.sleep(1000); + } catch (Exception e1) { + // silent + } + } + } } catch (Exception e) { log.error("Cannot start default Jetty server with config " + webServerConfig, e); }