1 package com.ubermq.jms.client.unicast; 2 3 import java.io.*; 4 5 import EDU.oswego.cs.dl.util.concurrent.*; 6 7 import com.ubermq.jms.client.*; 8 import com.ubermq.jms.client.impl.*; 9 import com.ubermq.jms.client.proc.*; 10 import com.ubermq.jms.common.datagram.*; 11 import com.ubermq.jms.common.datagram.impl.*; 12 import com.ubermq.kernel.*; 13 14 18 public class UnicastConnection 19 extends Connection 20 { 21 private static ClockDaemon cd; 22 23 private static final String keepAliveTopic = Configurator.getProperty(ClientConfig.UNICAST_KEEP_ALIVE, 24 ".com.ubermq.keepalive"); 25 26 private Object keepAliveClockTask; 28 private javax.jms.TopicSession keepAliveSession; 29 private javax.jms.TopicPublisher keepAlivePublisher; 30 31 static { 32 cd = new ClockDaemon(); 33 cd.setThreadFactory(new ThreadFactory() { 34 public Thread newThread(Runnable r) { 35 Thread t = new Thread (r, "UnicastTopicConnection Keep-Alive"); 36 t.setDaemon(true); 37 return t; 38 } 39 40 }); 41 } 42 43 50 public UnicastConnection(InternetConnectionDescriptor icd) 51 throws IOException 52 { 53 this(new UnicastClientSession(DatagramFactory.getInstance()), 54 icd, 55 DatagramFactory.getHolder(), 56 new SimpleDeliveryManager()); 57 } 58 59 68 public UnicastConnection(IClientSession session, 69 InternetConnectionDescriptor icd, 70 DatagramFactoryHolder holder, 71 IDeliveryManager manager) 72 throws IOException 73 { 74 super(session, 75 new ClientProc(holder.controlFactory()), 76 manager, 77 holder, 78 icd); 79 } 80 81 89 public void startHeartbeat(int keepAlivePeriod) 90 { 91 if (keepAlivePeriod > 0) { 92 try { 93 keepAliveSession = createTopicSession(false, javax.jms.Session.AUTO_ACKNOWLEDGE); 94 keepAlivePublisher = keepAliveSession.createPublisher(keepAliveSession.createTopic(keepAliveTopic)); 95 final javax.jms.Message m = keepAliveSession.createMessage(); 96 97 keepAliveClockTask = cd.executePeriodically(keepAlivePeriod, new Runnable () { 98 public void run() 99 { 100 try 101 { 102 keepAlivePublisher.publish(m); 103 } 104 catch (javax.jms.JMSException e) {} 105 } 106 }, false); 107 } 108 catch(javax.jms.JMSException jmse) {} 109 110 } 111 } 112 113 116 public void stopHeartbeat() 117 { 118 ClockDaemon.cancel(keepAliveClockTask); 119 try 120 { 121 keepAlivePublisher.close(); 122 keepAliveSession.close(); 123 } 124 catch (javax.jms.JMSException e) {} 125 } 126 } 127 | Popular Tags |