1 package at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners;
3 import javax.jms.Connection;
4 import javax.jms.DeliveryMode;
5 import javax.jms.JMSException;
6 import javax.jms.Message;
7 import javax.jms.MessageConsumer;
8 import javax.jms.MessageListener;
9 import javax.jms.MessageProducer;
10 import javax.jms.ObjectMessage;
11 import javax.jms.Session;
13 import org.apache.activemq.ActiveMQConnectionFactory;
14 import org.slf4j.Logger;
15 import org.slf4j.LoggerFactory;
17 import at.ac.tuwien.sbc.valesriegler.common.Util;
18 import at.ac.tuwien.sbc.valesriegler.group.actions.TableRequest;
19 import at.ac.tuwien.sbc.valesriegler.group.actions.TableResponse;
20 import at.ac.tuwien.sbc.valesriegler.types.Table;
21 import at.ac.tuwien.sbc.valesriegler.waiter.jms.JMSWaiter;
24 * Listener listening on the WantToSitAtTable MQ, handling all incomming
30 public class WantToSitAtTable implements MessageListener {
31 private static final Logger log = LoggerFactory.getLogger(WantToSitAtTable.class);
32 private final JMSWaiter waiter;
34 public WantToSitAtTable(JMSWaiter waiter) {
39 public void onMessage(Message msg) {
42 if (msg instanceof ObjectMessage) {
43 ObjectMessage objMsg = (ObjectMessage) msg;
44 Object obj = objMsg.getObject();
46 if (obj instanceof TableRequest) {
47 TableRequest tablerequest = (TableRequest) obj;
48 log.debug("Received: " + tablerequest);
50 // generate random delay
51 if (!Util.runSimulation) {
52 Thread.sleep((long) (Math.random() * 10000));
55 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(waiter.getCONNECTSTRING());
56 Connection connection = connectionFactory.createConnection();
58 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
60 MessageConsumer consumer = session.createConsumer(session.createQueue("TablesFree"));
61 Message trm = consumer.receive();
62 if (trm instanceof ObjectMessage) {
63 ObjectMessage tom = (ObjectMessage) trm;
64 Object tabledata = tom.getObject();
66 if (tabledata instanceof Table) {
68 Table table = (Table) tabledata;
69 System.out.println("Received: " + table);
70 synchronized (waiter) {
71 TableResponse tr = new TableResponse(tablerequest.getGroupdata(), table, waiter.getId());
72 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
73 MessageProducer ret = session.createProducer(session.createQueue("GroupConnector"));
74 ret.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
75 ret.send(session.createObjectMessage(tr));
77 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
78 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
79 informPizzariaGui.send(session.createObjectMessage(tr));
83 log.warn("Received unknown Object: " + tabledata);
86 log.warn("Received unknown Message: " + trm);
91 log.warn("Received unknown Object: " + obj);
94 log.warn("Received unknown Message: " + msg);
96 } catch (JMSException e) {
97 log.error("EXCEPTION!", e);
98 } catch (InterruptedException e) {
99 log.error("EXCEPTION!", e);