Author: craigmcc
Date: Thu May 25 23:43:00 2006
New Revision: 409567

URL: http://svn.apache.org/viewvc?rev=409567&view=rev
Log:
Refactor the various places that exception caching (from application event
handlers) was occurring into a common strategy-based interface that can
ultimately be made customnizable.  This is further progress towards the
coherent exception strategy that SHALE-125 envisions, but in the mean time
eliminates a bunch of redundant code.

Modified:
    
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Subview.java
    
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/CallbacksFactory.java
    
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/LifecycleListener.java
    
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/ViewPhaseListener.java
    
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/LifecycleListener2.java
    
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Subview.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/core-library/src/java/org/apache/shale/component/Subview.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Subview.java
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/component/Subview.java
 Thu May 25 23:43:00 2006
@@ -29,6 +29,7 @@
 import org.apache.shale.util.Messages;
 import org.apache.shale.view.Constants;
 import org.apache.shale.view.ViewController;
+import org.apache.shale.view.faces.ExceptionHandlerFactory;
 
 /**
  * <p>Specialized implementation of <code>UINamingContainer</code> that
@@ -73,7 +74,7 @@
             try {
                 vc.prerender();
             } catch (Exception e) {
-                cacheException(e);
+                handleException(e);
             }
         }
         super.processDecodes(context);
@@ -95,7 +96,7 @@
             try {
                 vc.preprocess();
             } catch (Exception e) {
-                cacheException(e);
+                handleException(e);
             }
         }
         super.processDecodes(context);
@@ -171,69 +172,15 @@
 
 
     /**
-     * <p>Log the specified exception, and cache it on the list of exceptions
-     * to be reported after all of the appropriate <code>destroy()</code> calls
-     * have been completed.</p>
+     * <p>Handle the specified exception according to the strategy
+     * defined by our current [EMAIL PROTECTED] ExceptionHandler}.</p>
      *
-     * @param exception Exception to be cached
+     * @param exception Exception to be handled
      */
-    private void cacheException(Exception exception) {
+    private void handleException(Exception exception) {
 
-        // Log the exception unconditionally
-        log(exception.getMessage(), exception);
-
-        // Are we within the context of a JavaServer Faces request?
-        // If so, accumulate this exception to the list that can be
-        // reported at the completion of the request.
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context == null) {
-            return;
-        }
-        List list = (List) context.getExternalContext().getRequestMap().
-                get(Constants.EXCEPTIONS_LIST);
-        if (list == null) {
-            list = new ArrayList(4);
-            context.getExternalContext().getRequestMap().
-                    put(Constants.EXCEPTIONS_LIST, list);
-        }
-        list.add(exception);
-
-    }
-
-
-    /**
-     * <p>Log the specified message via <code>FacesContext</code> if it is
-     * not null, or directly to the container otherwise.</p>
-     *
-     * @param message Message to be logged
-     */
-    private void log(String message) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
-        }
-
-    }
-
-
-    /**
-     * <p>Log the specified message and exception via <code>FacesContext</code>
-     * if it is not null, or directly to the container otherwise.</p>
-     *
-     * @param message Message to be logged
-     * @param throwable Exception to be logged
-     */
-    private void log(String message, Throwable throwable) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
-        }
+        ExceptionHandlerFactory.getInstance().getExceptionHandler().
+                handleException(exception);
 
     }
 

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/CallbacksFactory.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/CallbacksFactory.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/CallbacksFactory.java
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/CallbacksFactory.java
 Thu May 25 23:43:00 2006
@@ -34,7 +34,7 @@
     /**
      * <p>Private constructor to prevent arbitrary object creation.</p>
      */
