org.picocontainer.web
Class PicoServletContainerListener

java.lang.Object
  extended by org.picocontainer.web.PicoServletContainerListener
All Implemented Interfaces:
Serializable, EventListener, javax.servlet.http.HttpSessionListener, javax.servlet.ServletContextListener
Direct Known Subclasses:
SystemPropertiesPicoServletContainerListener

public class PicoServletContainerListener
extends Object
implements javax.servlet.ServletContextListener, javax.servlet.http.HttpSessionListener, Serializable

Servlet listener class that hooks into the underlying servlet container and instantiates, assembles, starts, stores and disposes the appropriate pico containers when applications/sessions start/stop.

To use, simply add as a listener to the web.xml the listener-class

 <listener>
  <listener-class>org.picocontainer.web.PicoServletContainerListener</listener-class>
 </listener> 
 

The listener also requires a the class name of the WebappComposer as a context-param in web.xml:

  <context-param>
   <param-name>webapp-composer-class</param-name>
   <param-value>com.company.MyWebappComposer</param-value>
  </context-param>
 
The composer will be used to compose the components for the different webapp scopes after the context has been initialised.

Author:
Joe Walnes, Aslak Hellesøy, Philipp Meier, Paul Hammant, Mauro Talevi, Konstantin Pribluda
See Also:
Serialized Form

Field Summary
static String PRINT_SESSION_SIZE
           
static String STATELESS_WEBAPP
           
static String WEBAPP_COMPOSER_CLASS
           
 
Constructor Summary
PicoServletContainerListener()
          Default constructor used in webapp containers
 
Method Summary
protected  org.picocontainer.BehaviorFactory addRequestBehaviors(org.picocontainer.BehaviorFactory beforeThisBehaviorFactory)
           
protected  void compose(WebappComposer composer, javax.servlet.ServletContext context, ScopedContainers scopedContainers)
           
 void contextDestroyed(javax.servlet.ServletContextEvent event)
           
 void contextInitialized(javax.servlet.ServletContextEvent event)
           
protected  WebappComposer loadComposer(javax.servlet.ServletContext context)
          Get the class to do compostition with - from a "webapp-composer-class" config param from web.xml : webapp-composer-class com.yourcompany.YourWebappComposer
protected  org.picocontainer.ComponentMonitor makeAppComponentMonitor()
           
protected  org.picocontainer.LifecycleStrategy makeLifecycleStrategy()
           
protected  org.picocontainer.PicoContainer makeParentContainer()
           
protected  org.picocontainer.ComponentMonitor makeRequestComponentMonitor()
           
protected  ScopedContainers makeScopedContainers()
          Deprecated. 
protected  ScopedContainers makeScopedContainers(boolean stateless)
          Overide this method if you need a more specialized container tree.
protected  org.picocontainer.ComponentMonitor makeSessionComponentMonitor()
           
 void sessionCreated(javax.servlet.http.HttpSessionEvent event)
           
 void sessionDestroyed(javax.servlet.http.HttpSessionEvent event)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

WEBAPP_COMPOSER_CLASS

public static final String WEBAPP_COMPOSER_CLASS
See Also:
Constant Field Values

STATELESS_WEBAPP

public static final String STATELESS_WEBAPP
See Also:
Constant Field Values

PRINT_SESSION_SIZE

public static final String PRINT_SESSION_SIZE
See Also:
Constant Field Values
Constructor Detail

PicoServletContainerListener

public PicoServletContainerListener()
Default constructor used in webapp containers

Method Detail

contextInitialized

public void contextInitialized(javax.servlet.ServletContextEvent event)
Specified by:
contextInitialized in interface javax.servlet.ServletContextListener

makeScopedContainers

@Deprecated
protected ScopedContainers makeScopedContainers()
Deprecated. 


makeScopedContainers

protected ScopedContainers makeScopedContainers(boolean stateless)
Overide this method if you need a more specialized container tree. Here is the default block of code for this - DefaultPicoContainer appCtnr = new DefaultPicoContainer(new Guarding().wrap(new Caching()), makeLifecycleStrategy(), makeParentContainer(), makeAppComponentMonitor()); DefaultPicoContainer sessCtnr; PicoContainer parentOfRequestContainer; ThreadLocalLifecycleState sessionState; Storing sessStoring; if (stateless) { sessionState = null; sessStoring = null; sessCtnr = null; parentOfRequestContainer = appCtnr; } else { sessionState = new ThreadLocalLifecycleState(); sessStoring = new Storing(); sessCtnr = new DefaultPicoContainer(new Guarding().wrap(sessStoring), makeLifecycleStrategy(), appCtnr, makeSessionComponentMonitor()); sessCtnr.setLifecycleState(sessionState); parentOfRequestContainer = sessCtnr; } Storing reqStoring = new Storing(); DefaultPicoContainer reqCtnr = new DefaultPicoContainer(new Guarding().wrap(addRequestBehaviors(reqStoring)), makeLifecycleStrategy(), sessCtnr, makeRequestComponentMonitor()); ThreadLocalLifecycleState requestState = new ThreadLocalLifecycleState(); reqCtnr.setLifecycleState(requestState); return new ScopedContainers(appCtnr, sessCtnr, reqCtnr, sessStoring, reqStoring, sessionState, requestState);

Parameters:
stateless -
Returns:

makeParentContainer

protected org.picocontainer.PicoContainer makeParentContainer()

makeLifecycleStrategy

protected org.picocontainer.LifecycleStrategy makeLifecycleStrategy()

makeAppComponentMonitor

protected org.picocontainer.ComponentMonitor makeAppComponentMonitor()

makeSessionComponentMonitor

protected org.picocontainer.ComponentMonitor makeSessionComponentMonitor()

makeRequestComponentMonitor

protected org.picocontainer.ComponentMonitor makeRequestComponentMonitor()

addRequestBehaviors

protected org.picocontainer.BehaviorFactory addRequestBehaviors(org.picocontainer.BehaviorFactory beforeThisBehaviorFactory)

loadComposer

protected WebappComposer loadComposer(javax.servlet.ServletContext context)
Get the class to do compostition with - from a "webapp-composer-class" config param from web.xml : webapp-composer-class com.yourcompany.YourWebappComposer

Parameters:
context -
Returns:

compose

protected void compose(WebappComposer composer,
                       javax.servlet.ServletContext context,
                       ScopedContainers scopedContainers)

contextDestroyed

public void contextDestroyed(javax.servlet.ServletContextEvent event)
Specified by:
contextDestroyed in interface javax.servlet.ServletContextListener

sessionCreated

public void sessionCreated(javax.servlet.http.HttpSessionEvent event)
Specified by:
sessionCreated in interface javax.servlet.http.HttpSessionListener

sessionDestroyed

public void sessionDestroyed(javax.servlet.http.HttpSessionEvent event)
Specified by:
sessionDestroyed in interface javax.servlet.http.HttpSessionListener


Copyright © 2010. All Rights Reserved.