You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@beehive.apache.org by ri...@apache.org on 2004/10/15 06:50:06 UTC

svn commit: rev 54822 - in incubator/beehive/trunk/netui/src: pageflow/org/apache/beehive/netui/pageflow pageflow/org/apache/beehive/netui/pageflow/handler pageflow/org/apache/beehive/netui/pageflow/interceptor pageflow/org/apache/beehive/netui/pageflow/internal pageflow/org/apache/beehive/netui/pageflow/util tags-html/org/apache/beehive/netui/tags/html tags-html/org/apache/beehive/netui/tags/tree

Author: rich
Date: Thu Oct 14 21:50:04 2004
New Revision: 54822

Modified:
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBean.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBeanFactory.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObject.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObjectException.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/SharedFlowController.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java
   incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
   incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java
Log:
Changed the scope of the ServerAdapter.  It used to be statically initialized; now it lives in the ServletContext.  Moved getServerAdapter() from InternalUtils to ContextCache.  Now, any call to retrieve the ServerAdapter requires the ServletContext; tricky in some situations, but the only non-kludgy alternative.

DRT/BVT: netui (WinXP)
BB: self (linux)



Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java	Thu Oct 14 21:50:04 2004
@@ -610,8 +610,8 @@
                 //
                 // If we're not in production mode, send a diagnostic on the response; otherwise, simply send a 404.
                 //
-                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", request, response, null,
-                                                HttpServletResponse.SC_NOT_FOUND, uri, modulePath );
+                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", null, HttpServletResponse.SC_NOT_FOUND, 
+                                                request, response, servletContext, uri, modulePath );
             }
         }
     }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBean.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBean.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBean.java	Thu Oct 14 21:50:04 2004
@@ -20,6 +20,7 @@
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.CachedFacesBackingInfo;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.util.cache.ClassLevelCache;
 
@@ -39,7 +40,7 @@
     private Map _pageInputs;
     
     
-    void persistInSession( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    void persistInSession( HttpServletRequest request, HttpServletResponse response )
     {
         HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
         ScopedServletUtils.setScopedSessionAttr( InternalConstants.FACES_BACKING_ATTR, this, unwrappedRequest );
@@ -56,7 +57,8 @@
         HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
         String attr =
                 ScopedServletUtils.getScopedSessionAttrName( InternalConstants.FACES_BACKING_ATTR, unwrappedRequest );
-        InternalUtils.getServerAdapter().ensureFailover( attr, this, unwrappedRequest );
+        ServletContext servletContext = InternalUtils.getServletContext( request );
+        ContextCache.get( servletContext ).getServerAdapter().ensureFailover( attr, this, unwrappedRequest );
     }
 
     public String getDisplayName()

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBeanFactory.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBeanFactory.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FacesBackingBeanFactory.java	Thu Oct 14 21:50:04 2004
@@ -122,7 +122,7 @@
                     _log.error( "Error while creating backing bean instance of " + backingClassName, e );
                 }
                 
-                bean.persistInSession( request, response, servletContext );
+                bean.persistInSession( request, response );
                 return bean;
             }
             

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java	Thu Oct 14 21:50:04 2004
@@ -218,7 +218,7 @@
     protected void sendError( String errText, HttpServletRequest request, HttpServletResponse response )
         throws IOException
     {
-        InternalUtils.sendError( "PageFlow_Custom_Error", request, response, null, getDisplayName(), errText );
+        InternalUtils.sendError( "PageFlow_Custom_Error", null, request, response, getDisplayName(), errText );
     }
     
     /**
@@ -247,9 +247,8 @@
             
             // First, put the exception into the request (or other applicable context).
             Throwable unwrapped = eh.unwrapException( ex );
-            eh.exposeException( unwrapped, request, response, mapping );
-            return eh.handleException( unwrapped, mapping, actionName, form, request, response,
-                                       getServletContext(), this );
+            eh.exposeException( unwrapped, mapping, request, response, getServletContext() );
+            return eh.handleException( unwrapped, mapping, actionName, form, this, request, response, getServletContext() );
         }
         finally
         {
@@ -1414,7 +1413,7 @@
         catch ( Throwable e )
         {
             ExceptionsHandler eh = ContextCache.get( getServletContext() ).getExceptionsHandler();
-            eh.sendUnhandledExceptionError( eh.unwrapException( e ), request, response );
+            eh.sendUnhandledExceptionError( eh.unwrapException( e ), request, response, getServletContext() );
         }
         finally
         {

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowControllerFactory.java	Thu Oct 14 21:50:04 2004
@@ -288,7 +288,7 @@
                     if ( lastIndexOfJpfClass != -1 )
                     {
                         retVal = pfStack.popUntil( request, lastIndexOfJpfClass );
-                        retVal.persistInSession( request, response, servletContext );
+                        retVal.persistInSession( request, response );
                         return retVal;
                     }
                 }
@@ -332,7 +332,7 @@
                     pfStack.push( current, request );
                 }
                 
-                retVal.persistInSession( request, response, servletContext );
+                retVal.persistInSession( request, response );
             }
             else
             {
@@ -363,7 +363,7 @@
                         }
 
                         retVal = onStackAlready;
-                        retVal.persistInSession( request, response, servletContext );
+                        retVal.persistInSession( request, response );
                     }
                     else
                     {
@@ -373,7 +373,7 @@
                         // onDestroy() gets called before the new one's onCreate().
                         //
                         retVal.reinitialize( request, response, servletContext );
-                        retVal.persistInSession( request, response, servletContext );
+                        retVal.persistInSession( request, response );
                         retVal.create( request, response, servletContext );
                     }
                 }
@@ -385,7 +385,7 @@
                     // onCreate()).
                     //
                     if ( createdNew ) retVal.reinitialize( request, response, servletContext );
-                    retVal.persistInSession( request, response, servletContext );
+                    retVal.persistInSession( request, response );
                     if ( createdNew ) retVal.create( request, response, servletContext );
                 }
             }
@@ -424,7 +424,7 @@
                 _log.debug( "Storing " + retVal + " in the session..." );
             }
             
-            retVal.persistInSession( request, response, servletContext );
+            retVal.persistInSession( request, response );
             return retVal;
         }
         catch ( InstantiationException e )

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/Forward.java	Thu Oct 14 21:50:04 2004
@@ -23,6 +23,7 @@
 import org.apache.struts.config.ModuleConfig;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
 import java.util.List;
 import java.util.ArrayList;
 import java.util.Map;
@@ -78,10 +79,11 @@
     private boolean _isNestedReturn = false;
     private boolean _init = false;
     private transient ActionMapping _mapping = null;         // will be reinitialized as necessary by PreviousPageInfo
+    private transient FlowController _flowController = null; // will be reinitialized as necessary by PreviousPageInfo
+    private transient ServletContext _servletContext = null; // will be reinitialized as necessary by PreviousPageInfo
     private String _mappingPath;
     private StringBuffer _queryString;
     private boolean _explicitPath = false;
-    private transient FlowController _flowController = null; // will be reinitialized as necessary by PreviousPageInfo
     private String _returnFormType = null;
     private boolean _userSetRedirect = false;
     private Map _actionOutputs = null;
@@ -110,6 +112,7 @@
         _queryString = init._queryString;
         _explicitPath = init._explicitPath;
         _flowController = init._flowController;
+        _servletContext = init._servletContext;
         _returnFormType = init._returnFormType;
         _userSetRedirect = init._userSetRedirect;
         _actionOutputs = init._actionOutputs;
@@ -220,8 +223,9 @@
      * Internal.  Initialize from an existing Struts ActionForward.
      * @exclude
      */ 
