001 /*
002 @license.text@
003 */
004 package biz.hammurapi.jms;
005
006 import java.io.IOException;
007 import java.util.Timer;
008 import java.util.TimerTask;
009
010 import javax.jms.Connection;
011 import javax.jms.Destination;
012 import javax.jms.JMSException;
013 import javax.jms.MessageProducer;
014 import javax.jms.Session;
015 import javax.jms.TextMessage;
016 import javax.xml.parsers.ParserConfigurationException;
017 import javax.xml.transform.TransformerException;
018
019 import biz.hammurapi.config.ConfigurationException;
020
021 /**
022 * Sends collected metrics to JMS destination (JMS 1.1).
023 * @author Pavel Vlasov
024 * @revision $Revision$
025 */
026 public class JmsDestinationSliceConsumer extends JmsSliceConsumer {
027
028 private Destination destination;
029 private Connection connection;
030
031 /**
032 * @param timer Shared timer to schedule send. If null then internal timer is used.
033 * @param interval Send interval.
034 * @param connection JMS connection.
035 * @param queue JMS queue.
036 */
037 public JmsDestinationSliceConsumer(Timer timer, long interval, Connection connection, Destination destination) {
038 super(timer, interval);
039 this.connection=connection;
040 this.destination=destination;
041 }
042
043 private TimerTask sendTask=new TimerTask() {
044
045 public void run() {
046 try {
047 Session session=connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
048 try {
049 TextMessage msg = session.createTextMessage();
050 msg.setText(getSlicesXml());
051 MessageProducer producer = session.createProducer(destination);
052 try {
053 producer.send(msg);
054 } finally {
055 producer.close();
056 }
057 } finally {
058 session.close();
059 }
060 } catch (JMSException e) {
061 System.err.println("[WARNING] Could not send metrics to queue: "+e);
062 e.printStackTrace();
063 } catch (IOException e) {
064 System.err.println("[WARNING] Could not write slices to message: "+e);
065 e.printStackTrace();
066 } catch (TransformerException e) {
067 System.err.println("[WARNING] Could not write slices to XML: "+e);
068 e.printStackTrace();
069 } catch (ParserConfigurationException e) {
070 System.err.println("[WARNING] Could not write slices to XML: "+e);
071 e.printStackTrace();
072 }
073
074 }
075
076 };
077
078 public void start() throws ConfigurationException {
079 super.start();
080 timer.schedule(sendTask, interval, interval);
081 }
082
083 public void stop() throws ConfigurationException {
084 sendTask.cancel();
085 // Send remaining metrics.
086 sendTask.run();
087 super.stop();
088 }
089
090 }