001    package org.granite.gravity.glassfish;
002    
003    import javax.servlet.ServletConfig;
004    import javax.servlet.ServletException;
005    import javax.servlet.ServletRegistration;
006    import javax.servlet.http.HttpServlet;
007    
008    import org.granite.gravity.Gravity;
009    import org.granite.gravity.GravityManager;
010    import org.granite.gravity.GravityServletUtil;
011    import org.granite.logging.Logger;
012    
013    import com.sun.grizzly.websockets.WebSocketApplication;
014    import com.sun.grizzly.websockets.WebSocketEngine;
015    
016    
017    public class GlassFishWebSocketServlet extends HttpServlet {
018            
019            @SuppressWarnings("unused")
020            private static final Logger log = Logger.getLogger(GlassFishWebSocketServlet.class);
021    
022            private static final long serialVersionUID = 1L;
023            
024            private WebSocketApplication app;
025            
026            @Override
027            public void init(ServletConfig config) throws ServletException {
028                    super.init(config);
029                    
030                    GravityServletUtil.init(config);
031                    Gravity gravity = GravityManager.getGravity(getServletContext());
032                    String mapping = null;
033                    for (ServletRegistration sr : getServletContext().getServletRegistrations().values()) {
034                            if (!sr.getClassName().equals(getClass().getName()))
035                                    continue;
036                            mapping = sr.getMappings().iterator().next(); 
037                    }
038                    app = new GlassFishWebSocketApplication(getServletContext(), gravity, mapping);
039            WebSocketEngine.getEngine().register(app);
040            }
041    
042        @Override
043        public void destroy() {
044            WebSocketEngine.getEngine().unregister(app);
045            app = null;
046        }
047    
048    }