-    protected Forward( ActionForward initFwd )
+    protected Forward( ActionForward initFwd, ServletContext servletContext )
     {
+        _servletContext = servletContext;
         setName( initFwd.getName() );
         initFrom( initFwd );
     }
@@ -303,7 +307,8 @@
                         _log.debug( "Creating form bean of type " + _returnFormType );
                     }
                     
-                    ReloadableClassHandler rch = ContextCache.get( request ).getReloadableClassHandler();
+                    ServletContext servletContext = InternalUtils.getServletContext( request );
+                    ReloadableClassHandler rch = ContextCache.get( servletContext ).getReloadableClassHandler();
                     Object formBean = rch.newInstance( _returnFormType, request );
                     ActionForm wrappedFormBean = InternalUtils.wrapFormBean( formBean );
                     addOutputForm( wrappedFormBean );
@@ -553,6 +558,8 @@
     private void checkActionOutputs( PageFlowActionForward fc )
     {
         PageFlowActionForward.ActionOutput[] actionOutputs = fc.getActionOutputs();
+        boolean isInProductionMode =
+                ContextCache.get( _servletContext ).getServerAdapter().isInProductionMode();
             
         for ( int i = 0; i < actionOutputs.length; ++i )
         {
@@ -569,7 +576,7 @@
             // If we're *not* in production mode, do some (expensive) checks to ensure that the types for the
             // action outputs match their declared types.
             //
-            if ( ! InternalUtils.getServerAdapter().isInProductionMode() && _actionOutputs != null )
+            if ( ! isInProductionMode && _actionOutputs != null )
             {
                 Object actualActionOutput = _actionOutputs.get( actionOutput.getName() );
                     
@@ -634,6 +641,7 @@
         _mapping = mapping;
         _mappingPath = mapping != null ? mapping.getPath() : null;
         _flowController = flowController;
+        _servletContext = flowController.getServletContext();
     }
     
     /**
@@ -648,6 +656,7 @@
         _mapping = mapping;
         _mappingPath = mapping != null ? mapping.getPath() : null;
         _flowController = flowController;
+        _servletContext = flowController.getServletContext();
     }
     
     /**
@@ -943,6 +952,7 @@
     void reinitialize( FlowController fc )
     {
         _flowController = fc;
+        _servletContext = fc.getServletContext();
         
         if ( _mapping == null && _mappingPath != null )
         {

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/MultipartRequestUtils.java	Thu Oct 14 21:50:04 2004
@@ -113,7 +113,7 @@
             }
             else
             {
-                ServletContext servletContext = InternalUtils.getServerAdapter().getServletContext(request);
+                ServletContext servletContext = InternalUtils.getServletContext(request);
                 servlet = new ActionServletWrapper(InternalUtils.getActionServlet(servletContext));
             }
             

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowConstants.java	Thu Oct 14 21:50:04 2004
@@ -110,5 +110,4 @@
      * page flow compiler.
      */ 
     public static final String JPF_MODULE_CONFIG_GEN_DIR = InternalConstants.WEBINF_DIR + "/.pageflow-struts-generated";
-    
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java	Thu Oct 14 21:50:04 2004
@@ -66,11 +66,6 @@
     {
         servletContext.setAttribute( ALREADY_INIT_ATTR, Boolean.TRUE );
         
-        //
-        // Callback to the server adapter.
-        //
-        InternalUtils.getServerAdapter().initServletContext( servletContext );
-        
         try
         {
             InputStream configInput = servletContext.getResourceAsStream( CONFIG_FILE );

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowController.java	Thu Oct 14 21:50:04 2004
@@ -36,6 +36,7 @@
 import org.apache.beehive.netui.pageflow.internal.CachedPageFlowInfo;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 
 import static org.apache.beehive.netui.pageflow.internal.InternalConstants.*;
@@ -165,7 +166,7 @@
         return true;
     }
     
-    void persistInSession( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    void persistInSession( HttpServletRequest request, HttpServletResponse response )
     {
         PageFlowController currentPageFlow = PageFlowUtils.getCurrentPageFlow( request );
         
@@ -203,7 +204,7 @@
         if ( request.getAttribute( DELETING_PAGEFLOW_ATTR ) != this && request.getSession( false ) != null )
         {
             HttpServletRequest unwrappedRequest = PageFlowUtils.unwrapMultipart( request );
-            ServerAdapter serverAdapter = InternalUtils.getServerAdapter();
+            ServerAdapter serverAdapter = ContextCache.get( getServletContext() ).getServerAdapter();
         
             //
             // If this is a singleton page flow, there are two attributes to deal with.

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObject.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObject.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObject.java	Thu Oct 14 21:50:04 2004
@@ -113,8 +113,7 @@
     /**
      * Stores this object in the user session, in the appropriate place.
      */ 
-    abstract void persistInSession( HttpServletRequest request, HttpServletResponse response,
-                                    ServletContext servletContext );
+    abstract void persistInSession( HttpServletRequest request, HttpServletResponse response );
     
     /**
      * Ensures that any changes to this object will be replicated in a cluster (for failover),
@@ -138,7 +137,8 @@
         if ( controlFields.isEmpty() ) return;
 
         request = PageFlowUtils.unwrapMultipart( request );
-        ControlBeanContext beanContext = JavaControlUtils.getControlBeanContext( request, response, false );
+        ControlBeanContext beanContext =
+                JavaControlUtils.getControlBeanContext( request, response, _servletContext, false );
         assert beanContext != null : "ControlBeanContext was not initialized by PageFlowRequestProcessor";
         String classID = getClass().getName();
         

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObjectException.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObjectException.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowManagedObjectException.java	Thu Oct 14 21:50:04 2004
@@ -22,6 +22,7 @@
 
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
 import java.io.IOException;
 import java.io.PrintWriter;
 
@@ -84,11 +85,12 @@
      * @param request the current HttpServletRequest
      * @param response the current HttpServletResponse
      */    
-    void sendError( HttpServletRequest request, HttpServletResponse response, int productionTimeErrorCode )
+    void sendError( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext,
+                    int productionTimeErrorCode )
         throws IOException
     {
-        InternalUtils.sendDevTimeError( _messageKeyPrefix, getMessageArgs(), request, response, null,
-                                        productionTimeErrorCode );
+        InternalUtils.sendDevTimeError( _messageKeyPrefix, getMessageArgs(), null, productionTimeErrorCode,
+                                        request, response, servletContext );
     }
     
     /**

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowPageFilter.java	Thu Oct 14 21:50:04 2004
@@ -43,6 +43,7 @@
 import org.apache.beehive.netui.pageflow.internal.JavaControlUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 
 
 /**
@@ -118,7 +119,8 @@
             //
             // Callback to the server adapter.
             //
-            InternalUtils.getServerAdapter().beginRequest( httpRequest, httpResponse, _servletContext );
+            ServerAdapter serverAdapter = ContextCache.get( _servletContext ).getServerAdapter();
+            serverAdapter.beginRequest( httpRequest, httpResponse );
             
             //
             // Initialize the ControlBeanContext in the session.
@@ -161,12 +163,12 @@
                 //
                 // Clean up the ControlBeanContext in the session.
                 //
-                JavaControlUtils.uninitializeControlContext( httpRequest, httpResponse );
+                JavaControlUtils.uninitializeControlContext( httpRequest, httpResponse, _servletContext );
                 
                 //
                 // Callback to the server adapter.
                 //
-                InternalUtils.getServerAdapter().endRequest( httpRequest, httpResponse, _servletContext );
+                serverAdapter.endRequest( httpRequest, httpResponse );
             }
         }
         else

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowRequestProcessor.java	Thu Oct 14 21:50:04 2004
@@ -467,6 +467,7 @@
     {
         String uri = PageFlowUtils.getRelativeURI( request, InternalUtils.decodeURI( request ), null );
         ServletContext servletContext = getServletContext();
+        ServerAdapter serverAdapter = ContextCache.get( servletContext ).getServerAdapter();
 
         //
         // Allow weblogic to do a security check on forwarded requests, if that feature is enabled.
@@ -478,7 +479,7 @@
             // security check may not have been done for the request URI.  In this case, a redirect
             // to https may happen during checkSecurity().
             //
-            if ( InternalUtils.getServerAdapter().checkSecurity( uri, request, response, servletContext ) )
+            if ( serverAdapter.checkSecurity( uri, request, response ) )
             {
                 if ( _log.isDebugEnabled() )
                 {
@@ -592,8 +593,9 @@
                     _log.error( msg.toString() );
                 }
 
-                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", request, response, null,
-                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR, uri, modulePath );
+                InternalUtils.sendDevTimeError( "PageFlow_NoModuleConf", null,
+                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response,
+                                                servletContext, uri, modulePath );
                 return;
             }
 
@@ -623,9 +625,9 @@
                         _log.error( msg.toString() );
                     }
 
-                    InternalUtils.sendDevTimeError( "PageFlow_WrongPath", request, response, null,
-                                                    HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                    requestedType, desiredType);
+                    InternalUtils.sendDevTimeError( "PageFlow_WrongPath", null,
+                                                    HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response,
+                                                    servletContext, requestedType, desiredType);
 
                     return;
                 }
@@ -682,12 +684,13 @@
         // First reinitialize the reloadable class handler.  This will bounce a classloader if necessary.
         //
         ServletContext servletContext = getServletContext();
-        ContextCache.get( servletContext ).getReloadableClassHandler().reinit( request );
+        ContextCache contextCache = ContextCache.get( servletContext );
+        contextCache.getReloadableClassHandler().reinit( request );
         
         //
         // Callback to the server adapter.
         //
-        InternalUtils.getServerAdapter().beginRequest( request, response, servletContext );
+        contextCache.getServerAdapter().beginRequest( request, response );
         
         //
         // Initialize the ControlBeanContext in the session.
@@ -703,12 +706,12 @@
             //
             // Clean up the ControlBeanContext in the session.
             //
-            JavaControlUtils.uninitializeControlContext( request, response );
+            JavaControlUtils.uninitializeControlContext( request, response, getServletContext() );
             
             //
             // Callback to the server adapter.
             //
-            InternalUtils.getServerAdapter().endRequest( request, response, servletContext );
+            contextCache.getServerAdapter().endRequest( request, response );
         }
 
         if ( _log.isTraceEnabled() )
@@ -1171,7 +1174,7 @@
                 assert mapping != null;
                 ActionForm form = InternalUtils.getFormBean( mapping, request );
                 PageFlowController curJpf = InternalUtils.ensureCurrentPageFlow( request, response );
-                Forward pfFwd = new Forward( ( ActionForward ) fwd );
+                Forward pfFwd = new Forward( ( ActionForward ) fwd, servletContext );
                 fwd = ForwardHandler.processForward( pfFwd, mapping, request, response, form, servletContext, curJpf );
             }
             
@@ -1290,8 +1293,9 @@
     {
         boolean securityRedirected = false;
         ServletContext servletContext = getServletContext();
+        ContextCache contextCache = ContextCache.get( servletContext );
         
-        if ( ContextCache.get( servletContext ).shouldDoSecureForwards() )
+        if ( contextCache.shouldDoSecureForwards() )
         {
             Boolean needSecure = PageFlowUtils.isSecureResource( uri, servletContext, request );
             
@@ -1304,7 +1308,7 @@
                         if ( needSecure.equals( Boolean.FALSE ) )
                         {
                             changeScheme( uri, SCHEME_UNSECURE,
-                                          InternalUtils.getServerAdapter().getListenPort(request),
+                                          contextCache.getServerAdapter().getListenPort(request),
                                           request, response );
                             securityRedirected = true;
                         }
@@ -1314,7 +1318,7 @@
                         if ( needSecure.equals( Boolean.TRUE ) )
                         {
                             changeScheme( uri, SCHEME_SECURE, 
-                                          InternalUtils.getServerAdapter().getSecureListenPort(request),
+                                          contextCache.getServerAdapter().getSecureListenPort(request),
                                           request, response );
                             securityRedirected = true;
                         }
@@ -1329,7 +1333,7 @@
         
         if ( ! securityRedirected )
         {
-            ForwardRedirectHandler fwdRedirectHandler = ContextCache.get( servletContext ).getForwardRedirectHandler();
+            ForwardRedirectHandler fwdRedirectHandler = contextCache.getForwardRedirectHandler();
             fwdRedirectHandler.forward( uri, request, response );
         }
     }
@@ -1341,7 +1345,7 @@
     protected void processNoCache( HttpServletRequest request, HttpServletResponse response )
     {
         if ( moduleConfig.getControllerConfig().getNocache()
-                || ! InternalUtils.getServerAdapter().isInProductionMode() )
+                || ! ContextCache.get( getServletContext() ).getServerAdapter().isInProductionMode() )
         {
             //
             // The call to PageFlowJspFilter.preventCache() will cause caching to be prevented
@@ -1408,7 +1412,7 @@
                     ActionInterceptorChain.getAfterActionChain( actionName, request, servletContext );
             if ( interceptorChain != null )
             {
-                InterceptorForward originalForward = ret != null ? new InterceptorForward( ret ) : null;
+                InterceptorForward originalForward = ret != null ? new InterceptorForward( ret, servletContext ) : null;
                 InterceptorForward interceptorForward =
                         interceptorChain.doIntercept( request, response, originalForward, pfc, actionName );
                 

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowStack.java	Thu Oct 14 21:50:04 2004
@@ -24,10 +24,12 @@
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 
 import javax.servlet.http.HttpSessionBindingListener;
 import javax.servlet.http.HttpSessionBindingEvent;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
 import java.util.Stack;
 import java.io.Serializable;
 
@@ -201,11 +203,11 @@
         return -1;
     }
     
-    void ensureFailover( HttpServletRequest request )
+    void ensureFailover( HttpServletRequest request, ServletContext servletContext )
     {
         String name =
             ScopedServletUtils.getScopedSessionAttrName( JPF_STACK_ATTR, PageFlowUtils.unwrapMultipart( request ) );
-        InternalUtils.getServerAdapter().ensureFailover( name, this, request );
+        ContextCache.get( servletContext ).getServerAdapter().ensureFailover( name, this, request );
     }
     
     void save( HttpServletRequest request )
@@ -229,7 +231,9 @@
         ActionInterceptor interceptor = ActionInterceptorChain.getActiveInterceptor( request );
         InterceptorForward interceptedForward = ActionInterceptorChain.getInterceptedForward( request, true );
         _stack.push( new PushedPageFlow( pageFlow, interceptor, interceptedForward ) );
-        ensureFailover( request );    // to ensure that this attribute is replicated for session failover
+        
+        // To ensure that this attribute is replicated for session failover...
+        ensureFailover( request, pageFlow.getServletContext() );
     }
     
     /**
@@ -241,11 +245,12 @@
     public PushedPageFlow pop( HttpServletRequest request )
     {
         PushedPageFlow ppf = ( PushedPageFlow ) _stack.pop();
-        ppf.getPageFlow().setIsOnNestingStack( false );
+        PageFlowController pfc = ppf.getPageFlow();
+        pfc.setIsOnNestingStack( false );
         
         if ( request != null )  // may be null if we're called from valueUnbound()
         {
-            ensureFailover( request );    // to ensure that this attribute is replicated for session failover
+            ensureFailover( request, pfc.getServletContext() );    // to ensure that this attribute is replicated for session failover
         }
         
         return ppf;

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowUtils.java	Thu Oct 14 21:50:04 2004
@@ -21,6 +21,7 @@
 import org.apache.beehive.netui.pageflow.internal.ActionResultImpl;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 import org.apache.beehive.netui.pageflow.internal.RequestValues;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.scoping.ScopedRequest;
 import org.apache.beehive.netui.pageflow.scoping.ScopedResponse;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
@@ -668,7 +669,7 @@
      */ 
     public static Boolean isSecureResource( String uri, ServletContext servletContext, HttpServletRequest request )
     {
-        return InternalUtils.getServerAdapter().isSecureResource( uri, request, servletContext );
+        return ContextCache.get( servletContext ).getServerAdapter().isSecureResource( uri, request );
     }
     
     /**
@@ -1080,14 +1081,5 @@
     public static void setCurrentActionResolver( ActionResolver resolver, HttpServletRequest request )
     {
         InternalUtils.setCurrentActionResolver( resolver, request );
-    }
-    
-    /**
-     * @deprecated This is an internal utility.  {@link InternalUtils#getServerAdapter} can be used, but it is
-     *             not guaranteed to be supported in the future.
-     */ 
-    public static final ServerAdapter getServerAdapter()
-    {
-        return InternalUtils.getServerAdapter();
     }
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/ServerAdapter.java	Thu Oct 14 21:50:04 2004
@@ -56,14 +56,13 @@
      * </pre>
      * 
      * @param uri a webapp-relative URI for a resource.
-     * @param servletContext the ServletContext
      * @param request the current HttpServletRequest.
      * @return <code>Boolean.TRUE</code> if a transport-guarantee of <code>CONFIDENTIAL</code> or
      *         <code>INTEGRAL</code> is associated with the given resource; <code>Boolean.FALSE</code> 
      *         a transport-guarantee of <code>NONE</code> is associated with the given resource; or
      *         <code>null</code> if there is no transport-guarantee associated with the given resource.
      */     
-    public Boolean isSecureResource( String uri, HttpServletRequest request, ServletContext servletContext );
+    public Boolean isSecureResource( String uri, HttpServletRequest request );
 
     /**
      * Cause the server to do a security check for the given URI.  If required, it does a redirect to
@@ -74,16 +73,8 @@
      * @param response the current HttpServletResponse.
      * @return <code>true</code> if a redirect occurred.
      */ 
-    boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
-                           ServletContext servletContext );
-    
-    /**
-     * Get the ServletContext, based on the given request.
-     * 
-     * @param request the current HttpServletRequest.
-     * @return the ServletContext associated with the request.
-     */ 
-    public ServletContext getServletContext( HttpServletRequest request );
+    boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response );
+                           
     
     /**
      * Get the port on which the server is listening for unsecure connections.
@@ -156,18 +147,16 @@
      * 
      * @param request the current HttpServletRequest.
      * @param response the current HttpServletResponse.
-     * @param servletContext the current ServletContext.
      */ 
-    public void beginRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext );
+    public void beginRequest( HttpServletRequest request, HttpServletResponse response );
     
     /**
      * Called at the end of each processed request.
      * 
      * @param request the current HttpServletRequest.
      * @param response the current HttpServletResponse.
-     * @param servletContext the current ServletContext.
      */ 
-    public void endRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext );
+    public void endRequest( HttpServletRequest request, HttpServletResponse response );
     
     /**
      * Get a context object to support Java Controls.
@@ -180,10 +169,9 @@
     /**
      * Get the build directory (or directories) where reloadable classes reside.
      * 
-     * @param servletContext the current ServletContext.
      * @return an array of URLs to indicate where reloadable classes reside, or <code>null</code> if there are no
      *         appropriate directories.
      * @see org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler
      */ 
-    public File[] getReloadableClassDirs( ServletContext servletContext );
+    public File[] getReloadableClassDirs();
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/SharedFlowController.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/SharedFlowController.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/SharedFlowController.java	Thu Oct 14 21:50:04 2004
@@ -27,6 +27,7 @@
 import javax.servlet.ServletContext;
 
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import static org.apache.beehive.netui.pageflow.internal.InternalConstants.*;
 
 
@@ -56,8 +57,7 @@
         return _modulePath;
     }
     
-    void persistInSession( HttpServletRequest request, HttpServletResponse response,
-                           ServletContext servletContext )
+    void persistInSession( HttpServletRequest request, HttpServletResponse response )
     {
         request.getSession().setAttribute( SHARED_FLOW_ATTR_PREFIX + getClass().getName(), this );
     }
@@ -71,7 +71,8 @@
      */
     public void ensureFailover( HttpServletRequest request )
     {
-        InternalUtils.getServerAdapter().ensureFailover( SHARED_FLOW_ATTR_PREFIX + getClass().getName(), this, request );
+        ServerAdapter serverAdapter = ContextCache.get( getServletContext() ).getServerAdapter();
+        serverAdapter.ensureFailover( SHARED_FLOW_ATTR_PREFIX + getClass().getName(), this, request );
     }
     
     /**

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/ExceptionsHandler.java	Thu Oct 14 21:50:04 2004
@@ -35,14 +35,15 @@
     extends Handler
 {
     ActionForward handleException( Throwable ex, ActionMapping actionMapping, String actionName,
-                                   ActionForm form, HttpServletRequest request, HttpServletResponse response,
-                                   ServletContext servletContext, FlowController flowController )
+                                   ActionForm form, FlowController flowController, HttpServletRequest request,
+                                   HttpServletResponse response, ServletContext servletContext )
         throws Exception;
 
     Throwable unwrapException( Throwable ex );
 
-    void exposeException( Throwable ex, HttpServletRequest request, HttpServletResponse response,
-                          ActionMapping actionMapping );
+    void exposeException( Throwable ex, ActionMapping actionMapping, HttpServletRequest request,
+                          HttpServletResponse response, ServletContext servletContext );
 
-    void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response );
+    void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response,
+                                      ServletContext servletContext );
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/handler/LoginHandler.java	Thu Oct 14 21:50:04 2004
@@ -48,6 +48,7 @@
      * @param request the current HttpServletRequest.
      */ 
     public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response );
