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    }