You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2006/05/30 23:54:45 UTC
svn commit: r410387 - in
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access:
DataDomain.java ExternalTransaction.java OptimisticLockException.java
Author: aadamchik
Date: Tue May 30 14:54:44 2006
New Revision: 410387
URL: http://svn.apache.org/viewvc?rev=410387&view=rev
Log:
CAY-557
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomain.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ExternalTransaction.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/OptimisticLockException.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomain.java?rev=410387&r1=410386&r2=410387&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomain.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomain.java Tue May 30 14:54:44 2006
@@ -789,8 +789,9 @@
switch (syncType) {
case DataChannel.ROLLBACK_CASCADE_SYNC:
return onSyncRollback(originatingContext);
- // "cascade" and "no_cascade" are the same from the DataDomain perspective,
- // including transaction handling logic
+ // "cascade" and "no_cascade" are the same from the DataDomain
+ // perspective,
+ // including transaction handling logic
case DataChannel.FLUSH_NOCASCADE_SYNC:
case DataChannel.FLUSH_CASCADE_SYNC:
return (GraphDiff) runInTransaction(new Transformer() {
@@ -873,6 +874,10 @@
transaction.rollback();
}
catch (Exception rollbackEx) {
+ // although we don't expect an exception here, print the stack, as
+ // there have been some Cayenne bugs already (CAY-557) that were
+ // masked by this 'catch' clause.
+ QueryLogger.logQueryError(rollbackEx);
}
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ExternalTransaction.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ExternalTransaction.java?rev=410387&r1=410386&r2=410387&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ExternalTransaction.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ExternalTransaction.java Tue May 30 14:54:44 2006
@@ -153,9 +153,10 @@
return;
}
- if (status != Transaction.STATUS_ACTIVE) {
+ if (status != Transaction.STATUS_ACTIVE
+ && status != Transaction.STATUS_MARKED_ROLLEDBACK) {
throw new IllegalStateException(
- "Transaction must have 'STATUS_ACTIVE' to be rolled back. "
+ "Transaction must have 'STATUS_ACTIVE' or 'STATUS_MARKED_ROLLEDBACK' to be rolled back. "
+ "Current status: "
+ Transaction.decodeStatus(status));
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/OptimisticLockException.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/OptimisticLockException.java?rev=410387&r1=410386&r2=410387&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/OptimisticLockException.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/OptimisticLockException.java Tue May 30 14:54:44 2006
@@ -61,6 +61,7 @@
import java.util.Map;
import org.objectstyle.cayenne.CayenneRuntimeException;
+import org.objectstyle.cayenne.DataChannel;
import org.objectstyle.cayenne.exp.Expression;
import org.objectstyle.cayenne.exp.ExpressionFactory;
import org.objectstyle.cayenne.map.DbAttribute;
@@ -74,20 +75,20 @@
* @author Andrei Adamchik
*/
public class OptimisticLockException extends CayenneRuntimeException {
+
protected String querySQL;
protected DbEntity rootEntity;
protected Map qualifierSnapshot;
- public OptimisticLockException(
- DbEntity rootEntity,
- String querySQL,
- Map qualifierSnapshot) {
+ public OptimisticLockException(DbEntity rootEntity, String querySQL,
+ Map qualifierSnapshot) {
super("Optimistic Lock Failure");
this.rootEntity = rootEntity;
this.querySQL = querySQL;
- this.qualifierSnapshot =
- (qualifierSnapshot != null) ? qualifierSnapshot : Collections.EMPTY_MAP;
+ this.qualifierSnapshot = (qualifierSnapshot != null)
+ ? qualifierSnapshot
+ : Collections.EMPTY_MAP;
}
public Map getQualifierSnapshot() {
@@ -99,24 +100,23 @@
}
/**
- * Retrieves fresh snapshot for the failed row.
- * Null row indicates that it was deleted.
+ * Retrieves fresh snapshot for the failed row. Null row indicates that it was
+ * deleted.
*/
+ // TODO: andrus, 5/30/2006 - use DataChannel instead of QE as a parameter after 1.2
public Map getFreshSnapshot(QueryEngine engine) {
+
// extract PK from the qualifierSnapshot and fetch a row
// for PK, ignoring other locking attributes...
-
+
Expression qualifier = null;
Iterator it = rootEntity.getPrimaryKey().iterator();
while (it.hasNext()) {
DbAttribute attribute = (DbAttribute) it.next();
- Expression attributeQualifier =
- ExpressionFactory.matchDbExp(
- attribute.getName(),
- qualifierSnapshot.get(attribute.getName()));
+ Expression attributeQualifier = ExpressionFactory.matchDbExp(attribute
+ .getName(), qualifierSnapshot.get(attribute.getName()));
- qualifier =
- (qualifier != null)
+ qualifier = (qualifier != null)
? qualifier.andExp(attributeQualifier)
: attributeQualifier;
}