001package org.granite.gravity.glassfish;
002
003import javax.servlet.ServletConfig;
004import javax.servlet.ServletException;
005import javax.servlet.ServletRegistration;
006import javax.servlet.http.HttpServlet;
007
008import org.granite.gravity.Gravity;
009import org.granite.gravity.GravityManager;
010import org.granite.gravity.GravityServletUtil;
011import org.granite.logging.Logger;
012
013import com.sun.grizzly.websockets.WebSocketApplication;
014import com.sun.grizzly.websockets.WebSocketEngine;
015
016
017public 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}