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.Waiter;
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 Waiter waiter;
33 public WantToSitAtTable(Waiter waiter) {
38 public void onMessage(Message msg) {
40 synchronized (waiter) {
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("tcp://localhost:61616");
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);
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));
76 log.warn("Received unknown Object: " + tabledata);
79 log.warn("Received unknown Message: " + trm);
84 log.warn("Received unknown Object: " + obj);
87 log.warn("Received unknown Message: " + msg);
90 } catch (JMSException e) {
91 log.error("EXCEPTION!", e);
92 } catch (InterruptedException e) {
93 log.error("EXCEPTION!", e);