+                        
     
     /**
      * Tell whether the current user is in a given role.

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/interceptor/InterceptorForward.java	Thu Oct 14 21:50:04 2004
@@ -20,6 +20,7 @@
 import org.apache.beehive.netui.pageflow.Forward;
 
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.ServletContext;
 import java.net.URI;
 
 import org.apache.struts.action.ActionForward;
@@ -39,9 +40,9 @@
      * Internal.  Initialize from an existing Struts ActionForward
      * @exclude
      */ 
-    public InterceptorForward( ActionForward originalForward )
+    public InterceptorForward( ActionForward originalForward, ServletContext servletContext )
     {
-        super( originalForward );
+        super( originalForward, servletContext );
     }
     
     InterceptorForward( HttpServletRequest request )

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/ContextCache.java	Thu Oct 14 21:50:04 2004
@@ -24,6 +24,7 @@
 import org.apache.beehive.netui.pageflow.PageFlowActionServlet;
 import org.apache.beehive.netui.pageflow.PageFlowContextListener;
 import org.apache.beehive.netui.pageflow.PageFlowConstants;
+import org.apache.beehive.netui.pageflow.ServerAdapter;
 import org.apache.beehive.netui.pageflow.handler.LoginHandler;
 import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
 import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
@@ -31,10 +32,7 @@
 import org.apache.beehive.netui.pageflow.handler.ExceptionsHandler;
 
 import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
 import java.io.Serializable;
