Author: rich
Date: Wed Feb  9 08:57:35 2005
New Revision: 153085

URL: http://svn.apache.org/viewcvs?view=rev&rev=153085
Log:
Fix for http://issues.apache.org/jira/browse/BEEHIVE-265 : 
IllegalStateException causes some webapp deployment failures

This actually fixes several less apparent initialization-ordering issues, which 
caused messages like 'ServletAdapter manager not initialized correctly.'

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


Added:
    
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/
    
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java
   (with props)
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/FlowController.java
    
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
    
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java
    
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/generics/Controller.jpf

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/AutoRegisterActionServlet.java?view=diff&r1=153084&r2=153085
==============================================================================
--- 
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
 Wed Feb  9 08:57:35 2005
@@ -19,13 +19,8 @@
 
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
 import org.apache.beehive.netui.pageflow.internal.InternalUtils;
-import org.apache.beehive.netui.pageflow.internal.RequestValues;
-import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
-import org.apache.beehive.netui.pageflow.handler.Handlers;
-import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
 import org.apache.beehive.netui.util.Bundle;
 import org.apache.beehive.netui.util.DiscoveryUtils;
-import org.apache.beehive.netui.util.ServletUtils;
 import org.apache.beehive.netui.util.config.ConfigUtil;
 import org.apache.beehive.netui.util.config.bean.ModuleConfigLocators;
 import org.apache.beehive.netui.util.config.bean.PageflowConfig;
@@ -85,7 +80,6 @@
     private transient Digester _cachedConfigDigester = null;
     private Map _configParams = null;
     private ModuleConfigLocator[] _moduleConfigLocators = null;
-    private Handlers _handlers;
     
     private static final Logger _log = Logger.getInstance( 
AutoRegisterActionServlet.class );
 
@@ -96,7 +90,6 @@
         throws ServletException
     {
         super.init();
-        _handlers = Handlers.get( getServletContext() );
         setupModuleConfigLocators();
     }
     
