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