-import java.util.List;
-import java.util.ArrayList;
 
 
 public class ContextCache implements Serializable, PageFlowConstants
@@ -46,6 +44,10 @@
     private static final String DEFAULT_FWD_REDIRECT_HANDLER_CLASS = DefaultForwardRedirectHandler.class.getName();
     private static final String DEFAULT_RELOADABLE_CLASS_HANDLER_CLASS = DefaultReloadableClassHandler.class.getName();
     private static final String DEFAULT_EXCEPTIONS_HANDLER_CLASS = DefaultExceptionsHandler.class.getName();
+    private static final String CATALINA_HOME_PROP = "catalina.home";
+    private static final String SERVER_ADAPTER_PROP = "pageflow.serveradapter";
+    private static final String WL_SERVER_ADAPTER_CLASS = "com.bea.wlw.netui.pageflow.internal.WebLogicServerAdapter";
+    private static final String TOMCAT_SERVER_ADAPTER_CLASS = "org.apache.beehive.netui.tomcat.TomcatServerAdapter";
     
     private boolean _secureForwards = false;
     private int _forwardOverflowCount = DEFAULT_FORWARD_OVERFLOW_COUNT;
@@ -55,7 +57,7 @@
     private LoginHandler _loginHandler = null;
     private ReloadableClassHandler _reloadableClassHandler = null;
     private ExceptionsHandler _exceptionsHandler = null;
