1 package org
.argeo
.equinox
.jetty
;
3 import java
.net
.HttpCookie
;
4 import java
.util
.Dictionary
;
7 import javax
.servlet
.ServletException
;
8 import javax
.servlet
.http
.HttpSession
;
10 import org
.eclipse
.equinox
.http
.jetty
.JettyCustomizer
;
11 import org
.eclipse
.jetty
.servlet
.ServletContextHandler
;
12 import org
.eclipse
.jetty
.websocket
.api
.UpgradeRequest
;
13 import org
.eclipse
.jetty
.websocket
.common
.WebSocketSession
;
14 import org
.eclipse
.jetty
.websocket
.common
.WebSocketSessionListener
;
15 import org
.eclipse
.jetty
.websocket
.jsr356
.server
.ServerContainer
;
16 import org
.eclipse
.jetty
.websocket
.jsr356
.server
.deploy
.WebSocketServerContainerInitializer
;
17 import org
.osgi
.framework
.BundleContext
;
18 import org
.osgi
.framework
.FrameworkUtil
;
20 public class WebSocketJettyCustomizer
extends JettyCustomizer
{
21 private BundleContext bc
= FrameworkUtil
.getBundle(WebSocketJettyCustomizer
.class).getBundleContext();
24 public Object
customizeContext(Object context
, Dictionary
<String
, ?
> settings
) {
25 ServletContextHandler servletContextHandler
= (ServletContextHandler
) context
;
26 new WebSocketInit(servletContextHandler
).start();
27 return super.customizeContext(context
, settings
);
30 /** Configure websocket container asynchronously as it may take some time */
31 private class WebSocketInit
extends Thread
{
32 ServletContextHandler servletContextHandler
;
34 public WebSocketInit(ServletContextHandler servletContextHandler
) {
35 super("WebSocket Init");
36 this.servletContextHandler
= servletContextHandler
;
41 ServerContainer serverContainer
;
43 serverContainer
= WebSocketServerContainerInitializer
.configureContext(servletContextHandler
);
44 // serverContainer.addSessionListener(new WebSocketSessionListener() {
47 // public void onSessionOpened(WebSocketSession session) {
48 // UpgradeRequest upgradeRequest = session.getUpgradeRequest();
49 // List<HttpCookie> cookies = upgradeRequest.getCookies();
50 // System.out.println("Upgrade request cookies : " + cookies);
51 // HttpSession httpSession = (HttpSession) upgradeRequest.getSession();
52 // System.out.println("Upgrade request session ID : " + httpSession.getId());
56 // public void onSessionClosed(WebSocketSession session) {
57 // // TODO Auto-generated method stub
61 } catch (ServletException e
) {
62 throw new IllegalStateException("Cannot configure web sockets", e
);
64 bc
.registerService(javax
.websocket
.server
.ServerContainer
.class, serverContainer
, null);
65 // ServiceTracker<ServerEndpointConfig.Builder, ServerEndpointConfig.Builder> endpointsTracker = new ServiceTracker<ServerEndpointConfig.Builder, ServerEndpointConfig.Builder>(
66 // bc, ServerEndpointConfig.Builder.class, null) {
69 // public ServerEndpointConfig.Builder addingService(
70 // ServiceReference<ServerEndpointConfig.Builder> reference) {
72 // ServerEndpointConfig.Builder serverEndpointConfig = super.addingService(reference);
74 // serverContainer.addEndpoint(serverEndpointConfig.build());
75 // } catch (DeploymentException e) {
76 // throw new IllegalArgumentException("Cannot add end point " + reference, e);
78 // return serverEndpointConfig;
81 // endpointsTracker.open();
82 // TODO log it properly
83 // TODO close itproperly