Update of /var/cvs/applications/email/src/org/mmbase/applications/email
In directory 
james.mmbase.org:/tmp/cvs-serv32045/src/org/mmbase/applications/email

Modified Files:
        EmailBuilder.java EmailExpireHandler.java 
Log Message:
simplified email-expire handler stuff a bit, and made it appear in the 'jobs' 
overview page, and not requiring an own thread any more


See also: 
http://cvs.mmbase.org/viewcvs/applications/email/src/org/mmbase/applications/email


Index: EmailBuilder.java
===================================================================
RCS file: 
/var/cvs/applications/email/src/org/mmbase/applications/email/EmailBuilder.java,v
retrieving revision 1.33
retrieving revision 1.34
diff -u -b -r1.33 -r1.34
--- EmailBuilder.java   27 Nov 2008 12:26:37 -0000      1.33
+++ EmailBuilder.java   27 Nov 2008 13:53:35 -0000      1.34
@@ -10,10 +10,13 @@
 package org.mmbase.applications.email;
 
 import java.util.*;
+import java.util.concurrent.*;
+
 import org.mmbase.bridge.Node;
 
 import org.mmbase.module.*;
 import org.mmbase.module.core.*;
+import org.mmbase.util.ThreadPools;
 
 import org.mmbase.storage.search.*;
 import org.mmbase.storage.search.implementation.*;
@@ -28,7 +31,7 @@
  *
  * @author Daniel Ockeloen
  * @author Michiel Meeuwissen
