Update of 
/var/cvs/contributions/CMSContainer_Modules/linkvalidator/src/java/com/finalist/cmsc/linkvalidator
In directory 
james.mmbase.org:/tmp/cvs-serv32696/linkvalidator/src/java/com/finalist/cmsc/linkvalidator

Modified Files:
        LinkValidatorCronJob.java 
Log Message:
CMSC-887 LinkValidation is not memory efficient


See also: 
http://cvs.mmbase.org/viewcvs/contributions/CMSContainer_Modules/linkvalidator/src/java/com/finalist/cmsc/linkvalidator
See also: http://www.mmbase.org/jira/browse/CMSC-887


Index: LinkValidatorCronJob.java
===================================================================
RCS file: 
/var/cvs/contributions/CMSContainer_Modules/linkvalidator/src/java/com/finalist/cmsc/linkvalidator/LinkValidatorCronJob.java,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -b -r1.4 -r1.5
--- LinkValidatorCronJob.java   26 Nov 2007 11:42:15 -0000      1.4
+++ LinkValidatorCronJob.java   5 May 2008 15:30:31 -0000       1.5
@@ -10,14 +10,18 @@
 import org.apache.commons.httpclient.protocol.Protocol;
 import org.mmbase.applications.crontab.CronEntry;
 import org.mmbase.applications.crontab.CronJob;
-import org.mmbase.bridge.Cloud;
-import org.mmbase.bridge.Node;
-import org.mmbase.bridge.NodeList;
+import org.mmbase.bridge.*;
+import org.mmbase.bridge.util.HugeNodeListIterator;
+import org.mmbase.bridge.util.SearchUtil;
 import org.mmbase.util.logging.Logger;
 import org.mmbase.util.logging.Logging;
 
 public class LinkValidatorCronJob implements CronJob {
 
+    private static final String URL_MANAGER = "urls";
+    private static final String URL_FIELD = "url";
+    private static final String VALID_FIELD = "valid";
+    
    private static final int TIMEOUT = 15000;
    private static Logger log = 
Logging.getLoggerInstance(LinkValidatorCronJob.class.getName());
 
@@ -38,16 +42,18 @@
 
 
    private void checkExternalLinks() {
-      log.info("LinkValidation thread started [freek]");
+        log.info("LinkValidation thread started");
 
       Cloud cloud = CloudProviderFactory.getCloudProvider().getCloud();
 
-      NodeList linkElements = cloud.getNodeManager("urls").getList("", "url", 
null);
+      NodeQuery urlQuery = cloud.getNodeManager(URL_MANAGER).createQuery();
+      SearchUtil.addSortOrder(urlQuery, urlQuery.getNodeManager(),URL_FIELD, 
"UP");
+      HugeNodeListIterator iterator = new HugeNodeListIterator(urlQuery);
 
       Protocol.registerProtocol("https", new Protocol("https", new 
EasySSLProtocolSocketFactory(), 443));
-      for (int i = 0; i < linkElements.size(); i++) {
-         Node linkNode = linkElements.getNode(i);
-         String url = linkNode.getStringValue("url");
+      while (iterator.hasNext()) {
+         Node linkNode = iterator.nextNode();
+         String url = linkNode.getStringValue(URL_FIELD);
          boolean valid;
          if (url.startsWith("#") || url.startsWith("mailto:";)) {
             valid = true;
@@ -56,10 +62,13 @@
             valid = isValid(url);
          }
          log.debug("Found url: [" + url + "] (" + valid + ")");
-         linkNode.setStringValue("valid", valid ? "1" : "0");
+         if (linkNode.getBooleanValue(VALID_FIELD) != valid) {
+             linkNode.setBooleanValue(VALID_FIELD, valid);
          linkNode.commit();
       }
    }
+      log.info("LinkValidation thread done");
+   }
 
 
    private boolean isValid(String url) {
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to