-    public CallbacksFactory() {
+    private CallbacksFactory() {
     }
 
 

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/LifecycleListener.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/LifecycleListener.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/LifecycleListener.java
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/LifecycleListener.java
 Thu May 25 23:43:00 2006
@@ -559,37 +559,6 @@
 
 
     /**
-     * <p>Log the specified exception, and cache it on the list of exceptions
-     * to be reported after all of the appropriate <code>destroy()</code> calls
-     * have been completed.</p>
-     *
-     * @param exception Exception to be cached
-     */
-    protected void cacheException(Exception exception) {
-
-        // Log the exception unconditionally
-        log(exception.getMessage(), exception);
-
-        // Are we within the context of a JavaServer Faces request?
-        // If so, accumulate this exception to the list that can be
-        // reported at the completion of the request.
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context == null) {
-            return;
-        }
-        List list = (List) context.getExternalContext().getRequestMap().
-                get(Constants.EXCEPTIONS_LIST);
-        if (list == null) {
-            list = new ArrayList(4);
-            context.getExternalContext().getRequestMap().
-                    put(Constants.EXCEPTIONS_LIST, list);
-        }
-        list.add(exception);
-
-    }
-
-
-    /**
      * <p>Fire a destroy event on an @{link AbstractApplicationBean}.</p>
      *
      * @param bean [EMAIL PROTECTED] AbstractApplicationBean} to fire event on
@@ -601,7 +570,7 @@
                 ((AbstractApplicationBean) bean).destroy();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -619,7 +588,7 @@
                 ((AbstractApplicationBean) bean).init();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -639,7 +608,7 @@
                 ((ViewController) bean).destroy();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -659,7 +628,7 @@
                 ((ViewController) bean).init();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -677,7 +646,7 @@
                 ((AbstractSessionBean) bean).activate();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -695,7 +664,7 @@
                 ((AbstractSessionBean) bean).destroy();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -713,7 +682,7 @@
                 ((AbstractSessionBean) bean).init();
             }
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -731,45 +700,22 @@
                 ((AbstractSessionBean) bean).passivate();
             }
         } catch (Exception e) {
-            cacheException(e);
-        }
-
-    }
-
-
-    /**
-     * <p>Log the specified message via <code>FacesContext</code> if it is
-     * not null, or directly to the container otherwise.</p>
-     *
-     * @param message Message to be logged
-     */
-    protected void log(String message) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
+            handleException(e);
         }
 
     }
 
 
     /**
-     * <p>Log the specified message and exception via <code>FacesContext</code>
-     * if it is not null, or directly to the container otherwise.</p>
+     * <p>Handle the specified exception according to the strategy
+     * defined by our current [EMAIL PROTECTED] ExceptionHandler}.</p>
      *
-     * @param message Message to be logged
-     * @param throwable Exception to be logged
+     * @param exception Exception to be handled
      */
-    protected void log(String message, Throwable throwable) {
+    protected void handleException(Exception exception) {
 
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
-        }
+        ExceptionHandlerFactory.getInstance().getExceptionHandler().
+                handleException(exception);
 
     }
 

Modified: 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/ViewPhaseListener.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/ViewPhaseListener.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/ViewPhaseListener.java
 (original)
+++ 
struts/shale/trunk/core-library/src/java/org/apache/shale/view/faces/ViewPhaseListener.java
 Thu May 25 23:43:00 2006
@@ -165,7 +165,7 @@
             try {
                 
viewControllerCallbacks(event.getFacesContext()).preprocess(vc);
             } catch (Exception e) {
-                cacheException(e);
+                handleException(e);
             }
         }
 
@@ -189,7 +189,7 @@
         try {
             viewControllerCallbacks(event.getFacesContext()).prerender(vc);
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
         map.remove(Constants.VIEW_RENDERED);
 
@@ -197,74 +197,6 @@
 
 
     /**
-     * <p>Log the specified exception, and cache it on the list of exceptions
-     * to be reported after all of the appropriate <code>destroy()</code> calls
-     * have been completed.</p>
-     *
-     * @param exception Exception to be cached
-     */
-    private void cacheException(Exception exception) {
-
-        // Log the exception unconditionally
-        log(exception.getMessage(), exception);
-
-        // Are we within the context of a JavaServer Faces request?
-        // If so, accumulate this exception to the list that can be
-        // reported at the completion of the request.
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context == null) {
-            return;
-        }
-        List list = (List) context.getExternalContext().getRequestMap().
-                get(Constants.EXCEPTIONS_LIST);
-        if (list == null) {
-            list = new ArrayList(4);
-            context.getExternalContext().getRequestMap().
-                    put(Constants.EXCEPTIONS_LIST, list);
-        }
-        list.add(exception);
-
-    }
-
-
-    /**
-     * <p>Log the specified message via <code>FacesContext</code> if it is
-     * not null, or directly to the container otherwise.</p>
-     *
-     * @param message Message to be logged
-     */
-    private void log(String message) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
-        }
-
-    }
-
-
-    /**
-     * <p>Log the specified message and exception via <code>FacesContext</code>
-     * if it is not null, or directly to the container otherwise.</p>
-     *
-     * @param message Message to be logged
-     * @param throwable Exception to be logged
-     */
-    private void log(String message, Throwable throwable) {
-
-        FacesContext context = FacesContext.getCurrentInstance();
-        if (context != null) {
-            context.getExternalContext().log(message);
-        } else {
-            System.out.println(message);
-        }
-
-    }
-
-
-    /**
      * <p>The [EMAIL PROTECTED] ViewControllerCallbacks} instance we will use.
      * This instance is lazily instantiated.</p>
      */
