Author: mikedd
Date: Thu Mar 25 02:47:50 2010
New Revision: 927260

URL: http://svn.apache.org/viewvc?rev=927260&view=rev
Log:
OPENJPA-1550:
Set failedObject on RollbackException.
Submitted By: Heath Thomann

Modified:
    
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
    
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
    
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/RollbackException.java

Modified: 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java?rev=927260&r1=927259&r2=927260&view=diff
==============================================================================
--- 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
 (original)
+++ 
openjpa/branches/1.3.x/openjpa-persistence-jdbc/src/test/java/org/apache/openjpa/persistence/batch/exception/TestBatchLimitException.java
 Thu Mar 25 02:47:50 2010
@@ -294,11 +294,10 @@ public class TestBatchLimitException ext
     // Verify that the resultant exception contains the correct 'failed object'
     // and exception message.
     public void verifyExDetails(Throwable excp) throws Throwable {
-        // The cause should contain the 'failed object'
-        Throwable cause = excp.getCause();
-        verifyFailedObject(cause);
+        // The exception should contain the 'failed object'
+        verifyFailedObject(excp);
         // The second cause should contain the message which shows the failing 
prepared statement.
-        cause = cause.getCause();
+        Throwable cause = excp.getCause().getCause();
         verifyExMsg(cause.getMessage());
     }
 

Modified: 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java?rev=927260&r1=927259&r2=927260&view=diff
==============================================================================
--- 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 (original)
+++ 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/EntityManagerImpl.java
 Thu Mar 25 02:47:50 2010
@@ -31,8 +31,9 @@ import java.lang.reflect.Array;
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.EnumSet;
-import java.util.Map;
 import java.util.IdentityHashMap;
+import java.util.Map;
+
 import javax.persistence.EntityManager;
 import javax.persistence.FlushModeType;
 import javax.persistence.LockModeType;
@@ -46,6 +47,7 @@ import org.apache.openjpa.enhance.PCRegi
 import org.apache.openjpa.kernel.AbstractBrokerFactory;
 import org.apache.openjpa.kernel.Broker;
 import org.apache.openjpa.kernel.DelegatingBroker;
+import org.apache.openjpa.kernel.FetchConfiguration;
 import org.apache.openjpa.kernel.FindCallbacks;
 import org.apache.openjpa.kernel.LockLevels;
 import org.apache.openjpa.kernel.OpCallbacks;
@@ -53,7 +55,6 @@ import org.apache.openjpa.kernel.OpenJPA
 import org.apache.openjpa.kernel.QueryFlushModes;
 import org.apache.openjpa.kernel.QueryLanguages;
 import org.apache.openjpa.kernel.Seq;
-import org.apache.openjpa.kernel.FetchConfiguration;
 import org.apache.openjpa.kernel.jpql.JPQLParser;
 import org.apache.openjpa.lib.util.Closeable;
 import org.apache.openjpa.lib.util.Localizer;
@@ -61,6 +62,7 @@ import org.apache.openjpa.meta.ClassMeta
 import org.apache.openjpa.meta.FieldMetaData;
 import org.apache.openjpa.meta.QueryMetaData;
 import org.apache.openjpa.meta.SequenceMetaData;
+import org.apache.openjpa.util.ExceptionInfo;
 import org.apache.openjpa.util.Exceptions;
 import org.apache.openjpa.util.ImplHelper;
 import org.apache.openjpa.util.RuntimeExceptionTranslator;
@@ -519,7 +521,13 @@ public class EntityManagerImpl
             // should be thrown whenever the commit fails for any reason at
             // all, wheras the exception translator handles exceptions that
             // are caused for specific reasons
-            throw new RollbackException(e);
+            // pass along the failed object if one is available.
+            Object failedObject = null;
+            if (e instanceof ExceptionInfo){
+                failedObject = ((ExceptionInfo)e).getFailedObject();
+            }
+               
+            throw new RollbackException(e).setFailedObject(failedObject);
         }
     }
 

Modified: 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/RollbackException.java
URL: 
http://svn.apache.org/viewvc/openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/RollbackException.java?rev=927260&r1=927259&r2=927260&view=diff
==============================================================================
--- 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/RollbackException.java
 (original)
+++ 
openjpa/branches/1.3.x/openjpa-persistence/src/main/java/org/apache/openjpa/persistence/RollbackException.java
 Thu Mar 25 02:47:50 2010
@@ -38,6 +38,8 @@ import org.apache.openjpa.util.Exception
 public class RollbackException
     extends javax.persistence.RollbackException
     implements Serializable, ExceptionInfo {
+       
+    private transient Object _failed = null;
 
     private transient Throwable[] _nested;
 
@@ -67,7 +69,12 @@ public class RollbackException
     }
 
     public Object getFailedObject() {
-        return null;
+        return _failed;
+    }
+
+    public RollbackException setFailedObject(Object failed) {
+        _failed = failed;
+        return this;
     }
 
     public String toString() {


Reply via email to