-    private transient ServletContext _servletContext;
+    private ServerAdapter _serverAdapter = null;
     
     
     public ForwardRedirectHandler getForwardRedirectHandler()
@@ -78,11 +80,6 @@
         return _exceptionsHandler;
     }
     
-    public static ContextCache get( HttpServletRequest request )
-    {
-        return get( InternalUtils.getServerAdapter().getServletContext( request ) );
-    }
-    
     public static ContextCache get( ServletContext servletContext )
     {
         ContextCache cache = ( ContextCache ) servletContext.getAttribute( CACHE_ATTR );
@@ -109,7 +106,6 @@
     
     private void reinit( ServletContext servletContext )
     {
-        _servletContext = servletContext;
         _exceptionsHandler.reinit( servletContext );
         _forwardRedirectHandler.reinit( servletContext );
         _loginHandler.reinit( servletContext );
@@ -125,7 +121,9 @@
     
     private ContextCache( ServletContext servletContext )
     {
-        _servletContext = servletContext;
+        _serverAdapter = createServerAdapter();
+        _serverAdapter.initServletContext( servletContext );  // callback
+        
         
         String doSecureForwards = servletContext.getInitParameter( SECURE_FORWARDS_PARAM );
         _secureForwards = ( Boolean.TRUE.toString().equals( doSecureForwards ) );
@@ -257,5 +255,62 @@
         }
         
         return defaultVal;
+    }
+    
+    private static ServerAdapter createServerAdapter()
+    {
+        String serverAdapterClassName = System.getProperty( SERVER_ADAPTER_PROP );
+        boolean userSpecifiedServerAdapter = serverAdapterClassName != null;
+        
+        if ( serverAdapterClassName == null )
+        {
+            if ( System.getProperty( CATALINA_HOME_PROP ) != null )
+            {
+                serverAdapterClassName = TOMCAT_SERVER_ADAPTER_CLASS;
+            }
+            else
+            {
+                serverAdapterClassName = WL_SERVER_ADAPTER_CLASS;
+            }
+            
+        }
+            
+        try
+        {
+            Class serverAdapterClass = Class.forName( serverAdapterClassName );
+            ServerAdapter serverAdapter = ( ServerAdapter ) serverAdapterClass.newInstance();
+            
+            if ( _log.isInfoEnabled() )
+            {
+                _log.info( "Created server adapter of type " + serverAdapterClass );
+            }
+            
+            return serverAdapter;
+        }
+        catch ( ClassNotFoundException e )
+        {
+            if ( userSpecifiedServerAdapter && _log.isErrorEnabled() )
+            {
+                _log.error( "Could not find ServerAdapter class " + serverAdapterClassName
+                            + "; using " + DefaultServerAdapter.class.getName() + "." );
+            }
+            
+            return new DefaultServerAdapter();
+        }
+        catch ( Exception e )
+        {
+            if ( _log.isErrorEnabled() )
+            {
+                _log.error( "Error instantiating ServerAdapter " + serverAdapterClassName
+                            + "; using " + DefaultServerAdapter.class.getName() + ".", e );
+            }
+            
+            return new DefaultServerAdapter();
+        }
+    }
+
+    public ServerAdapter getServerAdapter()
+    {
+        return _serverAdapter;
     }
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultExceptionsHandler.java	Thu Oct 14 21:50:04 2004
@@ -58,8 +58,8 @@
     
     
     public ActionForward handleException( Throwable ex, ActionMapping actionMapping, String actionName,
-                                          ActionForm form, HttpServletRequest request, HttpServletResponse response,
-                                          ServletContext servletContext, FlowController flowController )
+                                          ActionForm form, FlowController flowController , HttpServletRequest request,
+                                          HttpServletResponse response, ServletContext servletContext)
         throws Exception
     {
         if ( _log.isInfoEnabled() )
@@ -133,7 +133,7 @@
             _log.error( msg.append( " unhandled by the current page flow (and any shared flow)" ).toString(), ex );
         }
         
-        sendUnhandledExceptionError( ex, request, response );
+        sendUnhandledExceptionError( ex, request, response, servletContext );
         return null;
     }
     
