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.OrderRequest;
24 import at.ac.tuwien.sbc.valesriegler.group.actions.OrderResponse;
25 import at.ac.tuwien.sbc.valesriegler.group.actions.PayRequest;
26 import at.ac.tuwien.sbc.valesriegler.group.actions.PayResponse;
27 import at.ac.tuwien.sbc.valesriegler.group.actions.TableFree;
28 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
29 import at.ac.tuwien.sbc.valesriegler.group.actions.TableResponse;
30 import at.ac.tuwien.sbc.valesriegler.waiter.actions.DeliverOrder;
33 * This class handles the communication with other processes using JMS.
38 public class JMSGroupConnector extends AbstractGroupConnector implements MessageListener {
39 private static final Logger log = LoggerFactory.getLogger(JMSGroupConnector.class);
40 private static HashMap<String, JMSGroupConnector> connectors = new HashMap<String, JMSGroupConnector>();
42 public final String JMS_CONNECTSTRING;
43 private Connection connection;
45 public JMSGroupConnector(String address) {
47 throw new IllegalArgumentException("Address may not be null!");
48 JMS_CONNECTSTRING = address;
55 connection = new ActiveMQConnectionFactory(JMS_CONNECTSTRING).createConnection();
57 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
58 MessageConsumer consumer = session.createConsumer(session.createQueue("GroupConnector"));
59 consumer.setMessageListener(this);
60 } catch (JMSException e) {
61 log.error("EXCEPTION!", e);
66 public void onMessage(Message msg) {
69 if (msg instanceof ObjectMessage) {
70 ObjectMessage objMsg = (ObjectMessage) msg;
71 Object obj = objMsg.getObject();
73 if (obj instanceof TableResponse) {
74 TableResponse tablerresponse = (TableResponse) obj;
75 log.debug("Received: " + tablerresponse);
76 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(tablerresponse.getGroupdata().getId());
77 g.assignTable(tablerresponse.getTable(), tablerresponse.getWaiterId());
79 } else if (obj instanceof OrderResponse) {
80 OrderResponse orderresponse = (OrderResponse) obj;
81 log.debug("Received: " + orderresponse);
82 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(orderresponse.getGroupdata().getId());
83 g.orderReceived(orderresponse.getWaiterId());
85 } else if (obj instanceof DeliverOrder) {
86 DeliverOrder deliverorder = (DeliverOrder) obj;
87 log.debug("Received: " + deliverorder);
88 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(deliverorder.getGroupdata().getId());
89 g.deliverPizzas(deliverorder.getGroupdata().getOrder(), deliverorder.getWaiterId());
91 } else if (obj instanceof PayResponse) {
92 PayResponse payresponse = (PayResponse) obj;
93 log.debug("Received: " + payresponse);
94 Group g = GroupAgent.getInstance().getGroupModel().getGroupByID(payresponse.getGroupdata().getId());
95 g.payForPizzas(payresponse.getWaiterId());
101 log.warn("Unknown messagetype received!");
102 } catch (JMSException e) {
103 log.error("EXCEPTION!", e);
108 public void send(AbstractAction request) {
110 if (request instanceof TableRequest) {
111 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
112 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("WantToSitAtTable"));
113 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
114 wantToSitAtTable.send(session.createObjectMessage(request));
116 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
117 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
118 informPizzariaGui.send(session.createObjectMessage(request));
121 } else if (request instanceof OrderRequest) {
122 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
123 MessageProducer wantToOrder = session.createProducer(session.createQueue("WantToOrder"));
124 wantToOrder.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
125 wantToOrder.send(session.createObjectMessage(request));
128 } else if (request instanceof PayRequest) {
129 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
130 MessageProducer wantToPay = session.createProducer(session.createQueue("WantToPay"));
131 wantToPay.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
132 wantToPay.send(session.createObjectMessage(request));
135 } else if (request instanceof TableFree) {
136 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
137 MessageProducer wantToSitAtTable = session.createProducer(session.createQueue("TablesFree"));
138 wantToSitAtTable.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
139 wantToSitAtTable.send(session.createObjectMessage(request.getGroupdata().getTable()));
141 MessageProducer wantToLeave = session.createProducer(session.createQueue("WantToLeave"));
142 wantToLeave.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
143 wantToLeave.send(session.createObjectMessage(request));
145 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
146 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
147 informPizzariaGui.send(session.createObjectMessage(request));
151 } catch (JMSException e) {
152 log.error("EXCEPTION!", e);
156 public static HashMap getConnectors() {
159 public static JMSGroupConnector getConnector(String key) {
160 return connectors.get(key);