org.atmosphere.cpr
Class AtmosphereServlet

java.lang.Object
  extended by javax.servlet.GenericServlet
      extended by javax.servlet.http.HttpServlet
          extended by weblogic.servlet.http.AbstractAsyncServlet
              extended by org.atmosphere.cpr.AtmosphereServlet
All Implemented Interfaces:
Serializable, Servlet, ServletConfig, org.apache.catalina.CometProcessor, org.jboss.servlet.http.HttpEventServlet
Direct Known Subclasses:
MeteorServlet

public class AtmosphereServlet
extends weblogic.servlet.http.AbstractAsyncServlet
implements org.apache.catalina.CometProcessor, org.jboss.servlet.http.HttpEventServlet

The AtmosphereServlet acts as a dispatcher for AtmosphereHandler defined in META-INF/atmosphere.xml, or if atmosphere.xml is missing, all classes that implements AtmosphereHandler will be discovered and mapped using the class's name. This Servlet can be defined inside an application's web.xml using the following:


    <servlet>
        <description>AtmosphereServlet</description>
        <servlet-name>AtmosphereServlet</servlet-name>
        <servlet-class>org.atmosphere.cpr.AtmosphereServlet</servlet-class>
        <load-on-startup>0 </load-on-startup>
    </servlet>
    <servlet-mapping>
         <servlet-name>AtmosphereServlet</servlet-name>
         <url-pattern>/Atmosphere </url-pattern>
    </servlet-mapping>
 

You can force this Servlet to use native API of the Web Server instead of the Servlet 3.0 Async API you are deploying on by adding


    <init-param>
         <param-name>org.atmosphere.useNative</param-name>
         <param-value>true</param-value>
    </init-param>
 

You can force this Servlet to use one Thread per connection instead of native API of the Web Server you are deploying on by adding


    <init-param>
         <param-name>org.atmosphere.useBlocking</param-name>
         <param-value>true</param-value>
    </init-param>
 

The Atmosphere Framework can also be used as a Servlet Filter (AtmosphereFilter). If you are planning to use JSP, Servlet or JSF, you can instead use the MeteorServlet, which allow the use of Meteor inside those components.

Author:
Jeanfrancois Arcand
See Also:
Serialized Form

Nested Class Summary
static class AtmosphereServlet.Action
          Simple class/struck that hold the current state.
 class AtmosphereServlet.AtmosphereConfig
           
static class AtmosphereServlet.AtmosphereHandlerWrapper
           
 
Field Summary
protected  Map<String,AtmosphereServlet.AtmosphereHandlerWrapper> atmosphereHandlers
          The list of AtmosphereHandler and their associated mapping.
static String BROADCASTER_TYPE
           
protected  CometSupport cometSupport
           
protected  AtmosphereServlet.AtmosphereConfig config
           
static String DISABLE_ONSTATE_EVENT
           
static String GAE_BROADCASTER
           
static String JERSEY_BROADCASTER
           
static String JERSEY_CONTAINER
           
static Logger logger
           
static String PRIMEFACES_SERVLET
           
static String PROPERTY_BLOCKING_COMETSUPPORT
           
static String PROPERTY_COMET_SUPPORT
           
static String PROPERTY_NATIVE_COMETSUPPORT
           
static String PROPERTY_SERVLET_MAPPING
           
static String PROPERTY_USE_STREAM
           
 
Constructor Summary
AtmosphereServlet()
          Create an Atmosphere Servlet.
AtmosphereServlet(boolean isFilter)
          Create an Atmosphere Servlet.
 
Method Summary
 void addAtmosphereHandler(String mapping, AtmosphereHandler h)
          Add an AtmosphereHandler serviced by the Servlet This API is exposed to allow embedding an Atmosphere application.
 void addInitParameter(String name, String value)
          Add init-param like if they were defined in web.xml
protected  void autoDetectAtmosphereHandlers(ServletContext sc, URLClassLoader c)
          Auto detect instance of AtmosphereHandler in case META-INF/atmosphere.xml is missing.
protected  void autoDetectContainer()
          Auto detect the underlying Servlet Container we are running on.
