You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@struts.apache.org by hu...@apache.org on 2007/11/26 17:03:50 UTC

svn commit: r598326 - in /struts/sandbox/trunk/jpa-mailreader/src/main: java/ java/action/ java/action/user/ java/entity/ java/entity/protocol/ java/entity/subscription/ java/entity/user/ webapp/

Author: husted
Date: Mon Nov 26 08:03:48 2007
New Revision: 598326

URL: http://svn.apache.org/viewvc?rev=598326&view=rev
Log:
WW-1399 Spruce up some of the JavaDocs. Add exception.jsp to webapp and exception handling to struts.xml. 

Added:
    struts/sandbox/trunk/jpa-mailreader/src/main/webapp/exception.jsp
Modified:
    struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Login.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityHelper.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/ExpiredPasswordException.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolHelper.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionHelper.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserHelper.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
    struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/Index.java Mon Nov 26 08:03:48 2007
@@ -29,11 +29,14 @@
 
 /**
  * <p>
- * Provides the Struts-specific Business and Persistance Logic API for the
+ * The top-level Struts-specific business and persistance logic API for the
  * MailReader application.
  * </p>
  * <p>
- * Generic logic should be pushed down to the Entity managers or another facade.
+ * The application is entity or resource-orientated. Subclasses provide
+ * additional logic specific to each entity or resource. Persistence system
+ * logic is delegated to a helper class for each entity. The Action classes
+ * interact only with the entity helpers, and not the underlying JPA.
  * </p>
  */
 @Conversion(conversions = {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Login.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Login.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Login.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/action/user/Login.java Mon Nov 26 08:03:48 2007
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package action.user;
 
 import org.apache.struts2.config.Result;

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityAware.java Mon Nov 26 08:03:48 2007
@@ -1,7 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package entity;
 
 import javax.persistence.EntityManager;
 
+/**
+ * <p>
+ * Comparion interface to <code>EntityInterceptor</code> that provides access
+ * to an <code>EntityManager</code> for this thread.
+ * </p>
+ */
 public interface EntityAware {
+
+    /**
+     * <p>
+     * Capture the <code>EntityManager</code> for this thread.
+     * </p>
+     * 
+     * @param value
+     *            EntityManager for this thead
+     */
     void setManager(EntityManager value);
 }

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityHelper.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityHelper.java Mon Nov 26 08:03:48 2007
@@ -26,12 +26,19 @@
 
 /**
  * <p>
- * Custom CRUD operations involving the <code>User</code> object.
+ * A set of generic CRUD operations that can operate on any entity in the
+ * default persistence unit.
+ * </p>
  * <p>
+ * If an application needs only basic CRUD operations, this class (and its
+ * companion the <code>EntityManagerHelper</code>) may be the only "data
+ * access object" the applications needs.
+ * </p>
  * <p>
- * This implementation delegates transaction managemetn and exception handling
+ * This implementation delegates transaction management and exception handling
  * to another component, such as an Interceptor or Filter, or the setUp and
- * tearDown methods of a TestCase.
+ * tearDown methods of a TestCase. See <code>EntityInterceptor</code> for an
+ * example.
  * </p>
  * 
  */

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityInterceptor.java Mon Nov 26 08:03:48 2007
@@ -1,3 +1,21 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
 package entity;
 
 import javax.persistence.EntityManager;
@@ -5,6 +23,23 @@
 import com.opensymphony.xwork2.ActionInvocation;
 import com.opensymphony.xwork2.interceptor.AbstractInterceptor;
 
+/**
+ * <p>
+ * A "single transaction per view" Interceptor for a JPA application.
+ * </p>
+ * <p>
+ * This class creates an EntityManager for each thread, and begins a transation.
+ * Other JPA components can utilize the EntityManager for persistence
+ * operations, without opening or committing transactions. At the end of the
+ * Action's lifecyle, this interceptor will commit the transaction, log any
+ * errors, and attempt a rollback, if needed.
+ * </p>
+ * <p>
+ * Exceptions are logged and rethrown. An application utilizing this
+ * interceptors should also utilize declarative exception handling, being sure
+ * to catch PersistenceExceptions.
+ * </p>
+ */
 public class EntityInterceptor extends AbstractInterceptor {
 
     private String entityInvoke(ActionInvocation invocation) throws Exception {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/EntityManagerHelper.java Mon Nov 26 08:03:48 2007
@@ -28,11 +28,26 @@
 
 /**
  * <p>
- * Provide access to JPA implementation using static methods.
+ * A generic facade that provides easy access to a JPA persistence unit using
+ * static methods.
+ * </p>
+ * <p>
+ * This static class is designed so that it can be used with any JPA
+ * application.
  * </p>
  */
 public class EntityManagerHelper {
 
+    /**
+     * <p>
+     * Declare the persistence unit for this EntityManagerHelper ("entity").
+     * </p>
+     * <p>
+     * This is the only setting that might need to be changed between
+     * applications. Otherwise, this class can be dropped into any JPA
+     * application.
+     * </p>
+     */
     static final String PERSISTENCE_UNIT = "entity";
 
     private static final EntityManagerFactory emf;
@@ -45,6 +60,17 @@
         logger = LogFactory.getLog(EntityManagerHelper.class);
     }
 
+    /**
+     * <p>
+     * Provide a per-thread EntityManager "singleton" instance.
+     * </p>
+     * <p>
+     * This method can be called as many times as needed per thread, and it will
+     * return the same EntityManager instance, until the manager is closed.
+     * </p>
+     * 
+     * @return EntityManager singleton for this thread
+     */
     public static EntityManager getEntityManager() {
         EntityManager manager = threadLocal.get();
         if (manager == null || !manager.isOpen()) {
@@ -54,6 +80,11 @@
         return manager;
     }
 
+    /**
+     * <p>
+     * Close the EntityManager and set the thread's instance to null.
+     * </p>
+     */
     public static void closeEntityManager() {
         EntityManager em = threadLocal.get();
         threadLocal.set(null);
@@ -61,26 +92,64 @@
             em.close();
     }
 
+    /**
+     * <p>
+     * Initiate a transaction for the EntityManager on this thread.
+     * </p>
+     * <p>
+     * The Transaction will remain open until commit or closeEntityManager is
+     * called.
+     * </p>
+     */
     public static void beginTransaction() {
         getEntityManager().getTransaction().begin();
     }
 
+    /**
+     * <p>
+     * Submit the changes to the persistance layer.
+     * </p>
+     * <p>
+     * Until commit is called, rollback can be used to undo the transaction.
+     * </p>
+     */
     public static void commit() {
         getEntityManager().getTransaction().commit();
     }
 
+    /**
+     * <p>
+     * Create a query for the EntityManager on this thread.
+     * </p>
+     */
     public static Query createQuery(String query) {
         return getEntityManager().createQuery(query);
     }
 
+    /**
+     * <p>
+     * Flush the EntityManager state on this thread.
+     * </p>
+     */
     public static void flush() {
         getEntityManager().flush();
     }
 
+    /**
+     * <p>
+     * Write an error message to the logging system.
+     * </p>
+     */
     public static void logError(String info, Throwable ex) {
         logger.error(info, ex);
     }
 
+    /**
+     * <p>
+     * Undo an uncommitted transaction, in the event of an error or other
+     * problem.
+     * </p>
+     */
     public static void rollback() {
         getEntityManager().getTransaction().rollback();
     }

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/ExpiredPasswordException.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/ExpiredPasswordException.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/ExpiredPasswordException.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/ExpiredPasswordException.java Mon Nov 26 08:03:48 2007
@@ -20,8 +20,8 @@
 
 /**
  * <p>
- * Signal that a password has expired and needs to be changed before principal
- * can be authorized for any other operation.
+ * An application exception to signals that a password has expired and needs to
+ * be changed before principal can be authorized for any other operation.
  * </p>
  */
 public class ExpiredPasswordException extends Exception {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/UuidEntity.java Mon Nov 26 08:03:48 2007
@@ -31,8 +31,8 @@
 @MappedSuperclass
 /**
  * <p>
- * Define a POJO that utilizes an ID property based on a universally unique
- * identifier (UUID).
+ * A POJO base class with helper methods for managing an ID property based on a
+ * universally unique identifier (UUID).
  * </p>
  * <p>
  * UUIDs are particulary useful in RESTful application designs, since an object

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolHelper.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolHelper.java Mon Nov 26 08:03:48 2007
@@ -25,7 +25,8 @@
 
 /**
  * <p>
- * Custom operations involving the <code>Protocol</code> object.
+ * Facade providing custom operations involving the <code>Protocol</code>
+ * object.
  * <p>
  */
 public interface ProtocolHelper {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/protocol/ProtocolTypeConverter.java Mon Nov 26 08:03:48 2007
@@ -24,10 +24,8 @@
 
 /**
  * <p>
- * Retrieve a <code>Protocol</code> entity from its String ID, or return the
- * String ID for a <code>Protocol</code> entity.
+ * Type converter for a <code>Protocol</code> entity.
  * </p>
- * 
  */
 @SuppressWarnings("unchecked")
 public class ProtocolTypeConverter extends StrutsTypeConverter {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/Subscription.java Mon Nov 26 08:03:48 2007
@@ -33,13 +33,13 @@
 
 /**
  * <p>
- * Describes an email account.
+ * An entity representing an email account.
  * </p>
- * 
  * <p>
  * JPA entity class for the <code>APP_SUBSCRIPTION</code> table. TThis class
  * contains sufficient detail to regenerate the database schema (top-down
  * development). The annotation mode is by field.
+ * </p>
  */
 @NamedQueries( {
         @NamedQuery(name = Subscription.COUNT, query = Subscription.COUNT_QUERY),

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionHelper.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionHelper.java Mon Nov 26 08:03:48 2007
@@ -22,8 +22,9 @@
 
 /**
  * <p>
- * Custom operations involving the <code>Subscription</code> object.
- * <p>
+ * Facade providing custom operations involving the <code>Subscription</code>
+ * object.
+ * </p>
  */
 public interface SubscriptionHelper {
 

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/subscription/SubscriptionTypeConverter.java Mon Nov 26 08:03:48 2007
@@ -23,8 +23,7 @@
 
 /**
  * <p>
- * Retrieve a <code>Subscription</code> entity from by its host name, or
- * return the host name for a <code>Subscription</code> entity.
+ * Type converter for a <code>Subscription</code>.
  * </p>
  * 
  */

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/User.java Mon Nov 26 08:03:48 2007
@@ -35,7 +35,8 @@
 
 /**
  * <p>
- * Describes an account that maintains zero or more <code>Subscription</code>s.
+ * Entity representing an account that maintains zero or more
+ * <code>Subscription</code>s.
  * </p>
  * <p>
  * JPA entity class for the <code>APP_USER</code> table. This class contains

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserHelper.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserHelper.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserHelper.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserHelper.java Mon Nov 26 08:03:48 2007
@@ -22,7 +22,7 @@
 
 /**
  * <p>
- * Custom operations involving the <code>User</code> object.
+ * Facade providing custom operations involving the <code>User</code> object.
  * </p>
  * 
  */

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/entity/user/UserTypeConverter.java Mon Nov 26 08:03:48 2007
@@ -23,18 +23,16 @@
 
 /**
  * <p>
- * Retrieve a <code>User</code> entity from its username, or return the
- * username for a <code>User</code> entity.
+ * Type convertion for a <code>User</code> entity.
  * </p>
- * 
  */
 @SuppressWarnings("unchecked")
 public class UserTypeConverter extends StrutsTypeConverter {
 
     /**
      * <p>
-     * Given a <code>username</code>, retrieve the corresponding
-     * <code>User</code> entity from the persistence database.
+     * Retrieve the corresponding <code>User</code> entity from the
+     * persistence database, given a <code>username</code>.
      * </p>
      */
     public Object convertFromString(Map context, String[] values, Class toClass) {

Modified: struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml?rev=598326&r1=598325&r2=598326&view=diff
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml (original)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/java/struts.xml Mon Nov 26 08:03:48 2007
@@ -7,12 +7,6 @@
 
     <constant name="struts.devMode" value="false" />
     <constant name="struts.action.extension" value="" />
-
-    <!-- Alternative way to support message resources without wrapper classes or annotations.
-    <constant name="struts.custom.i18n.resources" value="action.package" />
-    -->
-    <!-- include file="" / -->
-    <!-- Add packages here -->
     
     <package name="entity-default" extends="struts-default">
 		<interceptors>
@@ -23,5 +17,17 @@
   			</interceptor-stack>
 		</interceptors>
 		<default-interceptor-ref name="entityStack"/>
+
+    	<global-results>
+        	<result name="error">exception.jsp</result>
+        	<result name="exception">exception.jsp</result>
+    	</global-results>
+
+    	<global-exception-mappings>
+        	<exception-mapping exception="java.lang.Exception" result="exception"/>
+    	</global-exception-mappings>
 	</package>        
+
+	<!-- include file="" / -->
+
 </struts>

Added: struts/sandbox/trunk/jpa-mailreader/src/main/webapp/exception.jsp
URL: http://svn.apache.org/viewvc/struts/sandbox/trunk/jpa-mailreader/src/main/webapp/exception.jsp?rev=598326&view=auto
==============================================================================
--- struts/sandbox/trunk/jpa-mailreader/src/main/webapp/exception.jsp (added)
+++ struts/sandbox/trunk/jpa-mailreader/src/main/webapp/exception.jsp Mon Nov 26 08:03:48 2007
@@ -0,0 +1,28 @@
+<%@ page contentType="text/html; charset=UTF-8" %>
+<%@ taglib prefix="s" uri="/struts-tags" %>
+<html>
+	<head>
+		<title>
+			An unexpected error has occurred
+		</title>
+	</head>
+	<body>
+		<h2>An unexpected error has occurred</h2>
+		<p>
+   			Please report this error to your system administrator
+    		or appropriate technical support personnel.
+    		Thank you for your cooperation.
+  		</p>
+  		<hr/>
+  		<h3>Error Message</h3>
+    		<s:actionerror/>
+    	<p>
+      		<s:property value="%{exception.message}"/>
+    	</p>
+    	<hr/>
+   		<h3>Technical Details</h3>
+    	<p>
+      		<s:property value="%{exceptionStack}"/>
+   		</p>
+	</body>    
+</html>
\ No newline at end of file