1 package at.ac.tuwien.sbc.valesriegler.group.jms;
3 import java.util.HashMap;
5 import javax.jms.Connection;
6 import javax.jms.DeliveryMode;
7 import javax.jms.JMSException;
8 import javax.jms.Message;
9 import javax.jms.MessageConsumer;
10 import javax.jms.MessageListener;
11 import javax.jms.MessageProducer;
12 import javax.jms.ObjectMessage;
13 import javax.jms.Session;
15 import org.apache.activemq.ActiveMQConnectionFactory;
16 import org.slf4j.Logger;
17 import org.slf4j.LoggerFactory;
19 import at.ac.tuwien.sbc.valesriegler.common.AbstractAction;
20 import at.ac.tuwien.sbc.valesriegler.group.AbstractGroupConnector;
21 import at.ac.tuwien.sbc.valesriegler.group.Group;
22 import at.ac.tuwien.sbc.valesriegler.group.GroupAgent;
23 import at.ac.tuwien.sbc.valesriegler.group.actions.DeliveryOrderRequest;
24 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderRequest;
25 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderResponse;
26 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
27 import at.ac.tuwien.sbc.valesriegler.group.actions.PayResponse;
28 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
29 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
30 import at.ac.tuwien.sbc.valesriegler.group.actions.TableResponse;
31 import at.ac.tuwien.sbc.valesriegler.waiter.actions.DeliverOrder;
34 * This class handles the communication with other processes using JMS.
39 public class JMSGroupConnector extends AbstractGroupConnector implements MessageListener {
40 private static final Logger log = LoggerFactory.getLogger(JMSGroupConnector.class);
41 private static HashMap<String, JMSGroupConnector> connectors = new HashMap<String, JMSGroupConnector>();
43 public final String JMS_CONNECTSTRING;
44 private Connection connection;
46 public JMSGroupConnector(String address) {
48 throw new IllegalArgumentException("Address may not be null!");
49 JMS_CONNECTSTRING = address;
56 connection = new ActiveMQConnectionFactory(JMS_CONNECTSTRING).createConnection();
58 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
59 MessageConsumer consumer = session.createConsumer(session.createQueue("GroupConnector"));
60 consumer.setMessageListener(this);
61 } catch (JMSException e) {
62 log.error("EXCEPTION!", e);
67 public void onMessage(Message msg) {
70 if (msg instanceof ObjectMessage) {
71 ObjectMessage objMsg = (ObjectMessage) msg;
72 Object obj = objMsg.getObject();
74 if (obj instanceof TableResponse) {
75 TableResponse tablerresponse = (TableResponse) obj;
76 log.debug("Received: " + tablerresponse);
77 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(tablerresponse.getGroupdata().getId());
78 g.assignTable(tablerresponse.getTable(), tablerresponse.getWaiterId());
80 } else if (obj instanceof OrderResponse) {
81 OrderResponse orderresponse = (OrderResponse) obj;
82 log.debug("Received: " + orderresponse);
83 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(orderresponse.getGroupdata().getId());
84 g.orderReceived(orderresponse.getWaiterId());
86 } else if (obj instanceof DeliverOrder) {
87 DeliverOrder deliverorder = (DeliverOrder) obj;
88 log.debug("Received: " + deliverorder);
89 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(deliverorder.getGroupdata().getId());
90 g.deliverPizzas(deliverorder.getGroupdata().getOrder(), deliverorder.getWaiterId());
92 } else if (obj instanceof PayResponse) {
93 PayResponse payresponse = (PayResponse) obj;
94 log.debug("Received: " + payresponse);
95 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(payresponse.getGroupdata().getId());
96 g.payForPizzas(payresponse.getWaiterId());
102 log.warn("Unknown messagetype received!");
103 } catch (JMSException e) {
104 log.error("EXCEPTION!", e);
109 public void send(AbstractAction request) {
111 if (request instanceof TableRequest) {
112 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
113 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("WantToSitAtTable"));
114 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
115 wantToSitAtTable.send(session.createObjectMessage(request));
117 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
118 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
119 informPizzariaGui.send(session.createObjectMessage(request));
122 } else if (request instanceof OrderRequest) {
123 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
124 MessageProducer wantToOrder = session.createProducer(session.createQueue("WantToOrder"));
125 wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
126 wantToOrder.send(session.createObjectMessage(request));
129 } else if (request instanceof PayRequest) {
130 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
131 MessageProducer wantToPay = session.createProducer(session.createQueue("WantToPay"));
132 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
133 wantToPay.send(session.createObjectMessage(request));
136 } else if (request instanceof TableFree) {
137 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
138 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("TablesFree"));
139 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
140 wantToSitAtTable.send(session.createObjectMessage(request.getGroupdata().getTable()));
142 MessageProducer wantToLeave = session.createProducer(session.createQueue("WantToLeave"));
143 wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
144 wantToLeave.send(session.createObjectMessage(request));
146 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
147 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
148 informPizzariaGui.send(session.createObjectMessage(request));
152 } else if (request instanceof DeliveryOrderRequest) {
153 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
154 MessageProducer wantToPay = session.createProducer(session.createQueue("WantADelivery"));
155 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
156 wantToPay.send(session.createObjectMessage(request));
158 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
159 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
160 informPizzariaGui.send(session.createObjectMessage(request));
164 } catch (JMSException e) {
165 log.error("EXCEPTION!", e);
169 public static HashMap<String, JMSGroupConnector> getConnectors() {
173 public static JMSGroupConnector getConnector(String key) {
174 return connectors.get(key);