package org.softlang.company.threads; import javax.jms.Connection; import javax.jms.DeliveryMode; import javax.jms.Destination; import javax.jms.JMSException; import javax.jms.Message; import javax.jms.MessageConsumer; import javax.jms.MessageProducer; import javax.jms.Session; import javax.jms.TextMessage; import org.apache.activemq.ActiveMQConnectionFactory; import org.softlang.company.model.Company; public class CompanyThread implements Runnable { private Company company; private String host; private Connection connection; private MessageConsumer consumer; private MessageProducer producer; private Session session; private boolean loop = true; public CompanyThread(Company company, String host) { this.company = company; this.host = host; setupConnection(); } @Override public void run() { try { loop = true; Message message; while(loop) { // Receive message message = consumer.receive(1000); if (message instanceof TextMessage) { String text = ((TextMessage) message).getText(); if (text.equals("TOTAL")) { // Create answer-message and send it message = session.createMessage(); message.setStringProperty("id", "TOTAL-RESULT"); message.setDoubleProperty("result", company.total()); producer.send(message); } if (text.equals("CUT")) { // Create answer-message and send it company.cut(); message = session.createMessage(); message.setStringProperty("id", "CUT-COMPLETE"); producer.send(message); } if (text.equals("SHUTDOWN")) { // Create answer-message and send it message = session.createTextMessage("OK-SHUTDOWN"); producer.send(message); shutdown(); } } } } catch (JMSException e) { e.printStackTrace(); } } /** * Setup JMS connection * * */ private void setupConnection() { // Create a ConnectionFactory ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory( this.host); try { // Create a Connection connection = connectionFactory.createConnection(); // Create a Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); // Create the destination Destination destination = session.createQueue(this.company .getName()); // Create MessageConsumer consumer = session.createConsumer(destination,"id='Company'"); // Create MessageProducer producer = session.createProducer(destination); producer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); connection.start(); } catch (JMSException e) { e.printStackTrace(); } } /** * Shutdown JMS */ public void shutdown() { loop = false; try { session.close(); connection.close(); } catch (JMSException e) { e.printStackTrace(); } } public Company getCompany() { return company; } public void setCompany(Company company) { this.company = company; } public String getDestination() { return this.company.getName(); } }