@@ -157,8 +157,8 @@
         return ex;
     }
     
-    public void exposeException( Throwable ex, HttpServletRequest request, HttpServletResponse response,
-                                 ActionMapping actionMapping )
+    public void exposeException( Throwable ex, ActionMapping actionMapping, HttpServletRequest request,
+                                 HttpServletResponse response, ServletContext servletContext )
     {
         //
         // Put the exception in a place where Struts/NetUI tags will find it.
@@ -289,8 +289,8 @@
                 err = Bundle.getString( "PageFlow_MissingExceptionHandler", methodName );
             }
                     
-            InternalUtils.sendError( "PageFlow_Custom_Error", request, response, null, flowController.getDisplayName(), 
-                                     err );
+            InternalUtils.sendError( "PageFlow_Custom_Error", null, request, response, servletContext, 
+                                     flowController.getDisplayName(), err );
             return null;
         }        
     }
@@ -324,7 +324,8 @@
         }
     }
     
-    public void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response )
+    public void sendUnhandledExceptionError( Throwable ex, HttpServletRequest request, HttpServletResponse response,
+                                             ServletContext servletContext )
     {
         _log.error( "Unhandled Page Flow Exception", ex );
 
@@ -347,9 +348,9 @@
                 String msg = ex.getMessage();
                 if ( msg == null ) msg = " ";
 
-                InternalUtils.sendDevTimeError( "PageFlow_UnhandledException", request, response, ex,
-                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                                ex.getClass().getName(), msg, sw.toString() );
+                InternalUtils.sendDevTimeError( "PageFlow_UnhandledException", ex,
+                                                HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response,
+                                                servletContext, ex.getClass().getName(), msg, sw.toString() );
             }
         }
         catch ( IOException ioEx )

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultForwardRedirectHandler.java	Thu Oct 14 21:50:04 2004
@@ -59,8 +59,9 @@
         int forwardOverflowCount = contextCache.getForwardOverflowCount();
         if ( requestCount > forwardOverflowCount )
         {
-            InternalUtils.sendDevTimeError( "PageFlow_Forward_Overflow", request, response, null,
-                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR, forwardOverflowCount, uri );
+            InternalUtils.sendDevTimeError( "PageFlow_Forward_Overflow", null,
+                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response,
+                                            getServletContext(), forwardOverflowCount, uri );
             return;
         }
         
@@ -72,9 +73,9 @@
         int nestingOverflowCount = contextCache.getNestingOverflowCount();
         if ( pfStack != null && pfStack.size() > nestingOverflowCount )
         {
-            InternalUtils.sendDevTimeError( "PageFlow_Nesting_Overflow", request, response, null,
-                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR,
-                                            pfStack.size(), nestingOverflowCount );
+            InternalUtils.sendDevTimeError( "PageFlow_Nesting_Overflow", null,
+                                            HttpServletResponse.SC_INTERNAL_SERVER_ERROR, request, response,
+                                            getServletContext(), pfStack.size(), nestingOverflowCount );
             return;
         }
             

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultLoginHandler.java	Thu Oct 14 21:50:04 2004
@@ -41,12 +41,12 @@
     public void login( String username, String password, HttpServletRequest request, HttpServletResponse response )
         throws LoginException
     {
-        InternalUtils.getServerAdapter().login( username, password, request, response );
+        ContextCache.get( getServletContext() ).getServerAdapter().login( username, password, request, response );
     }
 
     public void logout( boolean invalidateSessions, HttpServletRequest request, HttpServletResponse response )
     {
-        InternalUtils.getServerAdapter().logout( invalidateSessions, request, response );
+        ContextCache.get( getServletContext() ).getServerAdapter().logout( invalidateSessions, request, response );
     }
 
     public boolean isUserInRole( String roleName, HttpServletRequest request )

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultReloadableClassHandler.java	Thu Oct 14 21:50:04 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.pageflow.internal;
 
 import org.apache.beehive.netui.pageflow.AutoRegisterActionServlet;
+import org.apache.beehive.netui.pageflow.ServerAdapter;
 import org.apache.beehive.netui.pageflow.handler.ReloadableClassHandler;
 import org.apache.beehive.netui.util.classloader.BouncyClassLoader;
 import org.apache.beehive.netui.util.cache.ClassLevelCache;
