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