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.group.actions.TableRequest;
18 import at.ac.tuwien.sbc.valesriegler.group.actions.TableResponse;
19 import at.ac.tuwien.sbc.valesriegler.types.Table;
20 import at.ac.tuwien.sbc.valesriegler.waiter.jms.JMSWaiter;
23 * Listener listening on the WantToSitAtTable MQ, handling all incomming
29 public class WantToSitAtTable implements MessageListener {
30 private static final Logger log = LoggerFactory.getLogger(WantToSitAtTable.class);
31 private final JMSWaiter waiter;
33 public WantToSitAtTable(JMSWaiter waiter) {
38 public void onMessage(Message msg) {
41 if (msg instanceof ObjectMessage) {
42 ObjectMessage objMsg = (ObjectMessage) msg;
43 Object obj = objMsg.getObject();
45 if (obj instanceof TableRequest) {
46 TableRequest tablerequest = (TableRequest) obj;
47 log.debug("Received: " + tablerequest);
49 // generate random delay
50 Thread.sleep((long) (Math.random() * 10000));
52 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(waiter.getCONNECTSTRING());
53 Connection connection = connectionFactory.createConnection();
55 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
57 MessageConsumer consumer = session.createConsumer(session.createQueue("TablesFree"));
58 Message trm = consumer.receive();
59 if (trm instanceof ObjectMessage) {
60 ObjectMessage tom = (ObjectMessage) trm;
61 Object tabledata = tom.getObject();
63 if (tabledata instanceof Table) {
65 Table table = (Table) tabledata;
66 System.out.println("Received: " + table);
67 synchronized (waiter) {
68 TableResponse tr = new TableResponse(tablerequest.getGroupdata(), table, waiter.getId());
69 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
70 MessageProducer ret = session.createProducer(session.createQueue("GroupConnector"));
71 ret.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
72 ret.send(session.createObjectMessage(tr));
74 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
75 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
76 informPizzariaGui.send(session.createObjectMessage(tr));
80 log.warn("Received unknown Object: " + tabledata);
83 log.warn("Received unknown Message: " + trm);
88 log.warn("Received unknown Object: " + obj);
91 log.warn("Received unknown Message: " + msg);
93 } catch (JMSException e) {
94 log.error("EXCEPTION!", e);
95 } catch (InterruptedException e) {
96 log.error("EXCEPTION!", e);