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 Thread.sleep((long) (Math.random() * 10000));
53 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Util.JMS_CONNECTSTRING);
54 Connection connection = connectionFactory.createConnection();
56 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
58 MessageConsumer consumer = session.createConsumer(session.createQueue("TablesFree"));
59 Message trm = consumer.receive();
60 if (trm instanceof ObjectMessage) {
61 ObjectMessage tom = (ObjectMessage) trm;
62 Object tabledata = tom.getObject();
64 if (tabledata instanceof Table) {
66 Table table = (Table) tabledata;
67 System.out.println("Received: " + table);
68 synchronized (waiter) {
69 TableResponse tr = new TableResponse(tablerequest.getGroupdata(), table, waiter.getId());
70 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
71 MessageProducer ret = session.createProducer(session.createQueue("GroupConnector"));
72 ret.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
73 ret.send(session.createObjectMessage(tr));
75 MessageProducer informPizzariaGui = session.createProducer(session.createQueue("PizzeriaConnector"));
76 informPizzariaGui.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
77 informPizzariaGui.send(session.createObjectMessage(tr));
81 log.warn("Received unknown Object: " + tabledata);
84 log.warn("Received unknown Message: " + trm);
89 log.warn("Received unknown Object: " + obj);
92 log.warn("Received unknown Message: " + msg);
94 } catch (JMSException e) {
95 log.error("EXCEPTION!", e);
96 } catch (InterruptedException e) {
97 log.error("EXCEPTION!", e);