1 package at.ac.tuwien.sbc.valesriegler.driver.jms.messageListeners;
3 import at.ac.tuwien.sbc.valesriegler.common.Util;
4 import at.ac.tuwien.sbc.valesriegler.cook.actions.DeliveryOrderInfo;
5 import at.ac.tuwien.sbc.valesriegler.driver.actions.OrderDeliveredInfo;
6 import at.ac.tuwien.sbc.valesriegler.driver.jms.JMSDriver;
7 import org.apache.activemq.ActiveMQConnectionFactory;
8 import org.slf4j.Logger;
9 import org.slf4j.LoggerFactory;
19 public class CookedDeliveryOrders implements MessageListener {
20 private static final Logger log = LoggerFactory.getLogger(CookedDeliveryOrders.class);
21 private final JMSDriver driver;
23 public CookedDeliveryOrders(JMSDriver driver) {
28 public void onMessage(Message msg) {
30 synchronized (driver) {
31 if (msg instanceof ObjectMessage) {
32 ObjectMessage objMsg = (ObjectMessage) msg;
33 Object obj = objMsg.getObject();
35 if (obj instanceof DeliveryOrderInfo) {
36 DeliveryOrderInfo doi = (DeliveryOrderInfo) obj;
37 log.debug("Received: " + doi);
39 // generate random delay
40 Thread.sleep((long) (Math.random() * 10000));
41 String addr = doi.getDeliveryGroupData().getAddress();
43 // Deliver to destination broker
44 ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory(Util.JMS_DELIVERY_DESTINATION);
45 Connection connection = connectionFactory.createConnection();
47 log.debug("CookedDelivery:ActiveMQConnectionFactory::" + connection);
49 Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
50 MessageProducer prod = session.createProducer(session.createQueue(addr));
51 prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
52 OrderDeliveredInfo odi = new OrderDeliveredInfo(doi.getDeliveryGroupData(), driver.getId());
53 prod.send(session.createObjectMessage(odi));
58 connectionFactory = new ActiveMQConnectionFactory(driver.getCONNECTSTRING());
59 connection = connectionFactory.createConnection();
62 session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
63 prod = session.createProducer(session.createQueue("PizzeriaConnector"));
64 prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
65 prod.send(session.createObjectMessage(odi));
70 log.warn("Received unknown Object: " + obj);
73 log.warn("Received unknown Message: " + msg);
77 } catch (JMSException e) {
78 log.error("EXCEPTION!", e);
79 } catch (InterruptedException e) {
80 log.error("EXCEPTION!", e);
85 public String toString() {
86 return "PendingDeliveries [driver=" + driver + "]";