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() {