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; }
}
}