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 }