Author: nico
Date: 2009-05-18 13:26:56 +0200 (Mon, 18 May 2009)
New Revision: 35241
Modified:
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
Log:
CMSC-1405 SiteCache loading on postgresql is very slow
Modified:
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
===================================================================
---
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
2009-05-18 11:24:37 UTC (rev 35240)
+++
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/navigation/NavigationBuilder.java
2009-05-18 11:26:56 UTC (rev 35241)
@@ -1,34 +1,44 @@
-/*
-
-This software is OSI Certified Open Source Software.
-OSI Certified is a certification mark of the Open Source Initiative.
-
-The license (Mozilla version 1.0) can be read at the MMBase site.
-See http://www.MMBase.org/license
-
-*/
-package com.finalist.cmsc.navigation;
-
-import java.util.LinkedHashMap;
-
-import com.finalist.cmsc.builders.TreeBuilder;
-
-public abstract class NavigationBuilder extends TreeBuilder {
-
- @Override
- protected String getRelationName() {
- return NavigationUtil.NAVREL;
- }
-
- @Override
- protected LinkedHashMap<String,String> getPathManagers() {
- return NavigationUtil.getTreeManagers();
- }
-
- @Override
- protected void registerTreeManager() {
- String builderName = getTableName();
- NavigationUtil.registerTreeManager(builderName, getFragmentField(),
isRoot());
- }
-
-}
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package com.finalist.cmsc.navigation;
+
+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;
+ }
+
+ @Override
+ protected LinkedHashMap<String,String> getPathManagers() {
+ return NavigationUtil.getTreeManagers();
+ }
+
+ @Override
+ protected void registerTreeManager() {
+ String builderName = getTableName();
+ NavigationUtil.registerTreeManager(builderName, getFragmentField(),
isRoot());
+ }
+
+}
Modified:
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
===================================================================
---
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
2009-05-18 11:24:37 UTC (rev 35240)
+++
CMSContainer/trunk/CMSContainer/cmsc/sitemanagement/src/java/com/finalist/cmsc/services/sitemanagement/SiteCacheLoader.java
2009-05-18 11:26:56 UTC (rev 35241)
@@ -1,175 +1,176 @@
-/*
-
-This software is OSI Certified Open Source Software.
-OSI Certified is a certification mark of the Open Source Initiative.
-
-The license (Mozilla version 1.0) can be read at the MMBase site.
-See http://www.MMBase.org/license
-
-*/
-package com.finalist.cmsc.services.sitemanagement;
-
-import java.util.*;
-
-import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
-
-import org.mmbase.bridge.*;
-import org.mmbase.bridge.util.HugeNodeListIterator;
-import org.mmbase.bridge.util.SearchUtil;
-import org.mmbase.cache.CachePolicy;
-import org.mmbase.module.core.MMBase;
-import org.mmbase.storage.search.SortOrder;
-import org.mmbase.storage.search.StepField;
-import org.mmbase.util.logging.Logger;
-import org.mmbase.util.logging.Logging;
-
-import com.finalist.cmsc.navigation.*;
-import com.finalist.cmsc.services.sitemanagement.tree.PageTree;
-import com.finalist.cmsc.services.sitemanagement.tree.PageTreeNode;
-
-
-public class SiteCacheLoader {
-
- /** MMbase logging system */
- private static final Logger log =
Logging.getLoggerInstance(SiteCacheLoader.class.getName());
-
-
- public List<NavigationItemManager> getNavigationManagers() {
- return NavigationManager.getNavigationManagers();
- }
-
- public Cloud getCloud() {
- return CloudProviderFactory.getCloudProvider().getAnonymousCloud();
- }
-
- public int getNavrelRelationNumber() {
- return
MMBase.getMMBase().getRelDef().getNumberByName(NavigationUtil.NAVREL);
- }
-
- public Map<String, PageTree> loadPageTreeMap() {
- Cloud cloud = getCloud();
- Map<String, PageTree> newtrees = new HashMap<String, PageTree>();
-
- List<NavigationItemManager> navigationManagers =
getNavigationManagers();
- for (NavigationItemManager nim : navigationManagers) {
- if (nim.isRoot()) {
- String nodeType = nim.getTreeManager();
- String fragmentField =
NavigationUtil.getFragmentFieldname(nodeType);
- loadTrees(newtrees, cloud, nodeType, fragmentField);
- }
- }
-
- Map<Integer,String> itemUrlFragments = new HashMap<Integer, String>();
-
- for (NavigationItemManager nim : navigationManagers) {
- if (!nim.isRoot()) {
- String nodeType = nim.getTreeManager();
- String fragmentField =
NavigationUtil.getFragmentFieldname(nodeType);
- loadNavigationItems(cloud, nodeType, fragmentField,
itemUrlFragments);
- }
- }
-
- loadTreeStructure(newtrees, cloud, itemUrlFragments);
- return newtrees;
- }
-
- @SuppressWarnings("unchecked")
- private void loadTrees(Map<String, PageTree> newtrees, Cloud cloud, String
nodeType, String fragmentField) {
- NodeManager sitesManager = cloud.getNodeManager(nodeType);
- NodeList sites = sitesManager.getList(sitesManager.createQuery());
- for (Iterator<Node> iter = sites.iterator(); iter.hasNext();) {
- Node siteNode = iter.next();
- int siteId = siteNode.getNumber();
- String sitefragment = siteNode.getStringValue(fragmentField);
- createTree(newtrees, siteId, sitefragment);
- }
- }
-
- @SuppressWarnings("unchecked")
- private void loadNavigationItems(Cloud cloud, String nodeType, String
fragmentField, Map<Integer, String> itemUrlFragments) {
- NodeManager manager = cloud.getNodeManager(nodeType);
-
- NodeQuery q = manager.createQuery();
- List<String> types = new ArrayList<String>();
- types.add(manager.getName());
- SearchUtil.addTypeConstraints(q, types);
- q.setCachePolicy(CachePolicy.NEVER);
-
- for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();)
{
- Node navNode = iter.nextNode();
- int number = navNode.getNumber();
- String urlfragment = navNode.getStringValue(fragmentField);
- itemUrlFragments.put(number, urlfragment);
- }
- }
-
- @SuppressWarnings("unchecked")
- private void loadTreeStructure(Map<String, PageTree> newtrees, Cloud
cloud, Map<Integer,String> itemUrlFragments) {
- List<Node> unfinishedNodes = new ArrayList<Node>();
-
- NodeManager navrel = cloud.getNodeManager(NavigationUtil.NAVREL);
-
- Query q = cloud.createQuery();
- q.addStep(navrel);
-
- StepField sourceField = q.addField(NavigationUtil.NAVREL + ".snumber");
- StepField posField = q.addField(NavigationUtil.NAVREL + ".pos");
-
- q.addSortOrder(sourceField, SortOrder.ORDER_ASCENDING);
- q.addSortOrder(posField, SortOrder.ORDER_ASCENDING);
- q.setCachePolicy(CachePolicy.NEVER);
-
- for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();) {
- Node navrelNode = iter.nextNode();
-
- int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".snumber");
- int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".dnumber");
- int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL +
".pos");
- String fragment = itemUrlFragments.get(destNumber);
-
- boolean parentNotFound = true;
- for (PageTree tree : newtrees.values()) {
- PageTreeNode pageTreeNode = tree.insert(sourceNumber, destNumber,
fragment, childIndex);
- if (pageTreeNode != null) {
- parentNotFound = false;
- break;
- }
- }
- if (parentNotFound) {
- unfinishedNodes.add(navrelNode);
- }
- }
- int oldUnfinishedSize = unfinishedNodes.size() + 1;
- while (oldUnfinishedSize > unfinishedNodes.size()) {
- oldUnfinishedSize = unfinishedNodes.size();
-
- for (Iterator<Node> iter = unfinishedNodes.iterator();
iter.hasNext();) {
- Node navrelNode = iter.next();
-
- int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".snumber");
- int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".dnumber");
- int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL +
".pos");
- String fragment = itemUrlFragments.get(destNumber);
-
- for (PageTree tree : newtrees.values()) {
- PageTreeNode pageTreeNode = tree.insert(sourceNumber,
destNumber, fragment, childIndex);
- if (pageTreeNode != null) {
- iter.remove();
- break;
- }
- }
- }
- }
-
- for (Node navrelNode : unfinishedNodes) {
- log.warn("Page treenode not found for navrel: " + navrelNode);
- }
- }
-
-
- public void createTree(Map<String, PageTree> newtrees, int siteId, String
sitefragment) {
- PageTree siteTree = new PageTree(siteId, sitefragment);
- newtrees.put(sitefragment.toLowerCase(), siteTree);
- }
-
-}
+/*
+
+This software is OSI Certified Open Source Software.
+OSI Certified is a certification mark of the Open Source Initiative.
+
+The license (Mozilla version 1.0) can be read at the MMBase site.
+See http://www.MMBase.org/license
+
+*/
+package com.finalist.cmsc.services.sitemanagement;
+
+import java.util.*;
+
+import net.sf.mmapps.modules.cloudprovider.CloudProviderFactory;
+
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.HugeNodeListIterator;
+import org.mmbase.bridge.util.SearchUtil;
+import org.mmbase.cache.CachePolicy;
+import org.mmbase.module.core.MMBase;
+import org.mmbase.storage.search.SortOrder;
+import org.mmbase.storage.search.StepField;
+import org.mmbase.util.logging.Logger;
+import org.mmbase.util.logging.Logging;
+
+import com.finalist.cmsc.navigation.*;
+import com.finalist.cmsc.services.sitemanagement.tree.PageTree;
+import com.finalist.cmsc.services.sitemanagement.tree.PageTreeNode;
+
+
+public class SiteCacheLoader {
+
+ /** MMbase logging system */
+ private static final Logger log =
Logging.getLoggerInstance(SiteCacheLoader.class.getName());
+
+
+ public List<NavigationItemManager> getNavigationManagers() {
+ return NavigationManager.getNavigationManagers();
+ }
+
+ public Cloud getCloud() {
+ return CloudProviderFactory.getCloudProvider().getAnonymousCloud();
+ }
+
+ public int getNavrelRelationNumber() {
+ return
MMBase.getMMBase().getRelDef().getNumberByName(NavigationUtil.NAVREL);
+ }
+
+ public Map<String, PageTree> loadPageTreeMap() {
+ Cloud cloud = getCloud();
+ Map<String, PageTree> newtrees = new HashMap<String, PageTree>();
+
+ List<NavigationItemManager> navigationManagers =
getNavigationManagers();
+ for (NavigationItemManager nim : navigationManagers) {
+ if (nim.isRoot()) {
+ String nodeType = nim.getTreeManager();
+ String fragmentField =
NavigationUtil.getFragmentFieldname(nodeType);
+ loadTrees(newtrees, cloud, nodeType, fragmentField);
+ }
+ }
+
+ Map<Integer,String> itemUrlFragments = new HashMap<Integer, String>();
+
+ for (NavigationItemManager nim : navigationManagers) {
+ if (!nim.isRoot()) {
+ String nodeType = nim.getTreeManager();
+ String fragmentField =
NavigationUtil.getFragmentFieldname(nodeType);
+ loadNavigationItems(cloud, nodeType, fragmentField,
itemUrlFragments);
+ }
+ }
+
+ loadTreeStructure(newtrees, cloud, itemUrlFragments);
+ return newtrees;
+ }
+
+ @SuppressWarnings("unchecked")
+ private void loadTrees(Map<String, PageTree> newtrees, Cloud cloud, String
nodeType, String fragmentField) {
+ NodeManager sitesManager = cloud.getNodeManager(nodeType);
+ NodeList sites = sitesManager.getList(sitesManager.createQuery());
+ for (Iterator<Node> iter = sites.iterator(); iter.hasNext();) {
+ Node siteNode = iter.next();
+ int siteId = siteNode.getNumber();
+ String sitefragment = siteNode.getStringValue(fragmentField);
+ createTree(newtrees, siteId, sitefragment);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void loadNavigationItems(Cloud cloud, String nodeType, String
fragmentField, Map<Integer, String> itemUrlFragments) {
+ NodeManager manager = cloud.getNodeManager(nodeType);
+
+ NodeQuery q = manager.createQuery();
+ List<String> types = new ArrayList<String>();
+ types.add(manager.getName());
+ SearchUtil.addTypeConstraints(q, types);
+ q.setCachePolicy(CachePolicy.NEVER);
+
+ for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();)
{
+ Node navNode = iter.nextNode();
+ int number = navNode.getNumber();
+ String urlfragment = navNode.getStringValue(fragmentField);
+ itemUrlFragments.put(number, urlfragment);
+ }
+ }
+
+ @SuppressWarnings("unchecked")
+ private void loadTreeStructure(Map<String, PageTree> newtrees, Cloud
cloud, Map<Integer,String> itemUrlFragments) {
+ List<Node> unfinishedNodes = new ArrayList<Node>();
+
+ NodeManager navrel = cloud.getNodeManager(NavigationUtil.NAVREL);
+
+ Query q = cloud.createQuery();
+ 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);
+ q.addSortOrder(posField, SortOrder.ORDER_ASCENDING);
+ q.setCachePolicy(CachePolicy.NEVER);
+
+ for (NodeIterator iter = new HugeNodeListIterator(q); iter.hasNext();) {
+ Node navrelNode = iter.nextNode();
+
+ int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".snumber");
+ int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".dnumber");
+ int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL +
".pos");
+ String fragment = itemUrlFragments.get(destNumber);
+
+ boolean parentNotFound = true;
+ for (PageTree tree : newtrees.values()) {
+ PageTreeNode pageTreeNode = tree.insert(sourceNumber, destNumber,
fragment, childIndex);
+ if (pageTreeNode != null) {
+ parentNotFound = false;
+ break;
+ }
+ }
+ if (parentNotFound) {
+ unfinishedNodes.add(navrelNode);
+ }
+ }
+ int oldUnfinishedSize = unfinishedNodes.size() + 1;
+ while (oldUnfinishedSize > unfinishedNodes.size()) {
+ oldUnfinishedSize = unfinishedNodes.size();
+
+ for (Iterator<Node> iter = unfinishedNodes.iterator();
iter.hasNext();) {
+ Node navrelNode = iter.next();
+
+ int sourceNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".snumber");
+ int destNumber = navrelNode.getIntValue(NavigationUtil.NAVREL +
".dnumber");
+ int childIndex = navrelNode.getIntValue(NavigationUtil.NAVREL +
".pos");
+ String fragment = itemUrlFragments.get(destNumber);
+
+ for (PageTree tree : newtrees.values()) {
+ PageTreeNode pageTreeNode = tree.insert(sourceNumber,
destNumber, fragment, childIndex);
+ if (pageTreeNode != null) {
+ iter.remove();
+ break;
+ }
+ }
+ }
+ }
+
+ for (Node navrelNode : unfinishedNodes) {
+ log.warn("Page treenode not found for navrel: " + navrelNode);
+ }
+ }
+
+
+ public void createTree(Map<String, PageTree> newtrees, int siteId, String
sitefragment) {
+ PageTree siteTree = new PageTree(siteId, sitefragment);
+ newtrees.put(sitefragment.toLowerCase(), siteTree);
+ }
+
+}
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs