svn commit: r1621942 - in /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp: event/EventFactory.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: r1621942 - in /ofbiz/trunk/framework/webapp/src/org/ofbiz/webapp: event/EventFactory.java view/ViewFactory.java

jacopoc
Author: jacopoc
Date: Tue Sep  2 07:26:03 2014
New Revision: 1621942

URL: http://svn.apache.org/r1621942
Log:
Greatly cleaned-up and simplified the EventFactory and ViewFactory classes used by the RequestHandler: they are now (mostly) immutable and thread safe.

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

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=1621942&r1=1621941&r2=1621942&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 Tue Sep  2 07:26:03 2014
@@ -19,18 +19,16 @@
 package org.ofbiz.webapp.event;
 
 import java.net.URL;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
 
-import javolution.util.FastMap;
-
 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.WebAppConfigurationException;
 
 /**
  * EventFactory - Event Handler Factory
@@ -39,88 +37,29 @@ public class EventFactory {
 
     public static final String module = EventFactory.class.getName();
 
-    private final URL controllerConfigURL;
-    private final ServletContext context;
-    protected Map<String, EventHandler> handlers = null;
+    private final Map<String, EventHandler> handlers = new HashMap<String, EventHandler>();
 
     public EventFactory(ServletContext context, URL controllerConfigURL) {
-        handlers = FastMap.newInstance();
-        this.controllerConfigURL = controllerConfigURL;
-        this.context = context;
-
-        // pre-load all event handlers
+        // load all the event handlers
         try {
-            this.preLoadAll();
-        } catch (EventHandlerException e) {
+            Set<Map.Entry<String,String>> handlerEntries = ConfigXMLReader.getControllerConfig(controllerConfigURL).getEventHandlerMap().entrySet();
+            if (handlerEntries != null) {
+                for (Map.Entry<String,String> handlerEntry: handlerEntries) {
+                    EventHandler handler = (EventHandler) ObjectType.getInstance(handlerEntry.getValue());
+                    handler.init(context);
+                    this.handlers.put(handlerEntry.getKey(), handler);
+                }
+            }
+        } catch (Exception e) {
             Debug.logError(e, module);
             throw new GeneralRuntimeException(e);
         }
     }
 
-    private void preLoadAll() throws EventHandlerException {
-        Set<String> handlers = null;
-        try {
-            handlers = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getEventHandlerMap().keySet();
-        } catch (WebAppConfigurationException e) {
-            Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
-        }
-        if (handlers != null) {
-            for (String type: handlers) {
-                this.handlers.put(type, this.loadEventHandler(type));
-            }
-        }
-    }
-
     public EventHandler getEventHandler(String type) throws EventHandlerException {
-        // check if we are new / empty and add the default handler in
-        if (handlers.size() == 0) {
-            this.preLoadAll();
-        }
-
-        // attempt to get a pre-loaded handler
         EventHandler handler = handlers.get(type);
-
         if (handler == null) {
-            synchronized (EventHandler.class) {
-                handler = handlers.get(type);
-                if (handler == null) {
-                    handler = this.loadEventHandler(type);
-                    handlers.put(type, handler);
-                }
-            }
-            if (handler == null)
-                throw new EventHandlerException("No handler found for type: " + type);
-        }
-        return handler;
-    }
-
-    public void clear() {
-        handlers.clear();
-    }
-
-    private EventHandler loadEventHandler(String type) throws EventHandlerException {
-        EventHandler handler = null;
-        String handlerClass = null;
-        try {
-            handlerClass = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getEventHandlerMap().get(type);
-        } catch (WebAppConfigurationException e) {
-            Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
-        }
-        if (handlerClass == null) {
-            throw new EventHandlerException("Unknown handler type: " + type);
-        }
-
-        try {
-            handler = (EventHandler) ObjectType.getInstance(handlerClass);
-            handler.init(context);
-        } catch (NoClassDefFoundError e) {
-            throw new EventHandlerException("No class def found for handler [" + handlerClass + "]", e);
-        } catch (ClassNotFoundException cnf) {
-            throw new EventHandlerException("Cannot load handler class [" + handlerClass + "]", cnf);
-        } catch (InstantiationException ie) {
-            throw new EventHandlerException("Cannot get instance of the handler [" + handlerClass + "]", ie);
-        } catch (IllegalAccessException iae) {
-            throw new EventHandlerException(iae.getMessage(), iae);
+            throw new EventHandlerException("No handler found for type: " + type);
         }
         return handler;
     }

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=1621942&r1=1621941&r2=1621942&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 Tue Sep  2 07:26:03 2014
@@ -19,19 +19,17 @@
 package org.ofbiz.webapp.view;
 
 import java.net.URL;
+import java.util.HashMap;
 import java.util.Map;
 import java.util.Set;
 
 import javax.servlet.ServletContext;
 
-import javolution.util.FastMap;
-
 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.ConfigXMLReader;
-import org.ofbiz.webapp.control.WebAppConfigurationException;
 
 /**
  * ViewFactory - View Handler Factory
@@ -40,46 +38,29 @@ public class ViewFactory {
 
     public static final String module = ViewFactory.class.getName();
 
-    private final URL controllerConfigURL;
-    private final ServletContext context;
-    protected Map<String, ViewHandler> handlers = null;
+    private final Map<String, ViewHandler> handlers = new HashMap<String, ViewHandler>();
 
     public ViewFactory(ServletContext context, URL controllerConfigURL) {
-        this.handlers = FastMap.newInstance();
-        this.controllerConfigURL = controllerConfigURL;
-        this.context = context;
-
-        // pre-load all the view handlers
+        // load all the view handlers
         try {
-            this.preLoadAll();
-        } catch (ViewHandlerException e) {
-            Debug.logError(e, module);
-            throw new GeneralRuntimeException(e);
-        }
-    }
-
-    private void preLoadAll() throws ViewHandlerException {
-        Set<String> handlers = null;
-        try {
-            handlers = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getViewHandlerMap().keySet();
-        } catch (WebAppConfigurationException e) {
-            Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
-        }
-        if (handlers != null) {
-            for (String type: handlers) {
-                this.handlers.put(type, this.loadViewHandler(type));
+            Set<Map.Entry<String,String>> handlerEntries = ConfigXMLReader.getControllerConfig(controllerConfigURL).getViewHandlerMap().entrySet();
+            if (handlerEntries != null) {
+                for (Map.Entry<String,String> handlerEntry: handlerEntries) {
+                    ViewHandler handler = (ViewHandler) ObjectType.getInstance(handlerEntry.getValue());
+                    handler.setName(handlerEntry.getKey());
+                    handler.init(context);
+                    this.handlers.put(handlerEntry.getKey(), handler);
+                }
             }
-        }
-
-        // load the "default" type
-        if (!this.handlers.containsKey("default")) {
-            try {
-                ViewHandler h = (ViewHandler) ObjectType.getInstance("org.ofbiz.webapp.view.JspViewHandler");
-                h.init(context);
-                this. handlers.put("default", h);
-            } catch (Exception e) {
-                throw new ViewHandlerException(e);
+            // load the "default" type
+            if (!this.handlers.containsKey("default")) {
+                ViewHandler defaultHandler = (ViewHandler) ObjectType.getInstance("org.ofbiz.webapp.view.JspViewHandler");
+                defaultHandler.init(context);
+                this. handlers.put("default", defaultHandler);
             }
+        } catch (Exception e) {
+            Debug.logError(e, module);
+            throw new GeneralRuntimeException(e);
         }
     }
 
@@ -87,60 +68,11 @@ public class ViewFactory {
         if (UtilValidate.isEmpty(type)) {
             type = "default";
         }
-
-        // check if we are new / empty and add the default handler in
-        if (handlers.size() == 0) {
-            this.preLoadAll();
-        }
-
         // get the view handler by type from the contextHandlers
         ViewHandler handler = handlers.get(type);
-
-        // if none found lets create it and add it in
         if (handler == null) {
-            synchronized (ViewFactory.class) {
-                handler = handlers.get(type);
-                if (handler == null) {
-                    handler = this.loadViewHandler(type);
-                    handlers.put(type, handler);
-                }
-            }
-            if (handler == null) {
-                throw new ViewHandlerException("No handler found for type: " + type);
-            }
-        }
-        return handler;
-    }
-
-    public void clear() {
-        handlers.clear();
-    }
-
-    private ViewHandler loadViewHandler(String type) throws ViewHandlerException {
-        ViewHandler handler = null;
-        String handlerClass = null;
-        try {
-            handlerClass = ConfigXMLReader.getControllerConfig(this.controllerConfigURL).getViewHandlerMap().get(type);
-        } catch (WebAppConfigurationException e) {
-            Debug.logError(e, "Exception thrown while parsing controller.xml file: ", module);
-        }
-        if (handlerClass == null) {
-            throw new ViewHandlerException("Unknown handler type: " + type);
+            throw new ViewHandlerException("No handler found for type: " + type);
         }
-
-        try {
-            handler = (ViewHandler) ObjectType.getInstance(handlerClass);
-            handler.setName(type);
-            handler.init(context);
-        } catch (ClassNotFoundException cnf) {
-            //throw new ViewHandlerException("Cannot load handler class", cnf);
-            Debug.logWarning("Warning: could not load view handler class because it was not found; note that some views may not work: " + cnf.toString(), module);
-        } catch (InstantiationException ie) {
-            throw new ViewHandlerException("Cannot get instance of the handler", ie);
-        } catch (IllegalAccessException iae) {
-            throw new ViewHandlerException(iae.getMessage(), iae);
-        }
-
         return handler;
     }
 }