@@ -578,13 +571,7 @@
     protected void process( HttpServletRequest request, HttpServletResponse 
response )
         throws IOException, ServletException
     {
-        //
-        // First, reinitialize the page flow classloader, for reloading when 
recompile occurs in dev mode.
-        //
         ServletContext servletContext = getServletContext();
-        FlowControllerHandlerContext handlerContext = new 
FlowControllerHandlerContext( request, response, null );
-        _handlers.getReloadableClassHandler().reloadClasses( handlerContext );
-        
         String modulePath = PageFlowUtils.getModulePathForRelativeURI( 
InternalUtils.getDecodedServletPath( request ) );
         ModuleConfig registeredApp;
         
@@ -642,22 +629,7 @@
             {
                 String relativeURI = InternalUtils.getDecodedServletPath( 
request );
                 
-                //
-                // If we couldn't find an appropriate module, try raising the 
action on the (deprecated) Global.app.
-                // TODO: have some sort of webapp-wide Shared Flow for this 
type of fallback.
-                //
-                GlobalApp ga = FlowControllerFactory.getGlobalApp( request, 
response, servletContext );
-                
-                if ( ga != null )
-                {
-                    StringBuilder sfActionURI = new StringBuilder( 
ga.getModulePath() );
-                    sfActionURI.append( '/' );
-                    sfActionURI.append( ServletUtils.getBaseName( relativeURI 
) );
-                    RequestValues.setOriginalServletPath( request, relativeURI 
);
-                    ForwardRedirectHandler frh = 
_handlers.getForwardRedirectHandler();
-                    frh.forward( handlerContext, sfActionURI.toString() );
-                    return;
-                }
+                if ( processUnhandledAction( request, response, relativeURI ) 
) return;
                 
                 if ( _log.isErrorEnabled() )
                 {
@@ -917,5 +889,15 @@
         }
         
         _registeredModules.clear();
+    }
+    
+    /**
+     * Last chance to handle an unhandled action URI.
+     * @return <code>true</code> if this method handled it (by forwarding 
somewhere or writing to the response).
+     */ 
+    protected boolean processUnhandledAction( HttpServletRequest request, 
HttpServletResponse response, String uri )
+            throws IOException, ServletException
+    {
+        return false;
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/FlowController.java?view=diff&r1=153084&r2=153085
==============================================================================
--- 
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
 Wed Feb  9 08:57:35 2005
@@ -551,8 +551,18 @@
         onDestroy();    // for backwards compatiblity
         super.destroy( session );
         
-        PageFlowEventReporter er = AdapterManager.getServletContainerAdapter( 
getServletContext() ).getEventReporter();
-        er.flowControllerDestroyed( this );
+        //
+        // We may have lost our transient ServletContext reference.  Try to 
get the ServletContext reference from the
+        // HttpSession object.
+        //
+        ServletContext servletContext = getServletContext();
+        if ( servletContext == null && session != null ) servletContext = 
session.getServletContext();
+
+        if ( servletContext != null )
+        {
+            PageFlowEventReporter er = 
AdapterManager.getServletContainerAdapter( servletContext ).getEventReporter();
+            er.flowControllerDestroyed( this );
+        }
     }
     
     /**

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java?view=diff&r1=153084&r2=153085
==============================================================================
--- 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
 (original)
+++ 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowActionServlet.java
 Wed Feb  9 08:57:35 2005
@@ -18,11 +18,18 @@
 package org.apache.beehive.netui.pageflow;
 
 import org.apache.beehive.netui.pageflow.internal.InternalConstants;
+import org.apache.beehive.netui.pageflow.internal.RequestValues;
+import org.apache.beehive.netui.pageflow.handler.Handlers;
+import org.apache.beehive.netui.pageflow.handler.FlowControllerHandlerContext;
+import org.apache.beehive.netui.pageflow.handler.ForwardRedirectHandler;
+import org.apache.beehive.netui.util.ServletUtils;
 
 import javax.servlet.ServletException;
-import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 import java.io.Serializable;
+import java.io.IOException;
 
 
 /**
@@ -35,6 +42,8 @@
  */
 public class PageFlowActionServlet extends AutoRegisterActionServlet
 {
+    private Handlers _handlers;
+    
     private static final ModuleConfigLocator[] DEFAULT_MODULE_CONFIG_LOCATORS =
             {
                 new DefaultModuleConfigLocator(),
@@ -101,8 +110,6 @@
     public void init()
             throws ServletException
     {
-        super.init();
-        
         //
         // Ensure that PageFlowContextListener gets to do its initializations, 
even if it's not registered in web.xml.
         //
@@ -112,6 +119,20 @@
         {
             PageFlowContextListener.performInitializations( servletContext );
         }
+        
+        _handlers = Handlers.get( servletContext );
+        
+        super.init();
+    }
+
+    protected void process( HttpServletRequest request, HttpServletResponse 
response )
+            throws IOException, ServletException
+    {
+        // First, reinitialize the page flow classloader, for reloading when 
recompile occurs in dev mode.
+        FlowControllerHandlerContext handlerContext = new 
FlowControllerHandlerContext( request, response, null );
+        _handlers.getReloadableClassHandler().reloadClasses( handlerContext );
+        
+        super.process( request, response );
     }
 
     /**
@@ -140,5 +161,34 @@
         {
             super.addServletMapping( servletName, urlPattern );
         }
+    }
+    
+    /**
+     * Last chance to handle an unhandled action URI.
+     * @return <code>true</code> if this method handled it (by forwarding 
somewhere or writing to the response).
+     */ 
+    @Override
+    protected boolean processUnhandledAction( HttpServletRequest request, 
HttpServletResponse response, String uri )
+        throws IOException, ServletException
+    {
+        //
+        // If we couldn't find an appropriate module, try raising the action 
on the (deprecated) Global.app.
+        // TODO: have some sort of webapp-wide Shared Flow for this type of 
fallback.
+        //
+        GlobalApp ga = FlowControllerFactory.getGlobalApp( request, response, 
getServletContext() );
+        
+        if ( ga != null )
+        {
+            StringBuilder sfActionURI = new StringBuilder( ga.getModulePath() 
);
+            sfActionURI.append( '/' );
+            sfActionURI.append( ServletUtils.getBaseName( uri ) );
+            RequestValues.setOriginalServletPath( request, uri );
+            ForwardRedirectHandler frh = _handlers.getForwardRedirectHandler();
+            FlowControllerHandlerContext context = new 
FlowControllerHandlerContext( request, response, null );
+            frh.forward( context, sfActionURI.toString() );
+            return true;
+        }
+        
+        return false;
     }
 }

Modified: 
incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/src/pageflow/org/apache/beehive/netui/pageflow/PageFlowContextListener.java?view=diff&r1=153084&r2=153085
==============================================================================
--- 
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
 Wed Feb  9 08:57:35 2005
@@ -96,9 +96,9 @@
             throw new IllegalStateException( "Could not initialize from " + 
NETUI_CONFIG_PATH, e );
         }
         
+        AdapterManager.initServletContext( servletContext );
         LegacySettings.init( servletContext );
         Handlers.init( servletContext );
-        AdapterManager.initServletContext( servletContext );
         URLTemplateDescriptor.getInstance().load( servletContext );
     }
 }

Added: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java?view=auto&rev=153085
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java
 (added)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java
 Wed Feb  9 08:57:35 2005
@@ -0,0 +1,8 @@
+package miniTests.generics;
+
+public class BaseFormBean implements java.io.Serializable
+{
+    private String _foo;
+    public void setFoo( String foo ) { _foo = foo; }
+    public String getFoo() { return _foo; }
+}

Propchange: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/WEB-INF/src/miniTests/generics/BaseFormBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/generics/Controller.jpf
URL: 
http://svn.apache.org/viewcvs/incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/generics/Controller.jpf?view=diff&r1=153084&r2=153085
==============================================================================
--- 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/generics/Controller.jpf
 (original)
+++ 
incubator/beehive/trunk/netui/test/webapps/drt/coreWeb/miniTests/generics/Controller.jpf
 Wed Feb  9 08:57:35 2005
@@ -10,7 +10,7 @@
 @Jpf.Controller(
     [EMAIL PROTECTED](name="begin", path="index.jsp")}
 )
-public class Controller< T extends Controller.BaseFormBean > extends 
PageFlowController
+public class Controller< T extends BaseFormBean > extends PageFlowController
 {
     private T _form;
 
@@ -28,12 +28,5 @@
     public String getFoo()
     {
         return _form != null ? _form.getFoo() : "[empty]";
-    }
-
-    public static class BaseFormBean implements Serializable
-    {
-        private String _foo;
-        public void setFoo( String foo ) { _foo = foo; }
-        public String getFoo() { return _foo; }
     }
 }


Reply via email to