From 0e13643140db30e0858e3798aa4f885b701d24a4 Mon Sep 17 00:00:00 2001 From: Jan Vales Date: Sat, 11 May 2013 15:59:56 +0200 Subject: [PATCH] GroupData changes now refresh the GroupGUI. Also synchronisation. --- .../jms/messageListeners/OrdersToCook.java | 88 ++++++++++--------- .../tuwien/sbc/valesriegler/group/Group.java | 16 ++-- .../tuwien/sbc/valesriegler/types/Order.java | 13 +-- .../jms/messageListeners/CookedOrders.java | 54 ++++++------ .../jms/messageListeners/WantToOrder.java | 62 ++++++------- .../jms/messageListeners/WantToPay.java | 46 +++++----- .../messageListeners/WantToSitAtTable.java | 70 ++++++++------- 7 files changed, 184 insertions(+), 165 deletions(-) diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/cook/jms/messageListeners/OrdersToCook.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/cook/jms/messageListeners/OrdersToCook.java index 2a6103a..31e4a68 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/cook/jms/messageListeners/OrdersToCook.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/cook/jms/messageListeners/OrdersToCook.java @@ -38,59 +38,61 @@ public class OrdersToCook implements MessageListener { @Override public void onMessage(Message msg) { try { - msg.acknowledge(); - if (msg instanceof ObjectMessage) { - ObjectMessage objMsg = (ObjectMessage) msg; - Object obj = objMsg.getObject(); + synchronized (cook) { + msg.acknowledge(); + if (msg instanceof ObjectMessage) { + ObjectMessage objMsg = (ObjectMessage) msg; + Object obj = objMsg.getObject(); - if (obj instanceof OrderRequest) { - OrderRequest orderrequest = (OrderRequest) obj; - log.debug("Received: " + orderrequest); + if (obj instanceof OrderRequest) { + OrderRequest orderrequest = (OrderRequest) obj; + log.debug("Received: " + orderrequest); - for (PizzaOrder pizzaorder : orderrequest.getGroupdata().getOrder().getOrderedPizzas()) { - pizzaorder.setStatus(PizzaOrderStatus.IN_PREPARATION); - } + for (PizzaOrder pizzaorder : orderrequest.getGroupdata().getOrder().getOrderedPizzas()) { + pizzaorder.setStatus(PizzaOrderStatus.IN_PREPARATION); + } - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); - Connection connection = connectionFactory.createConnection(); - connection.start(); + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); - // inform pizzeria - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer prod = session.createProducer(session.createQueue("PizzeriaConnector")); - prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - OrderInfo oi = new OrderInfo(orderrequest.getGroupdata(), cook.getId()); - prod.send(session.createObjectMessage(oi)); - session.close(); + // inform pizzeria + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + MessageProducer prod = session.createProducer(session.createQueue("PizzeriaConnector")); + prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + OrderInfo oi = new OrderInfo(orderrequest.getGroupdata(), cook.getId()); + prod.send(session.createObjectMessage(oi)); + session.close(); - // generate random delay - for (PizzaOrder po : orderrequest.getGroupdata().getOrder().getOrderedPizzas()) { - Thread.sleep(po.getPizzaType().duration * 1000); - po.setStatus(PizzaOrderStatus.DONE); - Pizza p = Pizza.createPizzaFromPizzaOrder(po, cook.getId()); - orderrequest.getGroupdata().getOrder().getCookedPizzas().add(p); - } - orderrequest.getGroupdata().getOrder().setStatus(OrderStatus.DELIVERY_PENDING); + // generate random delay + for (PizzaOrder po : orderrequest.getGroupdata().getOrder().getOrderedPizzas()) { + Thread.sleep(po.getPizzaType().duration * 1000); + po.setStatus(PizzaOrderStatus.DONE); + Pizza p = Pizza.createPizzaFromPizzaOrder(po, cook.getId()); + orderrequest.getGroupdata().getOrder().getCookedPizzas().add(p); + } + orderrequest.getGroupdata().getOrder().setStatus(OrderStatus.DELIVERY_PENDING); - // let pizzas be delivered. - session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - prod = session.createProducer(session.createQueue("CookedOrders")); - prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - prod.send(session.createObjectMessage(oi)); + // let pizzas be delivered. + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + prod = session.createProducer(session.createQueue("CookedOrders")); + prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + prod.send(session.createObjectMessage(oi)); - // inform pizeria - prod = session.createProducer(session.createQueue("PizzeriaConnector")); - prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - oi = new OrderInfo(orderrequest.getGroupdata(), cook.getId()); - prod.send(session.createObjectMessage(oi)); - session.close(); + // inform pizeria + prod = session.createProducer(session.createQueue("PizzeriaConnector")); + prod.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + oi = new OrderInfo(orderrequest.getGroupdata(), cook.getId()); + prod.send(session.createObjectMessage(oi)); + session.close(); - connection.close(); + connection.close(); + } else { + log.warn("Received unknown Object: " + obj); + } } else { - log.warn("Received unknown Object: " + obj); + log.warn("Received unknown Message: " + msg); } - } else { - log.warn("Received unknown Message: " + msg); } } catch (JMSException e) { log.error("EXCEPTION!", e); diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java index 143f6a2..585fc8b 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/group/Group.java @@ -85,6 +85,7 @@ public class Group implements Runnable, HasId { public void goGrabSomeFood() { log.debug("goGrabSomeFood(): " + this); groupData.setState(GroupState.WAITING); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); } @@ -93,6 +94,7 @@ public class Group implements Runnable, HasId { groupData.setState(GroupState.SITTING); groupData.setTable(t); groupData.setTableWaiter(waiterID); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); log.debug("assignTable(): " + this); } @@ -100,6 +102,7 @@ public class Group implements Runnable, HasId { // ask the group to send their order. public void order() { groupData.setState(GroupState.ORDER_PENDING); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); log.debug("order(): " + this); } @@ -109,6 +112,7 @@ public class Group implements Runnable, HasId { groupData.setState(GroupState.ORDERED); groupData.getOrder().setStatus(OrderStatus.ORDERED); groupData.setOrderWaiter(waiter); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); log.debug("orderReceived(): " + this); } @@ -118,20 +122,22 @@ public class Group implements Runnable, HasId { groupData.setState(GroupState.EATING); groupData.setOrder(order); groupData.setServingWaiter(waiter); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); log.debug("bringOrderedPizzas(): " + this); } - @Override - public int getId() { - return groupData.getId(); - } - // pay for the pizzas and leave public void payForPizzas(int waiter) { groupData.setState(GroupState.PAY); groupData.setPayingWaiter(waiter); + GroupAgent.getInstance().getGroupModel().fireTableDataChanged(); new Thread(this).start(); log.debug("payForPizzas(): " + this); } + + @Override + public int getId() { + return groupData.getId(); + } } diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/types/Order.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/types/Order.java index 7a09760..853e84a 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/types/Order.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/types/Order.java @@ -1,6 +1,7 @@ package at.ac.tuwien.sbc.valesriegler.types; import java.io.Serializable; +import java.util.ArrayList; import java.util.List; import org.mozartspaces.capi3.Queryable; @@ -16,7 +17,7 @@ import at.ac.tuwien.sbc.valesriegler.group.Group; * @author jan * */ -@Queryable(autoindex=true) +@Queryable(autoindex = true) public class Order implements Serializable, HasId { private static int idNext = 0; private Integer id; @@ -25,12 +26,13 @@ public class Order implements Serializable, HasId { private List orderedPizzas; private List cookedPizzas; - + // this is necessary so that i can make a xvsm linda selection on it private Integer numberOfPizzas; - public Order() {} - + public Order() { + } + public Order(int groupId, List orderedPizzas) { id = ++idNext; this.groupId = groupId; @@ -44,7 +46,7 @@ public class Order implements Serializable, HasId { groupId = group.getGroupData().getId(); status = OrderStatus.NEW; this.orderedPizzas = orderedPizzas; - cookedPizzas = null; + cookedPizzas = new ArrayList(); } public List getCookedPizzas() { @@ -67,6 +69,7 @@ public class Order implements Serializable, HasId { this.id = id; } + @Override public int getId() { return id; } diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/CookedOrders.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/CookedOrders.java index 4ee0d58..a183836 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/CookedOrders.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/CookedOrders.java @@ -34,40 +34,42 @@ public class CookedOrders implements MessageListener { @Override public void onMessage(Message msg) { try { - msg.acknowledge(); - if (msg instanceof ObjectMessage) { - ObjectMessage objMsg = (ObjectMessage) msg; - Object obj = objMsg.getObject(); + synchronized (waiter) { + msg.acknowledge(); + if (msg instanceof ObjectMessage) { + ObjectMessage objMsg = (ObjectMessage) msg; + Object obj = objMsg.getObject(); - if (obj instanceof OrderInfo) { - OrderInfo orderinfo = (OrderInfo) obj; - log.debug("Received: " + orderinfo); + if (obj instanceof OrderInfo) { + OrderInfo orderinfo = (OrderInfo) obj; + log.debug("Received: " + orderinfo); - // generate random delay - Thread.sleep((long) (Math.random() * 10000)); + // generate random delay + Thread.sleep((long) (Math.random() * 10000)); - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); - Connection connection = connectionFactory.createConnection(); - connection.start(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - // inform Group + Pizzeria - MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); - informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - DeliverOrder deliverorder = new DeliverOrder(orderinfo.getGroupdata(), waiter.getId()); - informGroup.send(session.createObjectMessage(deliverorder)); + // inform Group + Pizzeria + MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); + informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + DeliverOrder deliverorder = new DeliverOrder(orderinfo.getGroupdata(), waiter.getId()); + informGroup.send(session.createObjectMessage(deliverorder)); - MessageProducer informPizzeria = session.createProducer(session.createQueue("PizzeriaConnector")); - informPizzeria.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - informPizzeria.send(session.createObjectMessage(deliverorder)); + MessageProducer informPizzeria = session.createProducer(session.createQueue("PizzeriaConnector")); + informPizzeria.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + informPizzeria.send(session.createObjectMessage(deliverorder)); - session.close(); - connection.close(); + session.close(); + connection.close(); + } else { + log.warn("Received unknown Object: " + obj); + } } else { - log.warn("Received unknown Object: " + obj); + log.warn("Received unknown Message: " + msg); } - } else { - log.warn("Received unknown Message: " + msg); } } catch (JMSException e) { log.error("EXCEPTION!", e); diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToOrder.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToOrder.java index 3456408..bb6dc45 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToOrder.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToOrder.java @@ -34,45 +34,47 @@ public class WantToOrder implements MessageListener { @Override public void onMessage(Message msg) { try { - msg.acknowledge(); - if (msg instanceof ObjectMessage) { - ObjectMessage objMsg = (ObjectMessage) msg; - Object obj = objMsg.getObject(); + synchronized (waiter) { + msg.acknowledge(); + if (msg instanceof ObjectMessage) { + ObjectMessage objMsg = (ObjectMessage) msg; + Object obj = objMsg.getObject(); - if (obj instanceof OrderRequest) { - OrderRequest orderrequest = (OrderRequest) obj; - log.debug("Received: " + orderrequest); + if (obj instanceof OrderRequest) { + OrderRequest orderrequest = (OrderRequest) obj; + log.debug("Received: " + orderrequest); - // generate random delay - Thread.sleep((long) (Math.random() * 10000)); + // generate random delay + Thread.sleep((long) (Math.random() * 10000)); - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); - Connection connection = connectionFactory.createConnection(); - connection.start(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - // Make cooks do their work - MessageProducer prodOP = session.createProducer(session.createQueue("OrdersToCook")); - prodOP.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - prodOP.send(session.createObjectMessage(orderrequest)); + // Make cooks do their work + MessageProducer prodOP = session.createProducer(session.createQueue("OrdersToCook")); + prodOP.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + prodOP.send(session.createObjectMessage(orderrequest)); - // inform Group + Pizzeria - MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); - informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - OrderResponse or = new OrderResponse(orderrequest.getGroupdata(), waiter.getId()); - informGroup.send(session.createObjectMessage(or)); + // inform Group + Pizzeria + MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); + informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + OrderResponse or = new OrderResponse(orderrequest.getGroupdata(), waiter.getId()); + informGroup.send(session.createObjectMessage(or)); - MessageProducer informPizzeria = session.createProducer(session.createQueue("PizzeriaConnector")); - informPizzeria.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - informPizzeria.send(session.createObjectMessage(or)); + MessageProducer informPizzeria = session.createProducer(session.createQueue("PizzeriaConnector")); + informPizzeria.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + informPizzeria.send(session.createObjectMessage(or)); - session.close(); - connection.close(); + session.close(); + connection.close(); + } else { + log.warn("Received unknown Object: " + obj); + } } else { - log.warn("Received unknown Object: " + obj); + log.warn("Received unknown Message: " + msg); } - } else { - log.warn("Received unknown Message: " + msg); } } catch (JMSException e) { log.error("EXCEPTION!", e); diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToPay.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToPay.java index 80f5b3e..d4a3113 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToPay.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToPay.java @@ -34,35 +34,37 @@ public class WantToPay implements MessageListener { @Override public void onMessage(Message msg) { try { - msg.acknowledge(); - if (msg instanceof ObjectMessage) { - ObjectMessage objMsg = (ObjectMessage) msg; - Object obj = objMsg.getObject(); + synchronized (waiter) { + msg.acknowledge(); + if (msg instanceof ObjectMessage) { + ObjectMessage objMsg = (ObjectMessage) msg; + Object obj = objMsg.getObject(); - if (obj instanceof PayRequest) { - PayRequest payrequest = (PayRequest) obj; - log.debug("Received: " + payrequest); + if (obj instanceof PayRequest) { + PayRequest payrequest = (PayRequest) obj; + log.debug("Received: " + payrequest); - // generate random delay - Thread.sleep((long) (Math.random() * 10000)); + // generate random delay + Thread.sleep((long) (Math.random() * 10000)); - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); - Connection connection = connectionFactory.createConnection(); - connection.start(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); - informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - PayResponse pr = new PayResponse(payrequest.getGroupdata(), waiter.getId()); - informGroup.send(session.createObjectMessage(pr)); + MessageProducer informGroup = session.createProducer(session.createQueue("GroupConnector")); + informGroup.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + PayResponse pr = new PayResponse(payrequest.getGroupdata(), waiter.getId()); + informGroup.send(session.createObjectMessage(pr)); - session.close(); - connection.close(); + session.close(); + connection.close(); + } else { + log.warn("Received unknown Object: " + obj); + } } else { - log.warn("Received unknown Object: " + obj); + log.warn("Received unknown Message: " + msg); } - } else { - log.warn("Received unknown Message: " + msg); } } catch (JMSException e) { log.error("EXCEPTION!", e); diff --git a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToSitAtTable.java b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToSitAtTable.java index ca4f4e5..f5f6dad 100644 --- a/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToSitAtTable.java +++ b/src/main/java/at/ac/tuwien/sbc/valesriegler/waiter/jms/messageListeners/WantToSitAtTable.java @@ -37,53 +37,55 @@ public class WantToSitAtTable implements MessageListener { @Override public void onMessage(Message msg) { try { - msg.acknowledge(); - if (msg instanceof ObjectMessage) { - ObjectMessage objMsg = (ObjectMessage) msg; - Object obj = objMsg.getObject(); + synchronized (waiter) { + msg.acknowledge(); + if (msg instanceof ObjectMessage) { + ObjectMessage objMsg = (ObjectMessage) msg; + Object obj = objMsg.getObject(); - if (obj instanceof TableRequest) { - TableRequest tablerequest = (TableRequest) obj; - log.debug("Received: " + tablerequest); + if (obj instanceof TableRequest) { + TableRequest tablerequest = (TableRequest) obj; + log.debug("Received: " + tablerequest); - // generate random delay - Thread.sleep((long) (Math.random() * 10000)); + // generate random delay + Thread.sleep((long) (Math.random() * 10000)); - ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); - Connection connection = connectionFactory.createConnection(); - connection.start(); - Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + ActiveMQConnectionFactory connectionFactory = new ActiveMQConnectionFactory("tcp://localhost:61616"); + Connection connection = connectionFactory.createConnection(); + connection.start(); + Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageConsumer consumer = session.createConsumer(session.createQueue("TablesFree")); - Message trm = consumer.receive(); - if (trm instanceof ObjectMessage) { - ObjectMessage tom = (ObjectMessage) trm; - Object tabledata = tom.getObject(); + MessageConsumer consumer = session.createConsumer(session.createQueue("TablesFree")); + Message trm = consumer.receive(); + if (trm instanceof ObjectMessage) { + ObjectMessage tom = (ObjectMessage) trm; + Object tabledata = tom.getObject(); - if (tabledata instanceof Table) { - session.close(); - Table table = (Table) tabledata; - System.out.println("Received: " + table); + if (tabledata instanceof Table) { + session.close(); + Table table = (Table) tabledata; + System.out.println("Received: " + table); - TableResponse tr = new TableResponse(tablerequest.getGroupdata(), table, waiter.getId()); - session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); - MessageProducer ret = session.createProducer(session.createQueue("GroupConnector")); - ret.setDeliveryMode(DeliveryMode.NON_PERSISTENT); - ret.send(session.createObjectMessage(tr)); + TableResponse tr = new TableResponse(tablerequest.getGroupdata(), table, waiter.getId()); + session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); + MessageProducer ret = session.createProducer(session.createQueue("GroupConnector")); + ret.setDeliveryMode(DeliveryMode.NON_PERSISTENT); + ret.send(session.createObjectMessage(tr)); + } else { + log.warn("Received unknown Object: " + tabledata); + } } else { - log.warn("Received unknown Object: " + tabledata); + log.warn("Received unknown Message: " + trm); } + session.close(); + connection.close(); } else { - log.warn("Received unknown Message: " + trm); + log.warn("Received unknown Object: " + obj); } - session.close(); - connection.close(); } else { - log.warn("Received unknown Object: " + obj); + log.warn("Received unknown Message: " + msg); } - } else { - log.warn("Received unknown Message: " + msg); } } catch (JMSException e) { log.error("EXCEPTION!", e); -- 2.43.0