@@ -52,9 +53,10 @@
         if ( false )
         {
             ClassLoader contextClassLoader = Thread.currentThread().getContextClassLoader();
-            File[] classDirs = InternalUtils.getServerAdapter().getReloadableClassDirs( servletContext );
+            ServerAdapter serverAdapter = ContextCache.get( servletContext ).getServerAdapter();
+            File[] classDirs = serverAdapter.getReloadableClassDirs();
             
-            if ( classDirs != null && ! InternalUtils.getServerAdapter().isInProductionMode() )
+            if ( classDirs != null && ! serverAdapter.isInProductionMode() )
             {
                 _pageFlowClassLoader = new BouncyClassLoader( classDirs, contextClassLoader );
             }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/DefaultServerAdapter.java	Thu Oct 14 21:50:04 2004
@@ -25,7 +25,6 @@
 import javax.security.auth.login.LoginException;
 
 import org.apache.beehive.controls.api.context.ControlBeanContext;
-import org.apache.beehive.controls.runtime.servlet.ServletBeanContext;
 
 import java.io.File;
 
@@ -34,8 +33,14 @@
 {
     private static boolean _productionMode = true;
     
+    private ServletContext _servletContext = null;
+    
     static
     {
+        //
+        // This is our definition of "production mode": when asserts are disabled.
+        //
+        
         try
         {
             assert false;
@@ -51,18 +56,13 @@
         return _productionMode;
     }
 
-    public ServletContext getServletContext( HttpServletRequest request )
-    {
-        return request.getSession( true ).getServletContext();
-    }
-    
-    public Boolean isSecureResource( String uri, HttpServletRequest request, ServletContext servletContext )
+    public Boolean isSecureResource( String uri, HttpServletRequest request )
     {
         return null;
     }
 
-    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response,
-                                  ServletContext servletContext )
+    public boolean checkSecurity( String uri, HttpServletRequest request, HttpServletResponse response )
+                                  
     {
         return false;
     }
@@ -98,13 +98,14 @@
 
     public void initServletContext( ServletContext servletContext )
     {
+        _servletContext = servletContext;
     }
 
-    public void beginRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    public void beginRequest( HttpServletRequest request, HttpServletResponse response )
     {
     }
 
-    public void endRequest( HttpServletRequest request, HttpServletResponse response, ServletContext servletContext )
+    public void endRequest( HttpServletRequest request, HttpServletResponse response )
     {
     }
 
@@ -113,9 +114,14 @@
         return new PageFlowBeanContext();
     }
 
-    public File[] getReloadableClassDirs( ServletContext servletContext )
+    public File[] getReloadableClassDirs()
     {
-        String path = servletContext.getRealPath( "/WEB-INF/classes" );
+        String path = _servletContext.getRealPath( "/WEB-INF/classes" );
         return path != null ? new File[]{ new File( path ) } : null;
+    }
+
+    protected ServletContext getServletContext()
+    {
+        return _servletContext;
     }
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/InternalUtils.java	Thu Oct 14 21:50:04 2004
@@ -69,32 +69,30 @@
     private static final String ACTIONOUTPUT_MAP_ATTR = ATTR_PREFIX + "actionOutputs";
     private static final String BINDING_UPDATE_ERRORS_ATTR = ATTR_PREFIX + "bindingUpdateErrors";
     private static final String SHARED_FLOW_CLASSNAME_ATTR = ATTR_PREFIX + "sharedFlowClass";
-    private static final String CATALINA_HOME_PROP = "catalina.home";
-    private static final String SERVER_ADAPTER_PROP = "pageflow.serveradapter";
-    private static final String WL_SERVER_ADAPTER_CLASS = "com.bea.wlw.netui.pageflow.internal.WebLogicServerAdapter";
-    private static final String TOMCAT_SERVER_ADAPTER_CLASS = "org.apache.beehive.netui.tomcat.TomcatServerAdapter";
-    
-    private static final ServerAdapter SERVER_ADAPTER = createServerAdapter();
     
     
     /**
      * If not in production mode, write an error to the response; otherwise, set a response error code.
      */ 
-    public static void sendDevTimeError( String messageKey, HttpServletRequest request, HttpServletResponse response, 
-                                         Throwable cause, int productionTimeErrorCode, Object ... messageArgs )
+    public static void sendDevTimeError( String messageKey, Throwable cause, int productionTimeErrorCode,
+                                         HttpServletRequest request, HttpServletResponse response,
+                                         ServletContext servletContext, Object ... messageArgs )
             throws IOException
     {
-        sendDevTimeError( messageKey, messageArgs, request, response, cause, productionTimeErrorCode );
+        sendDevTimeError( messageKey, messageArgs, cause, productionTimeErrorCode, request, response, servletContext );
     }
     
     /**
      * If not in production mode, write an error to the response; otherwise, set a response error code.
      */ 
-    public static void sendDevTimeError( String messageKey, Object[] messageArgs, HttpServletRequest request, 
-                                         HttpServletResponse response, Throwable cause, int productionTimeErrorCode )
+    public static void sendDevTimeError( String messageKey, Object[] messageArgs, Throwable cause,
+                                         int productionTimeErrorCode, HttpServletRequest request,
+                                         HttpServletResponse response, ServletContext servletContext )
             throws IOException
     {
-        if ( SERVER_ADAPTER.isInProductionMode() && ! RequestValues.avoidDirectResponseOutput( request ) )
+        boolean prodMode = ContextCache.get( servletContext ).getServerAdapter().isInProductionMode();
+        
+        if ( prodMode && ! RequestValues.avoidDirectResponseOutput( request ) )
         {
             if ( _log.isErrorEnabled() )
             {
@@ -112,8 +110,8 @@
     /**
      * Write an error to the response.
      */ 
-    public static void sendError( String messageKey, HttpServletRequest request, HttpServletResponse response,
-                                  Throwable cause, Object ... messageArgs )
+    public static void sendError( String messageKey, Throwable cause, HttpServletRequest request,
+                                  HttpServletResponse response, Object ... messageArgs )
             throws IOException
     {
         sendError( messageKey, messageArgs, request, response, cause );
@@ -242,7 +240,7 @@
         //
         // This method is provided for org.apache.beehive.netui.script.xscript.context.PageFlowContextResolver.
         //
-        ServletContext servletContext = SERVER_ADAPTER.getServletContext( request );
+        ServletContext servletContext = getServletContext( request );
         
         if ( servletContext == null && _log.isWarnEnabled() )
         {
@@ -311,7 +309,7 @@
     
     public static void warnAboutClassLoaders( Object object, HttpServletRequest request )
     {
-        warnAboutClassLoaders( object, SERVER_ADAPTER.getServletContext( request ) );   
+        warnAboutClassLoaders( object, getServletContext( request ) );   
     }
     
     public static void warnAboutClassLoaders( Object object, ServletContext servletContext )
@@ -559,11 +557,6 @@
         return null;
     }
    
-    public static final ServerAdapter getServerAdapter()
-    {
-        return SERVER_ADAPTER;
-    }
-    
     /**
      * Get the current ActionServlet.
      * 
@@ -751,7 +744,7 @@
      */ 
     public static SharedFlowController ensureSharedFlow( HttpServletRequest request, HttpServletResponse response )
     {
-        return ensureSharedFlow( request, response, SERVER_ADAPTER.getServletContext( request ) );
+        return ensureSharedFlow( request, response, getServletContext( request ) );
     }
     
     /**
@@ -819,58 +812,6 @@
         }
     }
     
-    private static ServerAdapter createServerAdapter()
-    {
-        String serverAdapterClassName = System.getProperty( SERVER_ADAPTER_PROP );
-        boolean userSpecifiedServerAdapter = serverAdapterClassName != null;
-        
-        if ( serverAdapterClassName == null )
-        {
-            if ( System.getProperty( CATALINA_HOME_PROP ) != null )
-            {
-                serverAdapterClassName = TOMCAT_SERVER_ADAPTER_CLASS;
-            }
-            else
-            {
-                serverAdapterClassName = WL_SERVER_ADAPTER_CLASS;
-            }
-            
-        }
-            
-        try
-        {
-            Class serverAdapterClass = Class.forName( serverAdapterClassName );
-            ServerAdapter serverAdapter = ( ServerAdapter ) serverAdapterClass.newInstance();
-            
-            if ( _log.isInfoEnabled() )
-            {
-                _log.info( "Created server adapter of type " + serverAdapterClass );
-            }
-            
-            return serverAdapter;
-        }
-        catch ( ClassNotFoundException e )
-        {
-            if ( userSpecifiedServerAdapter && _log.isErrorEnabled() )
-            {
-                _log.error( "Could not find ServerAdapter class " + serverAdapterClassName
-                            + "; using " + DefaultServerAdapter.class.getName() + "." );
-            }
-            
-            return new DefaultServerAdapter();
-        }
-        catch ( Exception e )
-        {
-            if ( _log.isErrorEnabled() )
-            {
-                _log.error( "Error instantiating ServerAdapter " + serverAdapterClassName
-                            + "; using " + DefaultServerAdapter.class.getName() + ".", e );
-            }
-            
-            return new DefaultServerAdapter();
-        }
-    }
-    
     public static String getSharedFlowClassName( HttpServletRequest request, ServletContext servletContext )
     {
         return getSharedFlowClassNameForURI( InternalUtils.decodeURI( request ), request, servletContext );
@@ -1002,5 +943,11 @@
     {
         PageflowConfig pfConfig = ConfigUtil.getConfig().getPageflowConfig();
         return pfConfig != null ? pfConfig.getMultipartHandler() : null;
+    }
+    
+    public static ServletContext getServletContext( HttpServletRequest request )
+    {
+        assert request.getSession( false ) != null : "getServletContext() called before session created";
+        return request.getSession( true ).getServletContext();
     }
 }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/internal/JavaControlUtils.java	Thu Oct 14 21:50:04 2004
@@ -62,7 +62,7 @@
     public static void initializeControlContext( HttpServletRequest request, HttpServletResponse response,
                                                  ServletContext servletContext )
     {
-        ControlBeanContext beanContext = getControlBeanContext( request, response, true );
+        ControlBeanContext beanContext = getControlBeanContext( request, response, servletContext, true );
 
         //
         // Start a new execution context
@@ -73,10 +73,11 @@
         }
     }
 
-    public static void uninitializeControlContext( HttpServletRequest request, HttpServletResponse response )
+    public static void uninitializeControlContext( HttpServletRequest request, HttpServletResponse response,
+                                                   ServletContext servletContext )
     {
         
-        ControlBeanContext beanContext = getControlBeanContext( request, response, false );
+        ControlBeanContext beanContext = getControlBeanContext( request, response, servletContext, false );
         
         if ( beanContext instanceof ServletBeanContext )
         {
@@ -102,7 +103,7 @@
     }
     
     public static ControlBeanContext getControlBeanContext( HttpServletRequest request, HttpServletResponse response,
-                                                            boolean createIfMissing )
+                                                            ServletContext servletContext, boolean createIfMissing )
     {
         //
         // Retrieve the control bean context from the request, and if it's not there, from the session.
@@ -129,7 +130,8 @@
         //
         if ( createIfMissing )
         {
-            beanContext = InternalUtils.getServerAdapter().createControlBeanContext( request, response );
+            beanContext =
+                ContextCache.get( servletContext ).getServerAdapter().createControlBeanContext( request, response );
             request.getSession().setAttribute( CONTROL_CONTEXT_CLASSNAME, beanContext );
             request.setAttribute( CONTROL_CONTEXT_CLASSNAME, beanContext );
         }

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/DefaultURLRewriter.java	Thu Oct 14 21:50:04 2004
@@ -19,7 +19,9 @@
 
 //internal imports
 import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.ServerAdapter;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.util.FileUtils;
 
@@ -54,16 +56,18 @@
         }
         else
         {
+            ServerAdapter serverAdapter = ContextCache.get(servletContext).getServerAdapter();
+            
             //Need to do default secure/unsecure rewriting
             if ((type.equals(URLRewriter.ACTION_SECURE) || (type.equals(URLRewriter.RESOURCE_SECURE))))
             {
                 if (!request.isSecure())
-                    url = internalRewriteUrl(url, "https", InternalUtils.getServerAdapter().getSecureListenPort((HttpServletRequest) request), request.getServerName());
+                    url = internalRewriteUrl(url, "https", serverAdapter.getSecureListenPort((HttpServletRequest) request), request.getServerName());
             }
             else
             {
                 if (request.isSecure())
-                    url = internalRewriteUrl(url, "http", InternalUtils.getServerAdapter().getListenPort((HttpServletRequest) request), request.getServerName());
+                    url = internalRewriteUrl(url, "http", serverAdapter.getListenPort((HttpServletRequest) request), request.getServerName());
             }
         }
 

Modified: incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java
==============================================================================
--- incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java	(original)
+++ incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/util/TemplateHelper.java	Thu Oct 14 21:50:04 2004
@@ -24,8 +24,9 @@
 import java.net.URI;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
+import javax.servlet.ServletContext;
 
-import org.apache.beehive.netui.pageflow.PageFlowUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
 
 /**
@@ -563,7 +564,8 @@
             }
             else {
                 // Append the webapp name
-                String webAppName = InternalUtils.getServerAdapter().getFullContextPath(httpRequest);
+                ServletContext servletContext = InternalUtils.getServletContext(httpRequest);
+                String webAppName = ContextCache.get(servletContext).getServerAdapter().getFullContextPath(httpRequest);
                 buf = appendEnsureSeparator(buf, webAppName);
 
                 // Append the servlet name (mapping)
@@ -651,7 +653,8 @@
             }
             else {
                 // Append the webapp name
-                String webAppName = InternalUtils.getServerAdapter().getFullContextPath(httpRequest);
+                ServletContext servletContext = InternalUtils.getServletContext(httpRequest);
+                String webAppName = ContextCache.get(servletContext).getServerAdapter().getFullContextPath(httpRequest);
                 buf.append(webAppName);
 
                 // Append the servlet name (mapping)

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/BindingUpdateErrors.java	Thu Oct 14 21:50:04 2004
@@ -20,6 +20,7 @@
 import org.apache.beehive.netui.pageflow.ServerAdapter;
 import org.apache.beehive.netui.pageflow.internal.BindingUpdateError;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.util.Bundle;
 
@@ -114,8 +115,8 @@
             return;
         }
 
-        ServerAdapter sa = InternalUtils.getServerAdapter();
         PageContext pageContext = getPageContext();
+        ServerAdapter sa = ContextCache.get(pageContext.getServletContext()).getServerAdapter();
         ServletRequest request = pageContext.getRequest();
         assert(sa != null);
 

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Exceptions.java	Thu Oct 14 21:50:04 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.tags.html;
 
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.tags.AbstractSimpleTag;
 import org.apache.beehive.netui.util.HtmlExceptionFormatter;
 import org.apache.struts.Globals;
@@ -127,7 +128,7 @@
         }
 
         if (!_showStackTrace && _showDevModeStackTrace) {
-            boolean devMode = !InternalUtils.getServerAdapter().isInProductionMode();
+            boolean devMode = !ContextCache.get(pageContext.getServletContext()).getServerAdapter().isInProductionMode();
             if (devMode)
                 _showStackTrace = true;
         }

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/html/Form.java	Thu Oct 14 21:50:04 2004
@@ -41,6 +41,7 @@
 import org.apache.struts.config.ModuleConfig;
 import org.apache.struts.taglib.html.Constants;
 import org.apache.struts.util.RequestUtils;
+import org.apache.struts.util.TokenProcessor;
 
 import javax.servlet.ServletContext;
 import javax.servlet.ServletRequest;
@@ -791,7 +792,7 @@
                 writeHiddenParam(Constants.TOKEN_KEY, token, results, request);
             }
         }
-
+        
         // add a hidden value for each parameter
         if (_params != null) {
             Iterator paramKeys = _params.keySet().iterator();

Modified: incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java
==============================================================================
--- incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java	(original)
+++ incubator/beehive/trunk/netui/src/tags-html/org/apache/beehive/netui/tags/tree/Tree.java	Thu Oct 14 21:50:04 2004
@@ -18,6 +18,7 @@
 package org.apache.beehive.netui.tags.tree;
 
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
+import org.apache.beehive.netui.pageflow.internal.ContextCache;
 import org.apache.beehive.netui.pageflow.scoping.ScopedServletUtils;
 import org.apache.beehive.netui.pageflow.util.PageflowTagUtils;
 import org.apache.beehive.netui.script.ExpressionUpdateException;
@@ -33,6 +34,7 @@
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.jsp.JspException;
 import javax.servlet.jsp.PageContext;
+import javax.servlet.ServletContext;
 import java.io.IOException;
 import java.net.URLEncoder;
 
@@ -729,7 +731,8 @@
 
         // In devMode we will verify the structure of the tree.  This will not run in
         // production mode.
-        boolean devMode = !InternalUtils.getServerAdapter().isInProductionMode();
+        ServletContext servletContext = InternalUtils.getServletContext(request);
+        boolean devMode = !ContextCache.get(servletContext).getServerAdapter().isInProductionMode();
         if (devMode) {
             boolean error = false;
             StringBuilder errorText = new StringBuilder();