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 2007/05/05 12:11:45 UTC
svn commit: r535493 - in /cayenne/main/branches/STABLE-2.0/cayenne:
cayenne-java/src/cayenne/java/org/apache/cayenne/
cayenne-java/src/cayenne/java/org/apache/cayenne/access/
cayenne-other/release-notes/
Author: aadamchik
Date: Sat May 5 03:11:44 2007
New Revision: 535493
URL: http://svn.apache.org/viewvc?view=rev&rev=535493
Log:
CAY-786 Race condition in DataContext.localObject() - 2.0 branch
Modified:
cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java
cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java
cayenne/main/branches/STABLE-2.0/cayenne/cayenne-other/release-notes/RELEASE-NOTES-2.0-SNAPSHOT.txt
Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java?view=diff&rev=535493&r1=535492&r2=535493
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java Sat May 5 03:11:44 2007
@@ -347,12 +347,15 @@
// breaking encapsulation of the DataChannel to detect where in the hierarchy
// this context is.
- Persistent localObject = (Persistent) descriptor.createObject();
+ Persistent localObject;
+ synchronized (getGraphManager()) {
+ localObject = (Persistent) descriptor.createObject();
- localObject.setObjectContext(this);
- localObject.setObjectId(id);
+ localObject.setObjectContext(this);
+ localObject.setObjectId(id);
- getGraphManager().registerNode(id, localObject);
+ getGraphManager().registerNode(id, localObject);
+ }
if (prototype != null) {
localObject.setPersistenceState(PersistenceState.COMMITTED);
@@ -449,17 +452,20 @@
ClassDescriptor descriptor = getEntityResolver().getClassDescriptor(
id.getEntityName());
- Persistent object = (Persistent) descriptor.createObject();
-
- object.setPersistenceState(PersistenceState.HOLLOW);
- object.setObjectContext(this);
- object.setObjectId(id);
-
- // note that this must be called AFTER setting persistence state, otherwise we'd
- // get ValueHolders incorrectly marked as resolved
- descriptor.injectValueHolders(object);
-
- graphManager.registerNode(id, object);
+ Persistent object;
+ synchronized(graphManager) {
+ object = (Persistent) descriptor.createObject();
+
+ object.setPersistenceState(PersistenceState.HOLLOW);
+ object.setObjectContext(this);
+ object.setObjectId(id);
+
+ // note that this must be called AFTER setting persistence state, otherwise we'd
+ // get ValueHolders incorrectly marked as resolved
+ descriptor.injectValueHolders(object);
+
+ graphManager.registerNode(id, object);
+ }
return object;
}
Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java?view=diff&rev=535493&r1=535492&r2=535493
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java Sat May 5 03:11:44 2007
@@ -1904,12 +1904,16 @@
// create and merge into a new object
else {
- Persistent localObject = (Persistent) descriptor.createObject();
+ Persistent localObject;
- localObject.setObjectContext(this);
- localObject.setObjectId(id);
+ synchronized (getGraphManager()) {
+ localObject = (Persistent) descriptor.createObject();
- getGraphManager().registerNode(id, localObject);
+ localObject.setObjectContext(this);
+ localObject.setObjectId(id);
+
+ getGraphManager().registerNode(id, localObject);
+ }
if (prototype != null
&& prototype.getPersistenceState() != PersistenceState.HOLLOW) {
Modified: cayenne/main/branches/STABLE-2.0/cayenne/cayenne-other/release-notes/RELEASE-NOTES-2.0-SNAPSHOT.txt
URL: http://svn.apache.org/viewvc/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-other/release-notes/RELEASE-NOTES-2.0-SNAPSHOT.txt?view=diff&rev=535493&r1=535492&r2=535493
==============================================================================
--- cayenne/main/branches/STABLE-2.0/cayenne/cayenne-other/release-notes/RELEASE-NOTES-2.0-SNAPSHOT.txt (original)
+++ cayenne/main/branches/STABLE-2.0/cayenne/cayenne-other/release-notes/RELEASE-NOTES-2.0-SNAPSHOT.txt Sat May 5 03:11:44 2007
@@ -30,6 +30,7 @@
CAY-781 Bug in CayenneDataObject.readNestedProperty
CAY-783 jgroups config file not removed from cayenne.xml
CAY-784 Deleting an object with a read-only flattened relationship fails
+CAY-786 Race condition in DataContext.localObject()
----------------------------------
Release: 2.0.2