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/26 00:30:58 UTC
svn commit: r409492 - in
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access:
DataDomainQueryAction.java DataRowStore.java ObjectStore.java
ObjectTreeResolver.java
Author: aadamchik
Date: Thu May 25 15:30:57 2006
New Revision: 409492
URL: http://svn.apache.org/viewvc?rev=409492&view=rev
Log:
fixing select synchronization
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomainQueryAction.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowStore.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectTreeResolver.java
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomainQueryAction.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomainQueryAction.java?rev=409492&r1=409491&r2=409492&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomainQueryAction.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataDomainQueryAction.java Thu May 25 15:30:57 2006
@@ -379,7 +379,7 @@
ObjectTreeResolver resolver = new ObjectTreeResolver(
context,
metadata);
- objects = resolver.resolveObjectTree(
+ objects = resolver.synchronizedObjectsFromDataRows(
prefetchTree,
mainRows,
prefetchResultsByPath);
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowStore.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowStore.java?rev=409492&r1=409491&r2=409492&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowStore.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowStore.java Thu May 25 15:30:57 2006
@@ -254,8 +254,10 @@
*/
void snapshotsUpdatedForObjects(List objects, List snapshots, boolean refresh) {
+ int size = objects.size();
+
// sanity check
- if (objects.size() != snapshots.size()) {
+ if (size != snapshots.size()) {
throw new IllegalArgumentException(
"Counts of objects and corresponding snapshots do not match. "
+ "Objects count: "
@@ -267,57 +269,53 @@
Map modified = null;
Object eventPostedBy = null;
- synchronized (this) {
- int size = objects.size();
-
- for (int i = 0; i < size; i++) {
- Persistent object = (Persistent) objects.get(i);
+ for (int i = 0; i < size; i++) {
+ Persistent object = (Persistent) objects.get(i);
- // skip HOLLOW objects as they likely were created from partial snapshots
- if (object.getPersistenceState() == PersistenceState.HOLLOW) {
- continue;
- }
+ // skip HOLLOW objects as they likely were created from partial snapshots
+ if (object.getPersistenceState() == PersistenceState.HOLLOW) {
+ continue;
+ }
- ObjectId oid = object.getObjectId();
+ ObjectId oid = object.getObjectId();
- // add snapshots if refresh is forced, or if a snapshot is
- // missing
+ // add snapshots if refresh is forced, or if a snapshot is
+ // missing
- DataRow cachedSnapshot = (DataRow) this.snapshots.get(oid);
- if (refresh || cachedSnapshot == null) {
+ DataRow cachedSnapshot = (DataRow) this.snapshots.get(oid);
+ if (refresh || cachedSnapshot == null) {
- DataRow newSnapshot = (DataRow) snapshots.get(i);
-
- if (cachedSnapshot != null) {
- // use old snapshot if no changes occurred
- if (object instanceof DataObject
- && cachedSnapshot.equals(newSnapshot)) {
- ((DataObject) object).setSnapshotVersion(cachedSnapshot
- .getVersion());
- continue;
- }
- else {
- newSnapshot.setReplacesVersion(cachedSnapshot.getVersion());
- }
+ DataRow newSnapshot = (DataRow) snapshots.get(i);
+
+ if (cachedSnapshot != null) {
+ // use old snapshot if no changes occurred
+ if (object instanceof DataObject
+ && cachedSnapshot.equals(newSnapshot)) {
+ ((DataObject) object).setSnapshotVersion(cachedSnapshot
+ .getVersion());
+ continue;
}
-
- if (modified == null) {
- modified = new HashMap();
- eventPostedBy = object.getObjectContext().getGraphManager();
+ else {
+ newSnapshot.setReplacesVersion(cachedSnapshot.getVersion());
}
+ }
- modified.put(oid, newSnapshot);
+ if (modified == null) {
+ modified = new HashMap();
+ eventPostedBy = object.getObjectContext().getGraphManager();
}
- }
- if (modified != null) {
- processSnapshotChanges(
- eventPostedBy,
- modified,
- Collections.EMPTY_LIST,
- Collections.EMPTY_LIST,
- Collections.EMPTY_LIST);
+ modified.put(oid, newSnapshot);
}
+ }
+
+ if (modified != null) {
+ processSnapshotChanges(
+ eventPostedBy,
+ modified,
+ Collections.EMPTY_LIST,
+ Collections.EMPTY_LIST,
+ Collections.EMPTY_LIST);
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java?rev=409492&r1=409491&r2=409492&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectStore.java Thu May 25 15:30:57 2006
@@ -506,7 +506,9 @@
public void snapshotsUpdatedForObjects(List objects, List snapshots, boolean refresh) {
DataRowStore cache = getDataRowCache();
if (cache != null) {
- cache.snapshotsUpdatedForObjects(objects, snapshots, refresh);
+ synchronized (this) {
+ cache.snapshotsUpdatedForObjects(objects, snapshots, refresh);
+ }
}
}
Modified: incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectTreeResolver.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectTreeResolver.java?rev=409492&r1=409491&r2=409492&view=diff
==============================================================================
--- incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectTreeResolver.java (original)
+++ incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectTreeResolver.java Thu May 25 15:30:57 2006
@@ -92,6 +92,21 @@
this.cache = context.getObjectStore().getDataRowCache();
}
+ /**
+ * Properly synchronized version of 'resolveObjectTree'.
+ */
+ List synchronizedObjectsFromDataRows(
+ PrefetchTreeNode tree,
+ List mainResultRows,
+ Map extraResultsByPath) {
+
+ synchronized (context.getObjectStore()) {
+ synchronized (cache) {
+ return resolveObjectTree(tree, mainResultRows, extraResultsByPath);
+ }
+ }
+ }
+
List resolveObjectTree(
PrefetchTreeNode tree,
List mainResultRows,