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

Reply via email to