package org.softlang.company.threads; import javax.jms.DeliveryMode; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageListener; import javax.jms.Session; import javax.jms.TextMessage; import javax.jms.Topic; import javax.jms.TopicConnection; import javax.jms.TopicPublisher; import javax.jms.TopicSession; import org.apache.activemq.ActiveMQConnectionFactory; import org.softlang.company.model.Department; public class DepartmentListener implements MessageListener { private final Department dept; private TopicSession session; private TopicPublisher publisher; private TopicConnection connection; private Topic totalResultTopic; public DepartmentListener(Department d, String host) { dept = d; setupConnection(host); } @Override public void onMessage(Message msg) { try { if (((TextMessage) msg).getText().equals("Cut")) dept.cut(); if (((TextMessage) msg).getText().equals("Total")){ double total = dept.total(); Message totalmsg = session.createMessage(); totalmsg.setStringProperty("name", dept.getName()); totalmsg.setDoubleProperty("total", total); publisher.send(totalmsg); } if (((TextMessage) msg).getText().equals("Shut down")){ shutdown(); } } catch (JMSException e) { e.printStackTrace(); } } private void setupConnection(String host) { // Create a ConnectionFactory ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( host); try { // Create a Connection connection = connectionFactory.createTopicConnection(); // Create a Session session = connection.createTopicSession(false, Session.AUTO_ACKNOWLEDGE); // Create the destination totalResultTopic = session.createTopic("Total-Result"); // Create MessageProducer publisher = session.createPublisher(totalResultTopic); publisher.setDeliveryMode(DeliveryMode.NON_PERSISTENT); connection.start(); } catch (JMSException e) { e.printStackTrace(); } } public void shutdown() { try { this.session.close(); this.connection.close(); } catch (JMSException e) { e.printStackTrace(); } } }