1 23 package com.scalagent.joram.mom.dest.mail; 24 25 import java.util.Properties ; 26 27 import org.objectweb.joram.mom.dest.DestinationImpl; 28 import org.objectweb.joram.mom.dest.Topic; 29 import org.objectweb.joram.mom.proxies.ConnectionManager; 30 import org.objectweb.util.monolog.api.BasicLevel; 31 import org.objectweb.util.monolog.api.Logger; 32 33 import fr.dyade.aaa.agent.AgentId; 34 import fr.dyade.aaa.agent.Channel; 35 import fr.dyade.aaa.agent.Debug; 36 import fr.dyade.aaa.agent.Notification; 37 import fr.dyade.aaa.util.Timer; 38 import fr.dyade.aaa.util.TimerTask; 39 40 46 public class JavaMailTopic extends Topic { 47 48 public static Logger logger = 49 Debug.getLogger("com.scalagent.joram.mom.dest.mail.JavaMailTopic"); 50 51 public static final String MAIL_TOPIC_TYPE = "topic.mail"; 52 53 public static String getDestinationType() { 54 return MAIL_TOPIC_TYPE; 55 } 56 57 60 public JavaMailTopic() {} 61 62 public DestinationImpl createsImpl(AgentId adminId, Properties prop) { 63 JavaMailTopicImpl topicImpl = new JavaMailTopicImpl(getId(), adminId, prop); 64 return topicImpl; 65 } 66 67 private transient PopTask poptask; 68 69 78 protected void agentInitialize(boolean firstTime) throws Exception { 79 super.agentInitialize(firstTime); 80 poptask = new PopTask(getId()); 81 poptask.schedule(); 82 } 83 84 public void react(AgentId from, Notification not) throws Exception { 85 if (not instanceof WakeUpPopNot) { 86 if (poptask == null) 87 poptask = new PopTask(getId()); 88 poptask.schedule(); 89 ((JavaMailTopicImpl) destImpl).doPop(); 90 } else { 91 super.react(from, not); 92 } 93 } 94 95 98 private class PopTask extends TimerTask { 99 private AgentId to; 100 101 public PopTask(AgentId to) { 102 this.to = to; 103 } 104 105 106 public void run() { 107 try { 108 Channel.sendTo(to, new WakeUpPopNot()); 109 } catch (Exception e) {} 110 } 111 112 public void schedule() { 113 long period = ((JavaMailTopicImpl) destImpl).getPopPeriod(); 114 115 if (period > 0) { 116 try { 117 Timer timer = ConnectionManager.getTimer(); 118 timer.schedule(this, period); 119 } catch (Exception exc) { 120 if (logger.isLoggable(BasicLevel.ERROR)) 121 logger.log(BasicLevel.ERROR, "--- " + this + " Queue(...)", exc); 122 } 123 } 124 } 125 } 126 } 127 128 | Popular Tags |