[jboss-cvs] jboss-seam/src/main/org/jboss/seam/contexts ...

Gavin King gavin at belmont.prod.atl2.jboss.com
Wed Aug 30 21:38:01 EDT 2006


  User: gavin   
  Date: 06/08/30 21:38:01

  Modified:    src/main/org/jboss/seam/contexts  Lifecycle.java
  Log:
  fixed ws
  
  Revision  Changes    Path
  1.48      +8 -414    jboss-seam/src/main/org/jboss/seam/contexts/Lifecycle.java
  
  (In the diff below, changes in quantity of whitespace are not shown.)
  
  Index: Lifecycle.java
  ===================================================================
  RCS file: /cvsroot/jboss/jboss-seam/src/main/org/jboss/seam/contexts/Lifecycle.java,v
  retrieving revision 1.47
  retrieving revision 1.48
  diff -u -b -r1.47 -r1.48
  --- Lifecycle.java	5 Aug 2006 01:57:53 -0000	1.47
  +++ Lifecycle.java	31 Aug 2006 01:38:01 -0000	1.48
  @@ -1,532 +1,274 @@
   /*
  -
    * JBoss, Home of Professional Open Source �
  -
    *
  -
    * Distributable under LGPL license.
  -
  -�* See terms of license at gnu.org. �
  -
  + * See terms of license at gnu.org. �
    */
  -
   package org.jboss.seam.contexts;
   
   
  -
   import java.util.Set;
   
  -
  -
   import javax.faces.context.ExternalContext;
  -
   import javax.faces.event.PhaseId;
  -
   import javax.servlet.ServletContext;
  -
   import javax.servlet.ServletRequest;
  -
   import javax.servlet.http.HttpSession;
   
  -
  -
   import org.apache.commons.logging.Log;
  -
   import org.apache.commons.logging.LogFactory;
  -
   import org.jboss.seam.Component;
  -
   import org.jboss.seam.ScopeType;
  -
   import org.jboss.seam.Seam;
  -
   import org.jboss.seam.core.Init;
  -
   import org.jboss.seam.core.Manager;
   import org.jboss.seam.security.authenticator.Authenticator;
   
  -
  -
   /**
  -
    * @author Gavin King
  -
    * @author <a href="mailto:theute at jboss.org">Thomas Heute</a>
  -
  - * @version $Revision: 1.47 $
  -
  + * @version $Revision: 1.48 $
    */
  -
   public class Lifecycle
  -
   {
   
  -
  -
      private static final Log log = LogFactory.getLog( Lifecycle.class );
   
  -
  -
      public static void beginRequest(ExternalContext externalContext) {
  -
         log.debug( ">>> Begin web request" );
  -
         Contexts.eventContext.set( new WebRequestContext( ContextAdaptor.getRequest(externalContext) ) );
  -
         Contexts.sessionContext.set( new WebSessionContext( ContextAdaptor.getSession(externalContext, true) ) );
  -
         Contexts.applicationContext.set( new FacesApplicationContext(externalContext) );
  -
         Contexts.conversationContext.set(null); //in case endRequest() was never called
  -
         try
         {
           Authenticator.instance().beginRequest();
         }
  -      catch (Exception ex)
  -      {
  -      }
  +      catch (Exception ex) {}
      }
   
  -
  -
      public static void beginRequest(ServletContext servletContext, HttpSession session, ServletRequest request) {
  -
         log.debug( ">>> Begin web request" );
  -
         Contexts.eventContext.set( new WebRequestContext( ContextAdaptor.getRequest(request) ) );
  -
         Contexts.sessionContext.set( new WebSessionContext( ContextAdaptor.getSession(session) ) );
  -
         Contexts.applicationContext.set( new WebApplicationContext(servletContext) );
  -
         Contexts.conversationContext.set(null); //in case endRequest() was never called
  -
         try
         {
           Authenticator.instance().beginRequest();
         }
  -      catch (Exception ex)
  -      {
  -      }
  +      catch (Exception ex) {}
      }
   
  -
  -
      public static void beginCall()
  -
      {
  -
         log.debug( ">>> Begin call" );
  -
         ServletContext servletContext = getServletContext();
  -
         if (servletContext==null)
  -
         {
  -
            throw new IllegalStateException("Attempted to invoke a Seam component outside the context of a web application");
  -
         }
   
  -
  -
         Contexts.eventContext.set( new MapContext(ScopeType.EVENT) );
  -
         Contexts.sessionContext.set( new MapContext(ScopeType.SESSION) );
  -
         Contexts.conversationContext.set( new MapContext(ScopeType.CONVERSATION) );
  -
         Contexts.businessProcessContext.set( new BusinessProcessContext() );
  -
         Contexts.applicationContext.set( new WebApplicationContext(servletContext) );
  -
      }
   
  -
  -
      public static void endCall()
  -
      {
  -
         try
  -
         {
  -
            Contexts.destroy( Contexts.getSessionContext() );
  -
            flushAndDestroyContexts();
  -
            if ( Manager.instance().isLongRunningConversation() )
  -
            {
  -
               throw new IllegalStateException("Do not start long-running conversations in direct calls to EJBs");
  -
            }
  -
         }
  -
         finally
  -
         {
  -
            clearThreadlocals();
  -
            log.debug( "<<< End call" );
  -
         }
   
  -
  -
      }
   
  -
  -
      public static void beginInitialization(ServletContext servletContext)
  -
      {
  -
         Context context = new WebApplicationContext(servletContext);
  -
         Contexts.applicationContext.set(context);
  -
      }
   
  -
  -
      public static void endInitialization()
  -
      {
  -
   	   //instantiate all application-scoped @Startup components
  -
         Context context = Contexts.getApplicationContext();
  -
         for ( String name: context.getNames() )
  -
         {
  -
       	   Object object = context.get(name);
  -
       	   if ( object instanceof Component )
  -
       	   {
  -
   	         Component component = (Component) object;
  -
   	         if ( component.isStartup() && component.getScope()==ScopeType.APPLICATION )
  -
   	         {
  -
                  startup(component);
  -
   	         }
  -
       	   }
  -
         }
   
  -
  -
         Contexts.applicationContext.set(null);
  -
      }
   
  -
  -
      private static void startup(Component component)
  -
       {
  -
         if ( component.isStartup() )
  -
         {
  -
            for ( String dependency: component.getDependencies() )
  -
            {
  -
               Component dependentComponent = Component.forName(dependency);
  -
               if (dependentComponent!=null)
  -
               {
  -
                  startup( dependentComponent );
  -
               }
  -
            }
  -
         }
   
  -
  -
         if ( !component.getScope().getContext().isSet( component.getName() ) ) {
  -
            log.info("starting up: " + component.getName());
  -
            component.newInstance();
  -
         }
  -
      }
   
  -
  -
      public static void endApplication(ServletContext servletContext)
  -
      {
  -
         log.debug("Undeploying, destroying application context");
   
  -
  -
         Context tempApplicationContext = new WebApplicationContext(servletContext);
  -
         Contexts.applicationContext.set( tempApplicationContext );
  -
         Contexts.destroy(tempApplicationContext);
  -
         Contexts.applicationContext.set(null);
  -
         Contexts.eventContext.set(null);
  -
         Contexts.sessionContext.set(null);
  -
         Contexts.conversationContext.set(null);
  -
      }
   
  -
  -
      /***
  -
       * Instantiate @Startup components for session scoped component
  -
       */
  -
      public static void beginSession(ServletContext servletContext, ContextAdaptor session)
  -
      {
  -
         log.debug("Session started");
   
  -
  -
         Context context = new WebApplicationContext(servletContext);
  -
         Contexts.applicationContext.set(context);
   
  -
  -
         Context tempSessionContext = new WebSessionContext( session );
  -
         Contexts.sessionContext.set(tempSessionContext);
   
  -
  -
         //instantiate all session-scoped @Startup components
  -
         for ( String name : context.getNames() )
  -
         {
  -
            Object object = context.get(name);
  -
            if (object instanceof Component) {
  -
               Component component = (Component) object;
  -
               if ( component.isStartup() && component.getScope() == ScopeType.SESSION )
  -
               {
  -
                  startup(component);
  -
               }
  -
            }
  -
         }
   
  -
  -
         Contexts.sessionContext.set(null);
  -
         Contexts.applicationContext.set(null);
  -
      }
   
  -
  -
      public static void endSession(ServletContext servletContext, ContextAdaptor session)
  -
      {
  -
         log.debug("End of session, destroying contexts");
   
  -
  -
         Context tempAppContext = new WebApplicationContext(servletContext);
  -
         Contexts.applicationContext.set(tempAppContext);
   
  -
  -
         //this is used just as a place to stick the ConversationManager
  -
         Context tempEventContext = new MapContext(ScopeType.EVENT);
  -
         Contexts.eventContext.set(tempEventContext);
   
  -
  -
         //this is used (a) for destroying session-scoped components
  -
         //and is also used (b) by the ConversationManager
  -
         Context tempSessionContext = new WebSessionContext( session );
  -
         Contexts.sessionContext.set(tempSessionContext);
   
  -
  -
         Set<String> conversationIds = Manager.instance().getSessionConversationIds();
  -
         log.debug("destroying conversation contexts: " + conversationIds);
  -
         for (String conversationId: conversationIds)
  -
         {
  -
            Contexts.destroy( new ServerConversationContext(session, conversationId) );
  -
         }
   
  -
  -
         log.debug("destroying session context");
  -
         Contexts.destroy(tempSessionContext);
  -
         Contexts.sessionContext.set(null);
   
  -
  -
         Contexts.destroy(tempEventContext);
  -
         Contexts.eventContext.set(null);
   
  -
  -
         Contexts.conversationContext.set(null);
  -
         Contexts.applicationContext.set(null);
  -
      }
   
  -
  -
      public static void flushClientConversation()
  -
      {
  -
         boolean flushNeeded = Contexts.isConversationContextActive() &&
  -
               !Seam.isSessionInvalid() &&
  -
               Init.instance().isClientSideConversations();
   
  -
  -
         if ( flushNeeded )
  -
         {
  -
            log.debug("flushing client-side conversation context");
  -
            Contexts.getConversationContext().flush();
  -
         }
  -
      }
   
  -
  -
      public static void flushPage()
  -
      {
  -
         if ( Contexts.isPageContextActive() )
  -
         {
  -
            log.debug("flushing page context");
  -
            Contexts.getPageContext().flush();
  -
         }
  -
      }
   
  -
  -
      public static void endRequest(ExternalContext externalContext) {
   
  -
  -
         log.debug("After render response, destroying contexts");
  -
         try
         {
           Authenticator.instance().endRequest();
         }
  -      catch (Exception ex) {  }
  -
  +      catch (Exception ex) {}
         try
  -
         {
  -
            flushAndDestroyContexts();
   
  -
  -
            if ( Seam.isSessionInvalid() )
  -
            {
  -
               ContextAdaptor.getSession(externalContext, true).invalidate(); //huh? we create a session just to invalidate it?
  -
               //actual session context will be destroyed from the listener
  -
            }
  -
         }
  -
         finally
  -
         {
  -
            clearThreadlocals();
  -
         }
   
  -
  -
         log.debug( "<<< End web request" );
  -
      }
   
  -
  -
      public static void endRequest() {
   
  -
  -
         log.debug("After request, destroying contexts");
  -
         try
         {
           Authenticator.instance().endRequest();
  @@ -534,306 +276,158 @@
         catch (Exception ex) {  }
   
         try
  -
         {
  -
            flushAndDestroyContexts();
  -
         }
  -
         finally
  -
         {
  -
            clearThreadlocals();
  -
         }
   
  -
  -
         log.debug( "<<< End web request" );
  -
      }
   
  -
  -
      public static void endRequest(HttpSession session) {
   
  -
  -
         log.debug("After request, destroying contexts");
  -
         try
         {
           Authenticator.instance().endRequest();
         }
  -      catch (Exception ex) {  }
  -
  +      catch (Exception ex) {}
         try
  -
         {
  -
            flushAndDestroyContexts();
   
  -
  -
            if ( Seam.isSessionInvalid() )
  -
            {
  -
               ContextAdaptor.getSession(session).invalidate(); //huh? we create a session just to invalidate it?
  -
               //actual session context will be destroyed from the listener
   
            }
  -
         }
  -
         finally
  -
         {
  -
            clearThreadlocals();
  -
         }
   
  -
  -
         log.debug( "<<< End web request" );
   
      }
   
  -
  -
      private static void clearThreadlocals() {
  -
         Contexts.eventContext.set( null );
  -
         Contexts.pageContext.set( null );
  -
         Contexts.sessionContext.set( null );
  -
         Contexts.conversationContext.set( null );
  -
         Contexts.businessProcessContext.set( null );
  -
         Contexts.applicationContext.set( null );
  -
      }
   
  -
  -
      private static void flushAndDestroyContexts()
  -
      {
   
  -
  -
         if ( Contexts.isEventContextActive() )
  -
         {
  -
            log.debug("destroying event context");
  -
            Contexts.destroy( Contexts.getEventContext() );
  -
         }
   
  -
  -
         if ( Contexts.isConversationContextActive() )
  -
         {
  -
            if ( !Manager.instance().isLongRunningConversation() )
  -
            {
  -
               log.debug("destroying conversation context");
  -
               Contexts.destroy( Contexts.getConversationContext() );
  -
            }
  -
            if ( !Seam.isSessionInvalid() && !Init.instance().isClientSideConversations() )
  -
            {
  -
               log.debug("flushing server-side conversation context");
  -
               Contexts.getConversationContext().flush();
  -
            }
  -
         }
   
  -
  -
      }
   
  -
  -
      public static void resumePage()
  -
      {
  -
         Contexts.pageContext.set( new PageContext() );
  -
      }
   
  -
  -
      public static void resumeConversation(ExternalContext externalContext)
  -
      {
  -
         Init init = Init.instance();
  -
         Context conversationContext = init.isClientSideConversations() ?
  -
               (Context) new ClientConversationContext() :
  -
               (Context) new ServerConversationContext( ContextAdaptor.getSession(externalContext, true) );
  -
         Contexts.conversationContext.set( conversationContext );
  -
         Contexts.businessProcessContext.set( new BusinessProcessContext() );
  -
      }
   
  -
  -
      public static void resumeConversation(HttpSession session)
  -
      {
  -
         Context conversationContext = new ServerConversationContext( ContextAdaptor.getSession(session) );
  -
         Contexts.conversationContext.set( conversationContext );
  -
         Contexts.businessProcessContext.set( new BusinessProcessContext() );
  -
      }
   
  -
  -
      private static ThreadLocal<PhaseId> phaseId = new ThreadLocal<PhaseId>();
   
  -
  -
      public static PhaseId getPhaseId()
  -
      {
  -
         return phaseId.get();
  -
      }
   
  -
  -
      public static void setPhaseId(PhaseId phase)
  -
      {
  -
         phaseId.set(phase);
  -
      }
   
  -
  -
      private static ThreadLocal<ServletRequest> servletRequest = new ThreadLocal<ServletRequest>();
  -
      private static ServletContext servletContext;
   
  -
  -
      public static ServletContext getServletContext() {
  -
         return servletContext;
  -
      }
   
  -
  -
      public static void setServletContext(ServletContext servletContext) {
  -
         Lifecycle.servletContext = servletContext;
  -
      }
   
  -
  -
      public static ServletRequest getServletRequest() {
  -
         return servletRequest.get();
  -
      }
   
  -
  -
      public static void setServletRequest(ServletRequest servletRequest) {
  -
         Lifecycle.servletRequest.set(servletRequest);
  -
      }
   
  -
  -
      private static ThreadLocal<Boolean> destroying = new ThreadLocal<Boolean>();
  -
      private static ThreadLocal<Boolean> exception = new ThreadLocal<Boolean>();
   
  -
  -
      public static void startDestroying()
  -
      {
  -
         destroying.set(true);
  -
      }
   
  -
  -
      public static void stopDestroying()
  -
      {
  -
         destroying.set(false);
  -
      }
   
  -
  -
      public static boolean isDestroying()
  -
      {
  -
         Boolean value = destroying.get();
  -
         return value!=null && value.booleanValue();
  -
      }
   
  -
  -
      public static boolean isException() {
  -
         Boolean value = exception.get();
  -
         return value!=null && value.booleanValue();
  -
      }
   
  -
  -
      public static void setException(boolean ex) {
  -
         exception.set(ex);
  -
      }
   
  -
  -
   }
  -
  
  
  



More information about the jboss-cvs-commits mailing list