Author: michiel
Date: 2010-03-03 13:52:03 +0100 (Wed, 03 Mar 2010)
New Revision: 41249
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/BasicStepField.java
Log:
a bit of a hack to avoid referencing so many Cloud object via BasicStepField's
Modified:
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/BasicStepField.java
===================================================================
---
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/BasicStepField.java
2010-03-03 12:51:05 UTC (rev 41248)
+++
mmbase/branches/MMBase-1_9/core/src/main/java/org/mmbase/storage/search/implementation/BasicStepField.java
2010-03-03 12:52:03 UTC (rev 41249)
@@ -9,10 +9,13 @@
*/
package org.mmbase.storage.search.implementation;
-import org.mmbase.bridge.Field;
+import org.mmbase.bridge.*;
import org.mmbase.storage.search.*;
import org.mmbase.util.SizeMeasurable;
import org.mmbase.util.SizeOf;
+import org.mmbase.util.logging.*;
+import java.util.*;
+import java.util.concurrent.*;
/**
* Basic implementation.
@@ -23,6 +26,7 @@
* @since MMBase-1.7
*/
public class BasicStepField implements StepField, SizeMeasurable,
java.io.Serializable {
+ private static final Logger log =
Logging.getLoggerInstance(BasicStepField.class);
private static final long serialVersionUID = 1L;
@@ -120,6 +124,9 @@
}
}
+ // Perhaps it is better to have something like this available in
CloudContext itself.
+ // CloudContext#getAnonymousCloud or so.
+ private static final Map<CloudContext, Cloud> anonymousClouds = new
ConcurrentHashMap<CloudContext, Cloud>();
/**
* Constructor.
*
@@ -142,6 +149,20 @@
+ " instead of step " +
step.getTableName() + ": "
+ field);
}
+
+ if (field instanceof org.mmbase.bridge.implementation.BasicField) { //
not so nice, but I can't come up with something better for now
+ // SearchQueries can be referenced in caches. We don't want to
+ // have references to user clouds there (Field is probably a
BasicField then)
+ // So, we use a specialized anonymous cloud instance
+ CloudContext cloudContext =
field.getNodeManager().getCloud().getCloudContext();
+ Cloud anonymousCloud = anonymousClouds.get(cloudContext);
+ if (anonymousCloud == null) {
+ anonymousCloud = cloudContext.getCloud("mmbase");
+ anonymousClouds.put(cloudContext, anonymousCloud);
+ }
+ NodeManager anonymousNodeManager =
anonymousCloud.getNodeManager(field.getNodeManager().getName());
+ field = anonymousNodeManager.getField(field.getName());
+ }
this.field = field;
}
@@ -149,7 +170,7 @@
* @since MMBase-1.9.2
*/
public void setUnmodifiable() {
- modifiable = true;
+ modifiable = false;
}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs