argeo.osgi.start.2.node=\
org.eclipse.equinox.http.servlet,\
-org.eclipse.equinox.http.jetty,\
org.eclipse.equinox.metatype,\
org.eclipse.equinox.cm,\
org.eclipse.equinox.ds,\
# Required standard bundles to start
argeo.osgi.start.2.node=\
org.eclipse.equinox.http.servlet,\
-org.eclipse.equinox.http.jetty,\
org.eclipse.equinox.metatype,\
org.eclipse.equinox.cm,\
org.eclipse.equinox.ds,\
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;
public void shutdown() {
if (nodeHttp != null)
nodeHttp.destroy();
+
+ 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();
}
import org.argeo.naming.LdifWriter;
import org.argeo.node.NodeConstants;
import org.argeo.osgi.useradmin.UserAdminConf;
+import org.eclipse.equinox.http.jetty.JettyConfigurator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
import org.osgi.service.cm.Configuration;
}
// http server
+// Dictionary<String, Object> webServerConfig = InitUtils
+// .getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, NodeConstants.DEFAULT));
+// if (!webServerConfig.isEmpty()) {
+// // TODO check for other customizers
+// webServerConfig.put("customizer.class", "org.argeo.equinox.jetty.CmsJettyCustomizer");
+// putFactoryDeployConfig(KernelConstants.JETTY_FACTORY_PID, webServerConfig);
+// }
+ save();
+
+ // Explicitly configure Jetty so that the default server is not started by the
+ // activator of the Equinox Jetty bundle.
Dictionary<String, Object> webServerConfig = InitUtils
.getHttpServerConfig(getProps(KernelConstants.JETTY_FACTORY_PID, NodeConstants.DEFAULT));
if (!webServerConfig.isEmpty()) {
- // TODO chekc for other customizers
- webServerConfig.put("customizer.class", "org.argeo.equinox.jetty.CmsJettyCustomizer");
- putFactoryDeployConfig(KernelConstants.JETTY_FACTORY_PID, webServerConfig);
+ webServerConfig.put("customizer.class", KernelConstants.CMS_JETTY_CUSTOMIZER_CLASS);
}
- save();
+ try {
+ JettyConfigurator.startServer(KernelConstants.DEFAULT_JETTY_SERVER, webServerConfig);
+ } catch (Exception e) {
+ log.error("Cannot start default Jetty server with config " + webServerConfig, e);
+ }
+
}
private void init(ConfigurationAdmin configurationAdmin, boolean isClean, boolean isFirstInit) throws IOException {
String JETTY_FACTORY_PID = "org.eclipse.equinox.http.jetty.config";
String WHITEBOARD_PATTERN_PROP = "osgi.http.whiteboard.servlet.pattern";
+ // default Jetty server configured via JettyConfigurator
+ String DEFAULT_JETTY_SERVER = "default";
+ String CMS_JETTY_CUSTOMIZER_CLASS = "org.argeo.equinox.jetty.CmsJettyCustomizer";
// avoid dependencies
String CONTEXT_NAME_PROP = "contextName";
org.eclipse.jetty.websocket.api,\
org.eclipse.jetty.websocket.common,\
org.osgi.service.http,\
+org.argeo.cms.auth,\
+org.argeo.node,\
*
\ No newline at end of file
import java.util.Dictionary;
-import javax.servlet.ServletException;
+import javax.servlet.ServletContext;
+import javax.websocket.DeploymentException;
import org.eclipse.equinox.http.jetty.JettyCustomizer;
import org.eclipse.jetty.servlet.ServletContextHandler;
import org.eclipse.jetty.websocket.jsr356.server.ServerContainer;
import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer;
+import org.eclipse.jetty.websocket.jsr356.server.deploy.WebSocketServerContainerInitializer.Configurator;
import org.osgi.framework.BundleContext;
import org.osgi.framework.FrameworkUtil;
public Object customizeContext(Object context, Dictionary<String, ?> settings) {
// WebSocket
Object webSocketEnabled = settings.get("websocket.enabled");
+ if (webSocketEnabled == null) {
+ webSocketEnabled = bc.getProperty("org.eclipse.equinox.http.jetty.websocket.enabled");
+ }
if (webSocketEnabled != null && webSocketEnabled.toString().equals("true")) {
ServletContextHandler servletContextHandler = (ServletContextHandler) context;
- new WebSocketInit(servletContextHandler).start();
+ WebSocketServerContainerInitializer.configure(servletContextHandler, new Configurator() {
+
+ @Override
+ public void accept(ServletContext servletContext, ServerContainer serverContainer)
+ throws DeploymentException {
+ bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null);
+ }
+ });
}
return super.customizeContext(context, settings);
}
-
- /** Configure websocket container asynchronously as it may take some time */
- private class WebSocketInit extends Thread {
- ServletContextHandler servletContextHandler;
-
- public WebSocketInit(ServletContextHandler servletContextHandler) {
- super("WebSocket Init");
- this.servletContextHandler = servletContextHandler;
- }
-
- @Override
- public void run() {
- ServerContainer serverContainer;
- try {
- serverContainer = WebSocketServerContainerInitializer.configureContext(servletContextHandler);
- } catch (ServletException e) {
- throw new IllegalStateException("Cannot configure web sockets", e);
- }
- bc.registerService(javax.websocket.server.ServerContainer.class, serverContainer, null);
- }
-
- }
}