- * @version $Id: EmailBuilder.java,v 1.33 2008/11/27 12:26:37 michiel Exp $
+ * @version $Id: EmailBuilder.java,v 1.34 2008/11/27 13:53:35 michiel Exp $
  */
 public class EmailBuilder extends MMObjectBuilder {
 
@@ -66,15 +69,15 @@
     static String groupsBuilder;
 
     // reference to the expire handler
-    private static EmailExpireHandler expirehandler;
+    private ScheduledFuture  expireHandler;
 
-    protected int expireTime = 60;
-    protected int sleepTime = 60 * 30;
+    protected int expireTime = 60 * 30 ;
+    protected int sleepTime = 60;
 
     /**
      * init
      */
-    public boolean init() {
+    @Override public boolean init() {
         super.init ();
 
         String property = getInitParameter("expireTime");
@@ -100,7 +103,14 @@
             // oneshot email nodes after the defined expiretime
             // check every defined sleeptime
             log.service("Expirehandler started with sleep time " + sleepTime + 
"sec, expire time " + expireTime + "sec.");
-            expirehandler = new EmailExpireHandler(this, sleepTime, 
expireTime);
+            expireHandler =
+                ThreadPools.scheduler.scheduleAtFixedRate(new 
EmailExpireHandler(this, expireTime),
+                                                          sleepTime,
+                                                          sleepTime, 
TimeUnit.SECONDS);
+            ThreadPools.identify(expireHandler, "Sent email deleter");
+
+
+
         } else {
             log.service("Expirehandler not started");
         }
@@ -117,6 +127,9 @@
         return true;
     }
 
+    @Override public void shutdown() {
+        if (expireHandler != null) { expireHandler.cancel(true); }
+    }
 
     {
         addFunction(new NodeFunction/*<Void>*/("mail", MAIL_PARAMETERS, 
ReturnType.VOID) {
@@ -125,7 +138,7 @@
                     setType(node, parameters);
 
                     // get the mailtype so we can call the correct 
handler/method
-                    int mailType = node.getIntValue("mailtype");
+                    int mailType = node.getIntValue(getTypeField());
                     boolean success = false;
                     switch(mailType) {
                     case TYPE_ONESHOT :
@@ -152,7 +165,7 @@
                     setType(node, parameters);
 
                     // get the mailtype so we can call the correct 
handler/method
-                    int mailType = node.getIntValue("mailtype");
+                    int mailType = node.getIntValue(getTypeField());
                     switch(mailType) {
                     case TYPE_ONESHOT :
                         // deleting the node happens in EmailExpireHandler
@@ -242,9 +255,14 @@
         NodeSearchQuery query = new NodeSearchQuery(this);
         BasicCompositeConstraint cons = new 
BasicCompositeConstraint(CompositeConstraint.LOGICAL_AND);
 
+        try {
         cons.addChild(new 
BasicFieldValueConstraint(query.getField(getField("mailstatus")), 
STATE_DELIVERED));
         cons.addChild(new 
BasicFieldValueConstraint(query.getField(getField(getTypeField())),   
TYPE_ONESHOT));
         cons.addChild(new 
BasicFieldValueConstraint(query.getField(getField("mailedtime")), new 
java.util.Date(age)).setOperator(FieldCompareConstraint.LESS));
+        } catch (IllegalArgumentException e) {
+            log.warn(e.getMessage());
+            return new ArrayList<MMObjectNode>();
+        }
         query.setConstraint(cons);
         try {
             // mailedtime constraints makes it useless to do a cached query.


Index: EmailExpireHandler.java
===================================================================
RCS file: 
/var/cvs/applications/email/src/org/mmbase/applications/email/EmailExpireHandler.java,v
retrieving revision 1.14
retrieving revision 1.15
diff -u -b -r1.14 -r1.15
--- EmailExpireHandler.java     3 Feb 2008 17:45:20 -0000       1.14
+++ EmailExpireHandler.java     27 Nov 2008 13:53:35 -0000      1.15
@@ -22,28 +22,20 @@
  *
  * @author Daniel Ockeloen
  */
-public class EmailExpireHandler implements Runnable {
+class EmailExpireHandler implements Runnable {
 
 
     static private final Logger log = 
Logging.getLoggerInstance(EmailExpireHandler.class);
 
-    // sleeptime between expire runs in seconds
-    int sleeptime;
-
-    // expire time (default 30min, set in the builder.xml), defined in seconds
-    int expiretime;
-
-    // parent builder needed for callbacks
-    EmailBuilder parent;
+    final int expiretime;
+    final EmailBuilder parent;
 
     /**
     *  create a handler with sleeptime and expiretime
     */
-    public EmailExpireHandler(EmailBuilder parent, int sleeptime, int 
expiretime) {
+    public EmailExpireHandler(EmailBuilder parent, int expiretime) {
         this.parent = parent;
-        this.sleeptime = sleeptime;
         this.expiretime = expiretime;
-        MMBaseContext.startThread(this, "emailexpireprobe");
     }
 
     /**
@@ -51,8 +43,7 @@
     */
     public void run() {
         try {
-            MMBase mmbase = MMBase.getMMBase();
-            while (!mmbase.isShutdown()) {
+            log.debug("Checking for to-be-deleted mail");
                 // get the nodes we want to expire
                 for (MMObjectNode expiredNode : 
parent.getDeliveredMailOlderThan(expiretime)) {
                     log.service("Removing successfully mailed email 'one shot' 
email node " + expiredNode.getNumber());
@@ -61,22 +52,8 @@
                     // remove the node itself, by asking its builder
                     parent.removeNode(expiredNode);
                 }
-                try {
-                    Thread.sleep(sleeptime * 1000);
-                } catch (InterruptedException f) {
-                    log.service(Thread.currentThread().getName() +" was 
interrupted.");
-                    break;
-                }
-                if (MMBase.getMMBase().isShutdown()) {
-                    log.service("MMBase has been shutdown, breaking out of 
email expire probe too");
-                    break;
-                } else {
-                    log.debug("MMBase still running");
-                }
-            }
         } catch (Exception e) {
-            log.error("Exception in emailqueueprobe thread!", e);
-            return;
+            log.error(e);
         }
     }
 }
_______________________________________________
Cvs mailing list
[email protected]
http://lists.mmbase.org/mailman/listinfo/cvs

Reply via email to