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