Author: nico
Date: 2009-05-18 13:27:08 +0200 (Mon, 18 May 2009)
New Revision: 35243

Modified:
   
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
   
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
   
CMSContainer/branches/b1_5/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase/TypeUtil.java
Log:
CMSC-1405 SiteCache loading on postgresql is very slow

Modified: 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
===================================================================
--- 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
    2009-05-18 11:27:02 UTC (rev 35242)
+++ 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
    2009-05-18 11:27:08 UTC (rev 35243)
@@ -12,9 +12,19 @@
 import java.util.LinkedHashMap;
 
 import com.finalist.cmsc.builders.TreeBuilder;
+import com.finalist.cmsc.mmbase.TypeUtil;
 
 public abstract class NavigationBuilder extends TreeBuilder {
 
+   @Override
+   public boolean init() {
+      boolean result = super.init();
+      if (result) {
+         TypeUtil.fillTypeCache(this);
+      }
+      return result;
+   }
+
     @Override
     protected String getRelationName() {
         return NavigationUtil.NAVREL;

Modified: 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
===================================================================
--- 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
 2009-05-18 11:27:02 UTC (rev 35242)
+++ 
CMSContainer/branches/b1_5/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
 2009-05-18 11:27:08 UTC (rev 35243)
@@ -113,6 +113,7 @@
        q.addStep(navrel);
 
        StepField sourceField = q.addField(NavigationUtil.NAVREL + ".snumber");
+       q.addField(NavigationUtil.NAVREL + ".dnumber");
        StepField posField = q.addField(NavigationUtil.NAVREL + ".pos");
 
        q.addSortOrder(sourceField, SortOrder.ORDER_ASCENDING);

Modified: 
CMSContainer/branches/b1_5/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase/TypeUtil.java
===================================================================
--- 
CMSContainer/branches/b1_5/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase/TypeUtil.java
      2009-05-18 11:27:02 UTC (rev 35242)
+++ 
CMSContainer/branches/b1_5/CMSContainer/cmsc/utilities/src/java/com/finalist/cmsc/mmbase/TypeUtil.java
      2009-05-18 11:27:08 UTC (rev 35243)
@@ -9,11 +9,20 @@
  */
 package com.finalist.cmsc.mmbase;
 
-import java.util.ArrayList;
-import java.util.List;
+import java.util.*;
 
+import org.mmbase.cache.Cache;
+import org.mmbase.module.core.*;
+import org.mmbase.storage.search.*;
+import org.mmbase.storage.search.implementation.BasicSearchQuery;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
 public final class TypeUtil {
 
+   /** MMbase logging system */
+   private static final Logger log = 
Logging.getLoggerInstance(TypeUtil.class.getName());
+   
    private TypeUtil() {
       // utility
    }
@@ -93,4 +102,29 @@
       return isSystemType(name, false);
    }
 
+   public static  void fillTypeCache(MMObjectBuilder builder) {
+      MMBase mmbase = builder.getMMBase();
+      try {
+         Cache typeCache = Cache.getCache("TypeCache");
+         if (typeCache != null) {
+            BasicSearchQuery query = new BasicSearchQuery();
+            Step step = query.addStep(builder);
+            query.addField(step, builder.getField("number"));
+            query.addField(step, builder.getField("otype"));
+            
+            List nodes = mmbase.getSearchQueryHandler().getNodes(query, new 
ResultBuilder(mmbase, query));
+            if (nodes != null) {
+               for (Iterator iterator = nodes.iterator(); iterator.hasNext();) 
{
+                  MMObjectNode tempNode = (MMObjectNode) iterator.next();
+                  Integer otype = 
Integer.valueOf(tempNode.getIntValue(MMObjectBuilder.FIELD_OBJECT_TYPE));
+                  Integer number = Integer.valueOf(tempNode.getNumber());
+                  typeCache.put(number, otype);
+               }
+            }
+         }
+      }
+      catch (SearchQueryException e) {
+         log.info("failed to preload typeCache fir " + builder.getTableName(), 
e);
+      }
+   }
 }

_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to