001 /* 002 @license.text@ 003 */ 004 package biz.hammurapi.metrics.j2ee; 005 006 import java.util.List; 007 008 import javax.jms.JMSException; 009 import javax.jms.Message; 010 import javax.jms.Session; 011 import javax.jms.Topic; 012 import javax.jms.TopicConnection; 013 import javax.jms.TopicConnectionFactory; 014 import javax.jms.TopicPublisher; 015 import javax.jms.TopicSession; 016 import javax.naming.InitialContext; 017 018 import biz.hammurapi.config.ConfigurationException; 019 import biz.hammurapi.xml.dom.AbstractDomObject; 020 021 022 023 public class TopicSliceConsumer extends AbstractJmsSliceConsumer { 024 TopicConnection connection; 025 Topic topic; 026 027 public void start() throws ConfigurationException { 028 try { 029 InitialContext jndiContext = createContext(); 030 TopicConnectionFactory connectionFactory = (TopicConnectionFactory) jndiContext.lookup(AbstractDomObject.getElementText(configElement, "connection-factory")); 031 topic = (Topic) jndiContext.lookup(AbstractDomObject.getElementText(configElement, "topic")); 032 String user = AbstractDomObject.getElementText(configElement, "user"); 033 if (user==null) { 034 connection = connectionFactory.createTopicConnection(); 035 } else { 036 connection = connectionFactory.createTopicConnection(user, AbstractDomObject.getElementText(configElement, "password")); 037 } 038 jndiContext.close(); 039 } catch (Exception e) { 040 throw new ConfigurationException(e); 041 } 042 } 043 044 protected boolean processSlices(List slices) { 045 try { 046 TopicSession session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); 047 try { 048 TopicPublisher publisher = session.createPublisher(topic); 049 try { 050 Message message = createMessage(session, slices); 051 publisher.publish(message); 052 } finally { 053 publisher.close(); 054 } 055 } finally { 056 session.close(); 057 } 058 } catch (Exception e) { 059 return false; 060 } 061 return true; 062 } 063 064 public void stop() throws ConfigurationException { 065 try { 066 connection.close(); 067 } catch (JMSException e) { 068 throw new ConfigurationException(); 069 } 070 } 071 072 public void setOwner(Object owner) { 073 // Ignore 074 } 075 076 }