Using Atmosphere with other Framework like RestEasy, Wink or Struts - Atmosphere/atmosphere Wiki

To use Atmosphere with other REST framework, all you need to do is to configure their servlet in atmosphere.xml

<atmosphere-handlers>
    <!-- CXF -->
    <atmosphere-handler support-session="false"
                        context-root="/*"
                        class-name="org.atmosphere.handler.ReflectorServletProcessor">
        <property name="servletClassName" 
                  value="org.apache.cxf.transport.servlet.CXFServlet"/>
    </atmosphere-handler>
</atmosphere-handlers>

<atmosphere-handlers>
    <!-- RestLet -->
    <atmosphere-handler support-session="false"
                        context-root="/*"
                        class-name="org.atmosphere.handler.ReflectorServletProcessor">
        <property name="servletClassName" 
                  value="org.restlet.ext.servlet.ServerServlet"/>
    </atmosphere-handler>
</atmosphere-handlers>

<atmosphere-handlers>
    <!-- Wink -->
    <atmosphere-handler support-session="false"
                        context-root="/*"
                        class-name="org.atmosphere.handler.ReflectorServletProcessor">
        <property name="servletClassName" 
                  value="org.apache.wink.server.internal.servlet.RestServlet"/>
    </atmosphere-handler>
</atmosphere-handlers>

<atmosphere-handlers>
    <!-- RESTEasy -->
    <atmosphere-handler support-session="false"
                        context-root="/*"
                        class-name="org.atmosphere.handler.ReflectorServletProcessor">
        <property name="servletClassName"  
              value="org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher"/>
    </atmosphere-handler>
</atmosphere-handlers>

And then in your resource you can retrieve the Atmosphere's object by doing:

@Path("/")
public class Foo {
   @Context HttpServletRequest req;
   @Path("/suspend")
   public void suspend() {
          AtmosphereResource r = (AtmosphereResource)
                req.getAttribute("org.atmosphere.cpr.AtmosphereResource");
          r.setBroadcaster(r.getAtmosphereConfig().getBroadcasterFactory().lookup("/myChannel"))
           .suspend();
   }

   @POST
   @Path("/broadcast")
   public String broadcast(String message) {
       AtmosphereResource r = (AtmosphereResource)
                req.getAttribute("org.atmosphere.cpr.AtmosphereResource");
       r.getAtmosphereConfig().getBroadcasterFactory().get("/myChannel").broadcast(messages);
       return "OK";
   }
}

You can also use the @AtmosphereService annotation directly, without any web/atmosphere.xml

@Path("/chat")
@AtmosphereService(
        dispatch = false,
        interceptors = {AtmosphereResourceLifecycleInterceptor.class, TrackMessageSizeInterceptor.class},
        path = "/chat",
        servlet = "org.glassfish.jersey.servlet.ServletContainer")
public class Jersey2Resource {

    /**
     * Echo the chat message. Jackson can clearly be used here, but for simplicity we just echo what we receive.
     * @param message
     */
    @POST
    public void broadcast(String message, @Context HttpServletRequest req) {
       AtmosphereResource r = (AtmosphereResource)
                req.getAttribute("org.atmosphere.cpr.AtmosphereResource");
       r.getAtmosphereConfig().getBroadcasterFactory().lookup("/chat").broadcast(message);
    }

}