protected  CometSupportResolver createCometSupportResolver()
          Returns an instance of CometSupportResolver CometSupportResolver
 void destroy()
           
protected  boolean detectJerseyRuntime(ServletConfig sc)
          Auto-detect Jersey when no atmosphere.xml file are specified.
protected  AtmosphereServlet.Action doCometSupport(HttpServletRequest req, HttpServletResponse res)
          Invoke the proprietary CometSupport
 void doDelete(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
 void doGet(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
 void doHead(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
protected  void doInitParams(ServletConfig sc)
          Read init param from web.xml and apply them.
 void doOptions(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
 void doPost(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
 void doPut(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
protected  boolean doRequest(weblogic.servlet.http.RequestResponseKey rrk)
          Weblogic specific comet based implementation.
protected  void doResponse(weblogic.servlet.http.RequestResponseKey rrk, Object context)
          Weblogic specific comet based implementation.
protected  void doTimeout(weblogic.servlet.http.RequestResponseKey rrk)
          Weblogic specific comet based implementation.
 void doTrace(HttpServletRequest req, HttpServletResponse res)
          Delegate the request processing to an instance of CometSupport
 void event(org.apache.catalina.CometEvent cometEvent)
          Hack to support Tomcat AIO like other WebServer.
 void event(org.jboss.servlet.http.HttpEvent httpEvent)
          Hack to support JBossWeb AIO like other WebServer.
 CometSupport getCometSupport()
          Return the current CometSupport
 String getDefaultBroadcasterClassName()
          Return the default Broadcaster class name.
 void init(ServletConfig sc)
          Load the AtmosphereHandler associated with this AtmosphereServlet.
 boolean isUseStreamForFlushingComments()
          true if Atmosphere uses ServletResponse.getOutputStream() by default for write operation.
protected  void loadAtmosphereDotXml(InputStream stream, URLClassLoader c)
          Load AtmosphereHandler defined under META-INF/atmosphere.xml
protected  void loadConfiguration(ServletConfig sc)
           
 AtmosphereServlet.AtmosphereConfig newAtmosphereConfig(boolean supportSession)
          Return a configured instance of AtmosphereServlet.AtmosphereConfig
 void setCometSupport(CometSupport cometSupport)
          Set the CometSupport implementation.
 void setDefaultBroadcasterClassName(String broadcasterClassName)
          Set the default Broadcaster class name
 void setUseStreamForFlushingComments(boolean useStreamForFlushingComments)
          Set to true so Atmosphere uses ServletResponse.getOutputStream() by default for write operation.
 
Methods inherited from class weblogic.servlet.http.AbstractAsyncServlet
notify
 
Methods inherited from class javax.servlet.http.HttpServlet
getLastModified, service, service
 
Methods inherited from class javax.servlet.GenericServlet
getInitParameter, getInitParameterNames, getServletConfig, getServletContext, getServletInfo, getServletName, init, log, log
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 
Methods inherited from interface javax.servlet.Servlet
getServletConfig, getServletInfo, service
 

Field Detail

JERSEY_BROADCASTER

public static final String JERSEY_BROADCASTER
See Also:
Constant Field Values

JERSEY_CONTAINER

public static final String JERSEY_CONTAINER
See Also:
Constant Field Values

GAE_BROADCASTER

public static final String GAE_BROADCASTER

PROPERTY_SERVLET_MAPPING

public static final String PROPERTY_SERVLET_MAPPING
See Also:
Constant Field Values

PROPERTY_BLOCKING_COMETSUPPORT

public static final String PROPERTY_BLOCKING_COMETSUPPORT
See Also:
Constant Field Values

PROPERTY_NATIVE_COMETSUPPORT

public static final String PROPERTY_NATIVE_COMETSUPPORT
See Also:
Constant Field Values

PROPERTY_USE_STREAM

public static final String PROPERTY_USE_STREAM
See Also:
Constant Field Values

BROADCASTER_TYPE

public static final String BROADCASTER_TYPE
See Also:
Constant Field Values

PROPERTY_COMET_SUPPORT

public static final String PROPERTY_COMET_SUPPORT
See Also:
Constant Field Values

PRIMEFACES_SERVLET

public static final String PRIMEFACES_SERVLET
See Also:
Constant Field Values

DISABLE_ONSTATE_EVENT

public static final String DISABLE_ONSTATE_EVENT
See Also:
Constant Field Values

logger

public static final Logger logger

atmosphereHandlers

protected Map<String,AtmosphereServlet.AtmosphereHandlerWrapper> atmosphereHandlers
The list of AtmosphereHandler and their associated mapping.


cometSupport

protected CometSupport cometSupport

config

protected AtmosphereServlet.AtmosphereConfig config
Constructor Detail

AtmosphereServlet

public AtmosphereServlet()
Create an Atmosphere Servlet.


AtmosphereServlet

public AtmosphereServlet(boolean isFilter)
Create an Atmosphere Servlet.

Method Detail

newAtmosphereConfig

public AtmosphereServlet.AtmosphereConfig newAtmosphereConfig(boolean supportSession)
Return a configured instance of AtmosphereServlet.AtmosphereConfig

Parameters:
supportSession - true if session is supported.
Returns:
a configured instance of AtmosphereServlet.AtmosphereConfig

addAtmosphereHandler

public void addAtmosphereHandler(String mapping,
                                 AtmosphereHandler h)
Add an AtmosphereHandler serviced by the Servlet This API is exposed to allow embedding an Atmosphere application.

Parameters:
mapping - The servlet mapping (servlet path)
h - implementation of an AtmosphereHandler

addInitParameter

public void addInitParameter(String name,
                             String value)
Add init-param like if they were defined in web.xml

Parameters:
name - The name
value - The value

init

public void init(ServletConfig sc)
          throws ServletException
Load the AtmosphereHandler associated with this AtmosphereServlet.

Specified by:
init in interface Servlet
Overrides:
init in class GenericServlet
Parameters:
sc - the ServletContext
Throws:
ServletException

doInitParams

protected void doInitParams(ServletConfig sc)
Read init param from web.xml and apply them.

Parameters:
sc -

loadConfiguration

protected void loadConfiguration(ServletConfig sc)
                          throws ServletException
Throws:
ServletException

detectJerseyRuntime

protected boolean detectJerseyRuntime(ServletConfig sc)
Auto-detect Jersey when no atmosphere.xml file are specified.

Parameters:
sc - ServletConfig
Returns:
true if Jersey classes are detected

destroy

public void destroy()
Specified by:
destroy in interface Servlet
Overrides:
destroy in class GenericServlet

loadAtmosphereDotXml

protected void loadAtmosphereDotXml(InputStream stream,
                                    URLClassLoader c)
                             throws IOException,
                                    ServletException
Load AtmosphereHandler defined under META-INF/atmosphere.xml

Throws:
IOException
ServletException

setCometSupport

public void setCometSupport(CometSupport cometSupport)
Set the CometSupport implementation. Make sure you don't set an implementation that only works on some Container. See BlockingIOCometSupport for an example.

Parameters:
cometSupport -

getCometSupport

public CometSupport getCometSupport()
Return the current CometSupport

Returns:

createCometSupportResolver

protected CometSupportResolver createCometSupportResolver()
Returns an instance of CometSupportResolver CometSupportResolver

Returns:
CometSupportResolver

autoDetectContainer

protected void autoDetectContainer()
Auto detect the underlying Servlet Container we are running on.


autoDetectAtmosphereHandlers

protected void autoDetectAtmosphereHandlers(ServletContext sc,
                                            URLClassLoader c)
                                     throws MalformedURLException,
                                            URISyntaxException
Auto detect instance of AtmosphereHandler in case META-INF/atmosphere.xml is missing.

Parameters:
sc - ServletContext
c - URLClassLoader to load the class.
Throws:
MalformedURLException
URISyntaxException

doHead

public void doHead(HttpServletRequest req,
                   HttpServletResponse res)
            throws IOException,
                   ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doHead in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doOptions

public void doOptions(HttpServletRequest req,
                      HttpServletResponse res)
               throws IOException,
                      ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doOptions in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doTrace

public void doTrace(HttpServletRequest req,
                    HttpServletResponse res)
             throws IOException,
                    ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doTrace in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doDelete

public void doDelete(HttpServletRequest req,
                     HttpServletResponse res)
              throws IOException,
                     ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doDelete in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doPut

public void doPut(HttpServletRequest req,
                  HttpServletResponse res)
           throws IOException,
                  ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doPut in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doGet

public void doGet(HttpServletRequest req,
                  HttpServletResponse res)
           throws IOException,
                  ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doGet in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doPost

public void doPost(HttpServletRequest req,
                   HttpServletResponse res)
            throws IOException,
                   ServletException
Delegate the request processing to an instance of CometSupport

Overrides:
doPost in class HttpServlet
Parameters:
req - the HttpServletRequest
res - the HttpServletResponse
Throws:
IOException
ServletException

doCometSupport

protected AtmosphereServlet.Action doCometSupport(HttpServletRequest req,
                                                  HttpServletResponse res)
                                           throws IOException,
                                                  ServletException
Invoke the proprietary CometSupport

Parameters:
req -
res -
Returns:
Throws:
IOException
ServletException

event

public void event(org.apache.catalina.CometEvent cometEvent)
           throws IOException,
                  ServletException
Hack to support Tomcat AIO like other WebServer. This method is invoked by Tomcat when it detect a Servlet implements the interface CometProcessor without invoking Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)

Specified by:
event in interface org.apache.catalina.CometProcessor
Specified by:
event in interface org.jboss.servlet.http.HttpEventServlet
Parameters:
cometEvent - the CometEvent
Throws:
IOException
ServletException

event

public void event(org.jboss.servlet.http.HttpEvent httpEvent)
           throws IOException,
                  ServletException
Hack to support JBossWeb AIO like other WebServer. This method is invoked by Tomcat when it detect a Servlet implements the interface HttpEventServlet without invoking Servlet.service(javax.servlet.ServletRequest, javax.servlet.ServletResponse)

Parameters:
httpEvent - the CometEvent
Throws:
IOException
ServletException

doRequest

protected boolean doRequest(weblogic.servlet.http.RequestResponseKey rrk)
                     throws IOException,
                            ServletException
Weblogic specific comet based implementation.

Specified by:
doRequest in class weblogic.servlet.http.AbstractAsyncServlet
Parameters:
rrk -
Returns:
Throws:
IOException
ServletException

doResponse

protected void doResponse(weblogic.servlet.http.RequestResponseKey rrk,
                          Object context)
                   throws IOException,
                          ServletException
Weblogic specific comet based implementation.

Specified by:
doResponse in class weblogic.servlet.http.AbstractAsyncServlet
Parameters:
rrk -
Throws:
IOException
ServletException

doTimeout

protected void doTimeout(weblogic.servlet.http.RequestResponseKey rrk)
                  throws IOException,
                         ServletException
Weblogic specific comet based implementation.

Specified by:
doTimeout in class weblogic.servlet.http.AbstractAsyncServlet
Parameters:
rrk -
Throws:
IOException
ServletException

getDefaultBroadcasterClassName

public String getDefaultBroadcasterClassName()
Return the default Broadcaster class name.

Returns:
the broadcasterClassName

setDefaultBroadcasterClassName

public void setDefaultBroadcasterClassName(String broadcasterClassName)
Set the default Broadcaster class name

Parameters:
broadcasterClassName - the broadcasterClassName to set

isUseStreamForFlushingComments

public boolean isUseStreamForFlushingComments()
true if Atmosphere uses ServletResponse.getOutputStream() by default for write operation.

Returns:
the useStreamForFlushingComments

setUseStreamForFlushingComments

public void setUseStreamForFlushingComments(boolean useStreamForFlushingComments)
Set to true so Atmosphere uses ServletResponse.getOutputStream() by default for write operation. Default is false.

Parameters:
useStreamForFlushingComments - the useStreamForFlushingComments to set


Copyright © 2010 SUN Microsystems. All Rights Reserved.