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

Modified Files:
      Tag: v1_3
        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.3
retrieving revision 1.3.4.1
diff -u -b -r1.3 -r1.3.4.1
--- LinkValidatorCronJob.java   8 Mar 2007 20:18:11 -0000       1.3
+++ LinkValidatorCronJob.java   5 May 2008 15:24:47 -0000       1.3.4.1
@@ -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());
 
@@ -34,27 +38,33 @@
     }
 
     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;
-            } else {
+            }
+            else {
                 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) {
         // LCM-54: L1 uses urls with embedded spaces (works in IE but not in
@@ -77,13 +87,17 @@
             if (!valid) {
                 log.debug("Got responsecode (" + responseCode + ")for url : " 
+ escapedUrl);
             }
-        } catch (IllegalArgumentException ex) {
+        }
+        catch (IllegalArgumentException ex) {
             log.debug("Found an invalid url : " + escapedUrl, ex);
-        } catch (IOException ex) {
+        }
+        catch (IOException ex) {
             log.debug("Got a IOException for url : " + escapedUrl, ex);
-        } catch (Throwable t) {
+        }
+        catch (Throwable t) {
            log.debug("Got an unexpected Throwable for url : " + escapedUrl, t);
-        } finally {
+        }
+        finally {
            if(httpget != null) {
               httpget.releaseConnection();
            }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to