diff --git a/easybus-core/pom.xml b/easybus-core/pom.xml index 88a4934..7eb5e0c 100644 --- a/easybus-core/pom.xml +++ b/easybus-core/pom.xml @@ -3,12 +3,12 @@ 4.0.0 me.kisoft easybus-core - 2.2.0 + 2.3.0 jar me.kisoft easybus-parent - 2.2.0 + 2.3.0 Easybus Core @@ -38,6 +38,11 @@ test jar + + org.slf4j + slf4j-api + 2.0.3 + diff --git a/easybus-core/src/main/java/me/kisoft/easybus/EasyBus.java b/easybus-core/src/main/java/me/kisoft/easybus/EasyBus.java index 2cf3f77..4a9b76e 100644 --- a/easybus-core/src/main/java/me/kisoft/easybus/EasyBus.java +++ b/easybus-core/src/main/java/me/kisoft/easybus/EasyBus.java @@ -6,21 +6,21 @@ package me.kisoft.easybus; import java.lang.reflect.InvocationTargetException; -import java.util.logging.Level; -import lombok.extern.java.Log; import org.reflections.Reflections; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author tareq */ -@Log public class EasyBus { - + + private final Logger log = LoggerFactory.getLogger(EasyBus.class); private static final String NO_EVENT_CLASS_ERROR = "Error in Class : %s : No Event Class Specified."; private static final String EVENT_CLASS_NOT_ANNOTATED = "Error in Class : %s : Event Class : %s : Not annotated with @Event"; private static final String NO_METHOD_DEFINED_ERROR = "Error in Class : %s : 'handle' method for Specified Event type : %s : not defined"; - + private final Bus bus; /** @@ -29,7 +29,7 @@ public class EasyBus { public EasyBus() { bus = new MemoryBusImpl(); } - + public EasyBus(Bus bus) { this.bus = bus; } @@ -48,7 +48,7 @@ public void removeHandlers() { */ public void post(Object event) { if (event != null) { - log.log(Level.FINE, "Event Thrown : {0}", event.getClass().getCanonicalName()); + log.debug(String.format("Event Thrown : %s", event.getClass().getCanonicalName())); bus.post(event); } } @@ -91,7 +91,7 @@ public final EasyBus search(ClassLoader loader) { */ public final EasyBus search(Reflections r) { for (Class clazz : r.getTypesAnnotatedWith(Handle.class)) { - + try { Object o = clazz.getConstructor().newInstance(); if (o.getClass().getAnnotation(Handle.class).event() == null) { @@ -106,13 +106,13 @@ public final EasyBus search(Reflections r) { } } this.addHandler(new EventHandler(o)); - log.log(Level.INFO, "Added Event Handler {0}", clazz.getSimpleName()); + log.info(String.format("Added Event Handler %s", clazz.getSimpleName())); } catch (NoSuchMethodException | SecurityException | InstantiationException | IllegalAccessException | IllegalArgumentException | InvocationTargetException ex) { - log.log(Level.SEVERE, null, ex); + log.error(ex.getMessage()); throw new RuntimeException(ex); } } - + return this; } @@ -133,9 +133,9 @@ public void addHandler(EventHandler handler) { public void removeHandler(EventHandler handler) { bus.removeHandler(handler); } - + public void close() throws Exception { bus.close(); } - + } diff --git a/easybus-core/src/main/java/me/kisoft/easybus/EventHandler.java b/easybus-core/src/main/java/me/kisoft/easybus/EventHandler.java index 0aeb41d..2902861 100644 --- a/easybus-core/src/main/java/me/kisoft/easybus/EventHandler.java +++ b/easybus-core/src/main/java/me/kisoft/easybus/EventHandler.java @@ -8,15 +8,16 @@ import java.lang.reflect.Method; import java.util.Objects; import lombok.Getter; -import lombok.extern.java.Log; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author tareq */ -@Log public class EventHandler { + private final Logger log = LoggerFactory.getLogger(EventHandler.class); private static final String NO_ANNOTATION = "Handler of type %s Must have the @Handle annotation"; private static final String NO_METHOD = "Handler of type %s Must have the public method 'handle' with parameter type %s"; private static final String NO_CLASS = "Handler of type %s is missing the target event class"; @@ -66,7 +67,7 @@ public final void handle(Object event) throws RuntimeException { try { this.handlerMethod.invoke(this.handler, event); } catch (Throwable ex) { - log.severe(ex.getMessage()); + log.error(ex.getMessage()); throw new RuntimeException(ex); } @@ -108,7 +109,5 @@ public boolean equals(Object obj) { } return true; } - - } diff --git a/easybus-core/src/main/java/me/kisoft/easybus/MemoryBusImpl.java b/easybus-core/src/main/java/me/kisoft/easybus/MemoryBusImpl.java index e1b8087..5167881 100644 --- a/easybus-core/src/main/java/me/kisoft/easybus/MemoryBusImpl.java +++ b/easybus-core/src/main/java/me/kisoft/easybus/MemoryBusImpl.java @@ -20,7 +20,6 @@ import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.stream.Collectors; -import org.apache.commons.lang3.StringUtils; /** * diff --git a/easybus-mongodb/pom.xml b/easybus-mongodb/pom.xml index 746ef72..9c2f660 100644 --- a/easybus-mongodb/pom.xml +++ b/easybus-mongodb/pom.xml @@ -4,11 +4,11 @@ me.kisoft easybus-parent - 2.2.0 + 2.3.0 me.kisoft easybus-mongodb - 2.2.0 + 2.3.0 jar Easybus Mongodb Simple, No Frills Event Bus for Java - Mongodb Backing Bus @@ -59,6 +59,11 @@ 1.17.5 test + + org.slf4j + slf4j-api + 2.0.3 + diff --git a/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbBusImpl.java b/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbBusImpl.java index 8181d0a..c2ba613 100644 --- a/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbBusImpl.java +++ b/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbBusImpl.java @@ -25,6 +25,8 @@ import me.kisoft.easybus.Bus; import me.kisoft.easybus.EventHandler; import org.jongo.Jongo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * @@ -32,6 +34,7 @@ */ public class MongodbBusImpl implements Bus { + private final Logger log = LoggerFactory.getLogger(MongodbBusImpl.class); private final ScheduledExecutorService pool; private final long pollTime; private final Map futureMap = new HashMap<>(); diff --git a/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbCollectionPollRunnable.java b/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbCollectionPollRunnable.java index b4382a0..a11cddc 100644 --- a/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbCollectionPollRunnable.java +++ b/easybus-mongodb/src/main/java/me/kisoft/easybus/mongodb/MongodbCollectionPollRunnable.java @@ -17,18 +17,18 @@ import com.fasterxml.jackson.databind.ObjectMapper; import java.util.Date; -import java.util.logging.Level; -import lombok.extern.java.Log; import me.kisoft.easybus.EventHandler; import org.jongo.Jongo; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author tareq */ -@Log public class MongodbCollectionPollRunnable implements Runnable { + private final Logger log = LoggerFactory.getLogger(MongodbCollectionPollRunnable.class); private final EventHandler handler; private final Jongo jongo; private final ObjectMapper mapper = new ObjectMapper(); @@ -63,17 +63,17 @@ public void run() { .as(MongodbEvent.class); } catch (RuntimeException ex) { - log.fine(ex.getMessage()); + log.debug(ex.getMessage()); event = this.jongo.getCollection(handler.getEventClassName()) .findAndModify("{eventId:#}", event.getEventId()) .with("{$set:{processing:false,handled:false,lastAccess:#}}", new Date()) .as(MongodbEvent.class); - log.log(Level.FINE, "Re-Submitting event with id : {0}", event.getEventId()); + log.debug(String.format("Re-Submitting event with id : %s", event.getEventId())); } } } catch (IllegalArgumentException ex) { - log.severe(ex.getMessage()); + log.error(ex.getMessage()); } } diff --git a/easybus-rabbitmq/pom.xml b/easybus-rabbitmq/pom.xml index e3ec615..ceada33 100644 --- a/easybus-rabbitmq/pom.xml +++ b/easybus-rabbitmq/pom.xml @@ -4,10 +4,10 @@ me.kisoft easybus-parent - 2.2.0 + 2.3.0 easybus-rabbitmq - 2.2.0 + 2.3.0 jar Easybus RabbitMQ Simple, No Frills Event Bus for Java Backed by RabbitMQ @@ -57,5 +57,10 @@ 1.17.5 test + + org.slf4j + slf4j-api + 2.0.3 + \ No newline at end of file diff --git a/easybus-rabbitmq/src/main/java/me/kisoft/easybus/rabbitmq/RabbitMQBusImpl.java b/easybus-rabbitmq/src/main/java/me/kisoft/easybus/rabbitmq/RabbitMQBusImpl.java index e0931a9..c6100ab 100644 --- a/easybus-rabbitmq/src/main/java/me/kisoft/easybus/rabbitmq/RabbitMQBusImpl.java +++ b/easybus-rabbitmq/src/main/java/me/kisoft/easybus/rabbitmq/RabbitMQBusImpl.java @@ -16,7 +16,6 @@ package me.kisoft.easybus.rabbitmq; import com.fasterxml.jackson.databind.ObjectMapper; -import com.rabbitmq.client.AMQP; import com.rabbitmq.client.BuiltinExchangeType; import com.rabbitmq.client.Channel; import com.rabbitmq.client.Connection; @@ -25,22 +24,24 @@ import java.util.HashMap; import java.util.Map; import java.util.concurrent.TimeoutException; -import lombok.extern.java.Log; import me.kisoft.easybus.Bus; import me.kisoft.easybus.EventHandler; import org.apache.commons.lang3.RandomStringUtils; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; /** * * @author tareq */ -@Log public class RabbitMQBusImpl implements Bus { + private final Logger log = LoggerFactory.getLogger(RabbitMQBusImpl.class); private final Connection connection; private final ObjectMapper mapper = new ObjectMapper(); private final Map tagMap = new HashMap<>(); private final Map channelMap = new HashMap<>(); + private final Map exchangeExistanceMap = new HashMap<>(); public RabbitMQBusImpl(Connection connection) { this.connection = connection; @@ -59,6 +60,11 @@ public RabbitMQBusImpl() { @Override public void post(Object object) { try ( Channel channel = this.connection.createChannel()) { + String exchangeName = getExcahngeName(object.getClass()); + if (!exchangeExistanceMap.getOrDefault(exchangeName, Boolean.FALSE)) { + channel.exchangeDeclare(exchangeName, BuiltinExchangeType.FANOUT); + exchangeExistanceMap.put(exchangeName, Boolean.TRUE); + } channel.basicPublish(getExcahngeName(object.getClass()), "all", null, mapper.writer().writeValueAsBytes(object)); } catch (IOException | TimeoutException ex) { throw new RuntimeException(ex); @@ -92,14 +98,14 @@ public void clear() { try { channel.basicCancel(tag); } catch (IOException ex) { - log.severe(ex.getMessage()); + log.debug(ex.getMessage()); } }); channelMap.values().forEach(usedChannel -> { try { usedChannel.close(); } catch (IOException | TimeoutException ex) { - log.severe(ex.getMessage()); + log.error(ex.getMessage()); } }); } catch (IOException | TimeoutException ex) { @@ -117,7 +123,7 @@ public void addHandler(EventHandler handler) { channel.queueDeclare(queueName, false, false, false, null).getQueue(); channel.queueBind(queueName, exchangeName, RandomStringUtils.randomAlphabetic(30)); String tag = channel.basicConsume(getQueueName(handler.getHandler()), (consumerTag, delivery) -> { - log.fine(String.format("Received Message from Exchange %s Queue %s with Delivery Tag %s", exchangeName, queueName, String.valueOf(delivery.getEnvelope().getDeliveryTag()))); + log.debug(String.format("Received Message from Exchange %s Queue %s with Delivery Tag %s", exchangeName, queueName, String.valueOf(delivery.getEnvelope().getDeliveryTag()))); handler.handle(mapper.reader().forType(handler.getEventClass()).readValue(delivery.getBody())); channel.basicAck(delivery.getEnvelope().getDeliveryTag(), false); }, consumerTag -> { @@ -133,11 +139,14 @@ public void addHandler(EventHandler handler) { public void removeHandler(EventHandler handler) { try { String consumerTag = tagMap.get(handler); - Channel channel = channelMap.get(handler); - channel.basicCancel(consumerTag); - channel.close(); + try ( Channel channel = channelMap.get(handler)) { + channel.basicCancel(consumerTag); + } } catch (IOException | TimeoutException ex) { throw new RuntimeException(ex); + } finally { + channelMap.remove(handler); + tagMap.remove(handler); } } @@ -147,7 +156,7 @@ public void close() throws IOException { try { channel.close(); } catch (IOException | TimeoutException ex) { - log.severe(ex.getMessage()); + log.error(ex.getMessage()); } }); connection.close(); diff --git a/pom.xml b/pom.xml index fe2e66d..485ae3b 100644 --- a/pom.xml +++ b/pom.xml @@ -4,7 +4,7 @@ 4.0.0 me.kisoft easybus-parent - 2.2.0 + 2.3.0 EasyBus pom