]> git.argeo.org Git - lgpl/argeo-commons.git/blob - jetty/WebSocketJettyCustomizer.java
Prepare next development cycle
[lgpl/argeo-commons.git] / jetty / WebSocketJettyCustomizer.java
1 package org.argeo.equinox.jetty;
2
3 import java.net.HttpCookie;
4 import java.util.Dictionary;
5 import java.util.List;
6
7 import javax.servlet.ServletException;
8 import javax.servlet.http.HttpSession;
9
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;
19
20 public class WebSocketJettyCustomizer extends JettyCustomizer {
21 private BundleContext bc = FrameworkUtil.getBundle(WebSocketJettyCustomizer.class).getBundleContext();
22
23 @Override
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);
28 }
29
30 /** Configure websocket container asynchronously as it may take some time */
31 private class WebSocketInit extends Thread {
32 ServletContextHandler servletContextHandler;
33
34 public WebSocketInit(ServletContextHandler servletContextHandler) {
35 super("WebSocket Init");
36 this.servletContextHandler = servletContextHandler;
37 }
38
39 @Override
40 public void run() {
41 ServerContainer serverContainer;
42 try {
43 serverContainer = WebSocketServerContainerInitializer.configureContext(servletContextHandler);
44 // serverContainer.addSessionListener(new WebSocketSessionListener() {
45 //
46 // @Override
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());
53 // }
54 //
55 // @Override
56 // public void onSessionClosed(WebSocketSession session) {
57 // // TODO Auto-generated method stub
58 //
59 // }
60 // });
61 } catch (ServletException e) {
62 throw new IllegalStateException("Cannot configure web sockets", e);
63 }
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) {
67 //
68 // @Override
69 // public ServerEndpointConfig.Builder addingService(
70 // ServiceReference<ServerEndpointConfig.Builder> reference) {
71 //
72 // ServerEndpointConfig.Builder serverEndpointConfig = super.addingService(reference);
73 // try {
74 // serverContainer.addEndpoint(serverEndpointConfig.build());
75 // } catch (DeploymentException e) {
76 // throw new IllegalArgumentException("Cannot add end point " + reference, e);
77 // }
78 // return serverEndpointConfig;
79 // }
80 // };
81 // endpointsTracker.open();
82 // TODO log it properly
83 // TODO close itproperly
84 }
85
86 }
87
88 }