@@ -290,6 +222,20 @@
             }
         }
         return viewControllerCallbacks;
+
+    }
+
+
+    /**
+     * <p>Handle the specified exception according to the strategy
+     * defined by our current [EMAIL PROTECTED] ExceptionHandler}.</p>
+     *
+     * @param exception Exception to be handled
+     */
+    private void handleException(Exception exception) {
+
+        ExceptionHandlerFactory.getInstance().getExceptionHandler().
+                handleException(exception);
 
     }
 

Modified: 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/LifecycleListener2.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/LifecycleListener2.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/LifecycleListener2.java
 (original)
+++ 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/LifecycleListener2.java
 Thu May 25 23:43:00 2006
@@ -320,9 +320,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -346,9 +346,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -373,9 +373,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -400,9 +400,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -426,9 +426,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -452,9 +452,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -478,9 +478,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }
@@ -504,9 +504,9 @@
                 method.invoke(bean, PARAMETERS);
             }
         } catch (InvocationTargetException e) {
-            cacheException((Exception) e.getCause());
+            handleException((Exception) e.getCause());
         } catch (Exception e) {
-            cacheException(e);
+            handleException(e);
         }
 
     }

Modified: 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java
URL: 
http://svn.apache.org/viewvc/struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java?rev=409567&r1=409566&r2=409567&view=diff
==============================================================================
--- 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java
 (original)
+++ 
struts/shale/trunk/tiger/src/java/org/apache/shale/tiger/view/faces/ViewControllerCallbacks2.java
 Thu May 25 23:43:00 2006
@@ -28,6 +28,7 @@
 import org.apache.shale.tiger.view.Prerender;
 import org.apache.shale.tiger.view.View;
 import org.apache.shale.view.ViewController;
+import org.apache.shale.view.faces.ExceptionHandlerFactory;
 import org.apache.shale.view.faces.ViewControllerCallbacks;
 
 /**
@@ -65,7 +66,11 @@
     public void preprocess(Object instance) {
 
         if (instance instanceof ViewController) {
-            ((ViewController) instance).preprocess();
+            try {
+                ((ViewController) instance).preprocess();
+            } catch (Exception e) {
+                handleException(e);
+            }
             return;
         }
 
@@ -74,9 +79,9 @@
             try {
                 method.invoke(instance, new Object[0]);
             } catch (IllegalAccessException e) {
-                throw new FacesException(e);
+                handleException(e);
             } catch (InvocationTargetException e) {
-                throw new FacesException(e.getCause());
+                handleException((Exception) e.getCause());
             }
         }
 
@@ -92,7 +97,11 @@
     public void prerender(Object instance) {
 
         if (instance instanceof ViewController) {
-            ((ViewController) instance).prerender();
+            try {
+                ((ViewController) instance).prerender();
+            } catch (Exception e) {
+                handleException(e);
+            }
             return;
         }
 
@@ -101,9 +110,9 @@
             try {
                 method.invoke(instance, new Object[0]);
             } catch (IllegalAccessException e) {
-                throw new FacesException(e);
+                handleException(e);
             } catch (InvocationTargetException e) {
-                throw new FacesException(e.getCause());
+                handleException((Exception) e.getCause());
             }
         }
 
@@ -111,6 +120,20 @@
 
 
     // --------------------------------------------------------- Private 
Methods
+
+
+    /**
+     * <p>Handle the specified exception according to the strategy
+     * defined by our current [EMAIL PROTECTED] ExceptionHandler}.</p>
+     *
+     * @param exception Exception to be handled
+     */
+    private void handleException(Exception exception) {
+
+        ExceptionHandlerFactory.getInstance().getExceptionHandler().
+                handleException(exception);
+
+    }
 
 
     /**


Reply via email to