KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > mmbase > applications > email > EmailExpireHandler


1 /*
2
3 This software is OSI Certified Open Source Software.
4 OSI Certified is a certification mark of the Open Source Initiative.
5
6 The license (Mozilla version 1.0) can be read at the MMBase site.
7 See http://www.MMBase.org/license
8
9 */

10
11 package org.mmbase.applications.email;
12
13 import java.util.Iterator JavaDoc;
14
15 import org.mmbase.module.core.MMBase;
16 import org.mmbase.module.core.MMBaseContext;
17 import org.mmbase.module.core.MMObjectNode;
18 import org.mmbase.module.core.MMBase;
19 import org.mmbase.util.logging.*;
20
21 /**
22  * @author Daniel Ockeloen
23  *
24  * expire handler, removes email nodes that are
25  * need to be expired
26  */

27 public class EmailExpireHandler implements Runnable JavaDoc {
28
29
30     static private final Logger log = Logging.getLoggerInstance(EmailExpireHandler.class);
31
32     // sleeptime between expire runs in seconds
33
int sleeptime;
34
35     // expire time (default 30min, set in the builder.xml), defined in seconds
36
int expiretime;
37
38     // parent builder needed for callbacks
39
EmailBuilder parent;
40
41     /**
42     * create a handler with sleeptime and expiretime
43     */

44     public EmailExpireHandler(EmailBuilder parent, int sleeptime, int expiretime) {
45         this.parent = parent;
46         this.sleeptime = sleeptime;
47         this.expiretime = expiretime;
48         Thread JavaDoc kicker = MMBaseContext.startThread(this, "emailexpireprobe");
49     }
50
51     /**
52     * Main loop, exception protected
53     */

54     public void run() {
55         try {
56             MMBase mmbase = MMBase.getMMBase();
57             while (!mmbase.isShutdown()) {
58                 // get the nodes we want to expire
59
for (Iterator JavaDoc i = parent.getDeliveredMailOlderThan(expiretime).iterator(); i.hasNext(); ) {
60                     // get next node
61
MMObjectNode expiredNode = (MMObjectNode)i.next();
62                     log.service("Removing successfully mailed email 'one shot' email node " + expiredNode.getNumber());
63                     // remove all its relations
64
expiredNode.removeRelations();
65                     // remove the node itself, by asking its builder
66
parent.removeNode(expiredNode);
67                 }
68                 try {
69                     Thread.sleep(sleeptime * 1000);
70                 } catch (InterruptedException JavaDoc f) {
71                     log.debug(Thread.currentThread().getName() +" was interrupted.");
72                     continue;
73                 }
74                 if (MMBase.getMMBase().isShutdown()) {
75                     log.service("MMBase has been shutdown, breaking out of email expire probe too");
76                     break;
77                 } else {
78                     log.debug("MMBase still running");
79                 }
80             }
81         } catch (Exception JavaDoc e) {
82             log.error("run(): ERROR: Exception in emailqueueprobe thread!");
83             log.error(Logging.stackTrace(e));
84             return;
85         }
86     }
87 }
88
Popular Tags