]> git.somenet.org - pub/jan/sbc.git/blob - src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/JMSWaiter.java
[JMS] Benchmarks are theoretically possible now. GroupGUI responsesmissing, so it...
[pub/jan/sbc.git] / src / main / java / at / ac / tuwien / sbc / valesriegler / waiter / jms / JMSWaiter.java
1 package at.ac.tuwien.sbc.valesriegler.waiter.jms;
2
3 import javax.jms.Connection;
4 import javax.jms.MessageConsumer;
5 import javax.jms.Session;
6
7 import org.apache.activemq.ActiveMQConnectionFactory;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
10
11 import at.ac.tuwien.sbc.valesriegler.common.HasId;
12 import at.ac.tuwien.sbc.valesriegler.common.Util;
13 import at.ac.tuwien.sbc.valesriegler.jms.nac.JMSNAC;
14 import at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners.CookedOrders;
15 import at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners.WantADelivery;
16 import at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners.WantToOrder;
17 import at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners.WantToPay;
18 import at.ac.tuwien.sbc.valesriegler.waiter.jms.messageListeners.WantToSitAtTable;
19
20 /**
21  * A waiter is a person who does all the stuff and gets lousy tips in return.
22  * TODO: might want to split this class into multiple, to allow for abstraction.
23  * 
24  * @author jan
25  * 
26  */
27 public class JMSWaiter implements HasId {
28         private static final Logger log = LoggerFactory.getLogger(JMSWaiter.class);
29         private final String CONNECTSTRING;
30         private Connection connection;
31
32         public String getCONNECTSTRING() {
33                 return CONNECTSTRING;
34         }
35
36         final private int id;
37         private JMSNAC jmsnac;
38
39         public JMSWaiter(String jmsURL, int id) {
40                 CONNECTSTRING = jmsURL;
41                 this.id = id;
42                 log.info("I AM A WAITER WITH ID {}", id);
43
44                 WaiterJMSNACMsgListener tmp = new WaiterJMSNACMsgListener();
45                 jmsnac = new JMSNAC(tmp);
46
47                 if (!Util.runSimulation) {
48                         initJMS();
49                 }
50         }
51
52         public void initJMS() {
53                 try {
54                         // Connecting to the Broker and to the output queue
55                         ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(CONNECTSTRING);
56                         connection = connectionFactory.createConnection();
57                         connection.start();
58
59                         Session sessWantToSit = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
60                         MessageConsumer consWantToSit = sessWantToSit.createConsumer(sessWantToSit.createQueue("WantToSitAtTable"));
61                         consWantToSit.setMessageListener(new WantToSitAtTable(this));
62
63                         Session sessWantToOrder = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
64                         MessageConsumer consWantToOrder = sessWantToOrder.createConsumer(sessWantToOrder.createQueue("WantToOrder"));
65                         consWantToOrder.setMessageListener(new WantToOrder(this));
66
67                         Session sessCookedOrders = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
68                         MessageConsumer consCookedOrders = sessCookedOrders.createConsumer(sessCookedOrders.createQueue("CookedOrders"));
69                         consCookedOrders.setMessageListener(new CookedOrders(this));
70
71                         Session sessWantToPay = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
72                         MessageConsumer consWantToPay = sessWantToPay.createConsumer(sessWantToPay.createQueue("WantToPay"));
73                         consWantToPay.setMessageListener(new WantToPay(this));
74
75                         Session sessWantADelivery = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
76                         MessageConsumer consWantADelivery = sessWantADelivery.createConsumer(sessWantADelivery
77                                         .createQueue("WantADelivery"));
78                         consWantADelivery.setMessageListener(new WantADelivery(this));
79
80                 } catch (Exception e) {
81                         log.error("Caught: ", e);
82                 }
83         }
84
85         @Override
86         public String toString() {
87                 return "Waiter [id=" + id + "]";
88         }
89
90         @Override
91         public int getId() {
92                 return id;
93         }
94
95         public Connection getConnection() {
96                 return connection;
97         }
98
99         public void setConnection(Connection connection) {
100                 this.connection = connection;
101         }
102 }