svn commit: r1621804 - in /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp: control/RequestHandler.java event/EventFactory.java event/RomeEventHandler.java view/ViewFactory.java

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
1 message Options
Reply | Threaded
Open this post in threaded view
|

svn commit: r1621804 - in /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp: control/RequestHandler.java event/EventFactory.java event/RomeEventHandler.java view/ViewFactory.java

jacopoc
Author: jacopoc
Date: Mon Sep  1 14:26:54 2014
New Revision: 1621804

URL: http://svn.apache.org/r1621804
Log:
A series of clean-ups and modifications to RequestHandler, EventFactory and View Factory to make then (mostly) immutable and eliminate some potential concurrency issues that could happen at initialization. This is just a first pass.

Modified:
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/EventFactory.java
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/RomeEventHandler.java
    ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/ViewFactory.java

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java?rev=1621804&r1=1621803&r2=1621804&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/control/RequestHandler.java Mon Sep  1 14:26:54 2014
@@ -69,29 +69,29 @@ import org.owasp.esapi.errors.EncodingEx
 public class RequestHandler {
 
     public static final String module = RequestHandler.class.getName();
-    private boolean throwRequestHandlerExceptionOnMissingLocalRequest = UtilProperties.propertyValueEqualsIgnoreCase(
+    private static final boolean throwRequestHandlerExceptionOnMissingLocalRequest = UtilProperties.propertyValueEqualsIgnoreCase(
             "requestHandler.properties", "throwRequestHandlerExceptionOnMissingLocalRequest", "Y");
-    private String statusCodeString = UtilProperties.getPropertyValue("requestHandler.properties", "status-code", "302");
+    private final String defaultStatusCodeString = UtilProperties.getPropertyValue("requestHandler.properties", "status-code", "302");
+    private final ViewFactory viewFactory;
+    private final EventFactory eventFactory;
+    private final URL controllerConfigURL;
+    private final boolean forceHttpSession;
+    private final boolean trackServerHit;
+    private final boolean trackVisit;
+    private final boolean cookies;
+    private final String charset;
+
     public static RequestHandler getRequestHandler(ServletContext servletContext) {
         RequestHandler rh = (RequestHandler) servletContext.getAttribute("_REQUEST_HANDLER_");
         if (rh == null) {
-            rh = new RequestHandler();
+            rh = new RequestHandler(servletContext);
             servletContext.setAttribute("_REQUEST_HANDLER_", rh);
-            rh.init(servletContext);
         }
         return rh;
     }
 
-    protected ServletContext context = null;
-    protected ViewFactory viewFactory = null;
-    protected EventFactory eventFactory = null;
-    protected URL controllerConfigURL = null;
-
-    public void init(ServletContext context) {
-        if (Debug.verboseOn()) Debug.logVerbose("[RequestHandler Loading...]", module);
-        this.context = context;
-
-        // init the ControllerConfig, but don't save it anywhere
+    private RequestHandler(ServletContext context) {
+        // init the ControllerConfig, but don't save it anywhere, just load it into the cache
         this.controllerConfigURL = ConfigXMLReader.getControllerConfigURL(context);
         try {
             ConfigXMLReader.getControllerConfig(this.controllerConfigURL);
@@ -99,8 +99,14 @@ public class RequestHandler {
             // FIXME: controller.xml errors should throw an exception.
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
         }
-        this.viewFactory = new ViewFactory(this);
-        this.eventFactory = new EventFactory(this);
+        this.viewFactory = new ViewFactory(context, this.controllerConfigURL);
+        this.eventFactory = new EventFactory(context, this.controllerConfigURL);
+
+        this.forceHttpSession = "true".equalsIgnoreCase(context.getInitParameter("forceHttpSession"));
+        this.trackServerHit = !"false".equalsIgnoreCase(context.getInitParameter("track-serverhit"));
+        this.trackVisit = !"false".equalsIgnoreCase(context.getInitParameter("track-visit"));
+        this.cookies = !"false".equalsIgnoreCase(context.getInitParameter("cookies"));
+        this.charset = context.getInitParameter("charset");
     }
 
     public ConfigXMLReader.ControllerConfig getControllerConfig() {
@@ -129,16 +135,17 @@ public class RequestHandler {
         // get the controllerConfig once for this method so we don't have to get it over and over inside the method
         ConfigXMLReader.ControllerConfig controllerConfig = this.getControllerConfig();
         Map<String, ConfigXMLReader.RequestMap> requestMapMap = null;
-        String controllerStatusCodeString = null;
+        String statusCodeString = null;
         try {
             requestMapMap = controllerConfig.getRequestMapMap();
-            controllerStatusCodeString = controllerConfig.getStatusCode();
+            statusCodeString = controllerConfig.getStatusCode();
         } catch (WebAppConfigurationException e) {
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
             throw new RequestHandlerException(e);
         }
-        if(UtilValidate.isNotEmpty(controllerStatusCodeString != null))
-            statusCodeString = controllerStatusCodeString;
+        if (UtilValidate.isEmpty(statusCodeString)) {
+            statusCodeString = defaultStatusCodeString;
+        }
 
         // workaround if we are in the root webapp
         String cname = UtilHttp.getApplicationName(request);
@@ -248,7 +255,6 @@ public class RequestHandler {
                     requestMap = requestMapMap.get(defaultRequest);
                 }
             }
-            boolean forceHttpSession = "true".equals(context.getInitParameter("forceHttpSession"));
             // Check if we SHOULD be secure and are not.
             String forwardedProto = request.getHeader("X-Forwarded-Proto");
             boolean isForwardedSecure = UtilValidate.isNotEmpty(forwardedProto) && "HTTPS".equals(forwardedProto.toUpperCase());
@@ -775,11 +781,6 @@ public class RequestHandler {
         return null;
     }
 
-    /** Returns the ServletContext Object. */
-    public ServletContext getServletContext() {
-        return context;
-    }
-
     /** Returns the ViewFactory Object. */
     public ViewFactory getViewFactory() {
         return viewFactory;
@@ -942,7 +943,7 @@ public class RequestHandler {
         long viewStartTime = System.currentTimeMillis();
 
         // setup character encoding and content type
-        String charset = UtilFormatOut.checkEmpty(getServletContext().getInitParameter("charset"), req.getCharacterEncoding(), "UTF-8");
+        String charset = UtilFormatOut.checkEmpty(this.charset, req.getCharacterEncoding(), "UTF-8");
 
         String viewCharset = viewMap.encoding;
         //NOTE: if the viewCharset is "none" then no charset will be used
@@ -1198,7 +1199,7 @@ public class RequestHandler {
 
         String encodedUrl;
         if (encode) {
-            boolean forceManualJsessionid = "false".equals(getServletContext().getInitParameter("cookies")) ? true : false;
+            boolean forceManualJsessionid = !cookies;
             boolean isSpider = false;
 
             // if the current request comes from a spider, we will not add the jsessionid to the link
@@ -1293,7 +1294,7 @@ public class RequestHandler {
     }
 
     public boolean trackStats(HttpServletRequest request) {
-        if (!"false".equalsIgnoreCase(context.getInitParameter("track-serverhit"))) {
+        if (trackServerHit) {
             String uriString = RequestHandler.getRequestUri(request.getPathInfo());
             if (uriString == null) {
                 uriString="";
@@ -1312,7 +1313,7 @@ public class RequestHandler {
     }
 
     public boolean trackVisit(HttpServletRequest request) {
-        if (!"false".equalsIgnoreCase(context.getInitParameter("track-visit"))) {
+        if (trackVisit) {
             String uriString = RequestHandler.getRequestUri(request.getPathInfo());
             if (uriString == null) {
                 uriString="";

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/EventFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/EventFactory.java?rev=1621804&r1=1621803&r2=1621804&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/EventFactory.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/EventFactory.java Mon Sep  1 14:26:54 2014
@@ -18,12 +18,11 @@
  *******************************************************************************/
 package org.ofbiz.webapp.event;
 
+import java.net.URL;
 import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
 
 import javolution.util.FastMap;
 
@@ -31,7 +30,6 @@ import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralRuntimeException;
 import org.ofbiz.base.util.ObjectType;
 import org.ofbiz.webapp.control.ConfigXMLReader;
-import org.ofbiz.webapp.control.RequestHandler;
 import org.ofbiz.webapp.control.WebAppConfigurationException;
 
 /**
@@ -41,14 +39,14 @@ public class EventFactory {
 
     public static final String module = EventFactory.class.getName();
 
-    protected RequestHandler requestHandler = null;
-    protected ServletContext context = null;
+    private final URL controllerConfigURL;
+    private final ServletContext context;
     protected Map<String, EventHandler> handlers = null;
 
-    public EventFactory(RequestHandler requestHandler) {
+    public EventFactory(ServletContext context, URL controllerConfigURL) {
         handlers = FastMap.newInstance();
-        this.requestHandler = requestHandler;
-        this.context = requestHandler.getServletContext();
+        this.controllerConfigURL = controllerConfigURL;
+        this.context = context;
 
         // pre-load all event handlers
         try {
@@ -62,7 +60,7 @@ public class EventFactory {
     private void preLoadAll() throws EventHandlerException {
         Set<String> handlers = null;
         try {
-            handlers = this.requestHandler.getControllerConfig().getEventHandlerMap().keySet();
+            handlers = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getEventHandlerMap().keySet();
         } catch (WebAppConfigurationException e) {
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
         }
@@ -104,7 +102,7 @@ public class EventFactory {
         EventHandler handler = null;
         String handlerClass = null;
         try {
-            handlerClass = this.requestHandler.getControllerConfig().getEventHandlerMap().get(type);
+            handlerClass = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getEventHandlerMap().get(type);
         } catch (WebAppConfigurationException e) {
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
         }
@@ -126,19 +124,4 @@ public class EventFactory {
         }
         return handler;
     }
-
-    public static String runRequestEvent(HttpServletRequest request, HttpServletResponse response, String requestUri)
-            throws EventHandlerException {
-        ServletContext application = ((ServletContext) request.getAttribute("servletContext"));
-        RequestHandler handler = (RequestHandler) application.getAttribute("_REQUEST_HANDLER_");
-        ConfigXMLReader.ControllerConfig controllerConfig = handler.getControllerConfig();
-        ConfigXMLReader.RequestMap requestMap;
-        try {
-            requestMap = controllerConfig.getRequestMapMap().get(requestUri);
-        } catch (WebAppConfigurationException e) {
-            Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
-            throw new EventHandlerException(e);
-        }
-        return handler.runEvent(request, response, requestMap.event, requestMap, "unknown");
-    }
 }

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/RomeEventHandler.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/RomeEventHandler.java?rev=1621804&r1=1621803&r2=1621804&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/RomeEventHandler.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/event/RomeEventHandler.java Mon Sep  1 14:26:54 2014
@@ -43,18 +43,10 @@ public class RomeEventHandler implements
     public static final String mime = "application/xml; charset=UTF-8";
     public static final String defaultFeedType = "rss_2.0";
 
-    protected RequestHandler handler;
-    protected ServletContext context;
     protected EventHandler service;
     protected WireFeedOutput out;
 
     public void init(ServletContext context) throws EventHandlerException {
-        this.context = context;
-        this.handler = (RequestHandler) context.getAttribute("_REQUEST_HANDLER_");
-        if (this.handler == null) {
-            throw new EventHandlerException("No request handler found in servlet context!");
-        }
-
         // get the service event handler
         this.service = new ServiceEventHandler();
         this.service.init(context);
@@ -65,6 +57,10 @@ public class RomeEventHandler implements
      * @see org.ofbiz.webapp.event.EventHandler#invoke(ConfigXMLReader.Event, ConfigXMLReader.RequestMap, javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
      */
     public String invoke(Event event, RequestMap requestMap, HttpServletRequest request, HttpServletResponse response) throws EventHandlerException {
+        RequestHandler handler = (RequestHandler) request.getSession().getServletContext().getAttribute("_REQUEST_HANDLER_");
+        if (handler == null) {
+            throw new EventHandlerException("No request handler found in servlet context!");
+        }
         // generate the main and entry links
         String entryLinkReq = request.getParameter("entryLinkReq");
         String mainLinkReq = request.getParameter("mainLinkReq");

Modified: ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/ViewFactory.java
URL: http://svn.apache.org/viewvc/ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/ViewFactory.java?rev=1621804&r1=1621803&r2=1621804&view=diff
==============================================================================
--- ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/ViewFactory.java (original)
+++ ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp/view/ViewFactory.java Mon Sep  1 14:26:54 2014
@@ -18,6 +18,7 @@
  *******************************************************************************/
 package org.ofbiz.webapp.view;
 
+import java.net.URL;
 import java.util.Map;
 import java.util.Set;
 
@@ -29,8 +30,7 @@ import org.ofbiz.base.util.Debug;
 import org.ofbiz.base.util.GeneralRuntimeException;
 import org.ofbiz.base.util.ObjectType;
 import org.ofbiz.base.util.UtilValidate;
-import org.ofbiz.webapp.control.RequestHandler;
-import org.ofbiz.webapp.control.RequestHandlerException;
+import org.ofbiz.webapp.control.ConfigXMLReader;
 import org.ofbiz.webapp.control.WebAppConfigurationException;
 
 /**
@@ -40,14 +40,14 @@ public class ViewFactory {
 
     public static final String module = ViewFactory.class.getName();
 
-    protected RequestHandler requestHandler = null;
-    protected ServletContext context = null;
+    private final URL controllerConfigURL;
+    private final ServletContext context;
     protected Map<String, ViewHandler> handlers = null;
 
-    public ViewFactory(RequestHandler requestHandler) {
+    public ViewFactory(ServletContext context, URL controllerConfigURL) {
         this.handlers = FastMap.newInstance();
-        this.requestHandler = requestHandler;
-        this.context = requestHandler.getServletContext();
+        this.controllerConfigURL = controllerConfigURL;
+        this.context = context;
 
         // pre-load all the view handlers
         try {
@@ -61,7 +61,7 @@ public class ViewFactory {
     private void preLoadAll() throws ViewHandlerException {
         Set<String> handlers = null;
         try {
-            handlers = this.requestHandler.getControllerConfig().getViewHandlerMap().keySet();
+            handlers = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getViewHandlerMap().keySet();
         } catch (WebAppConfigurationException e) {
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
         }
@@ -120,7 +120,7 @@ public class ViewFactory {
         ViewHandler handler = null;
         String handlerClass = null;
         try {
-            handlerClass = this.requestHandler.getControllerConfig().getViewHandlerMap().get(type);
+            handlerClass = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getViewHandlerMap().get(type);
         } catch (WebAppConfigurationException e) {
             Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
         }