diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java new file mode 100644 index 0000000..0c93b9a --- /dev/null +++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/DeadEvent.java @@ -0,0 +1,32 @@ +package dev.kske.eventbus.core; + +/** + * Wraps an event that was dispatched but for which no handler has been bound. + *
+ * Handling dead events is useful as it can identify a poorly configured event distribution.
+ *
+ * @author Kai S. K. Engelbart
+ * @since 1.1.0
+ */
+public final class DeadEvent {
+
+ private final EventBus eventBus;
+ private final Object event;
+
+ DeadEvent(EventBus eventBus, Object event) {
+ this.eventBus = eventBus;
+ this.event = event;
+ }
+
+ /**
+ * @return the event bus that originated this event
+ * @since 1.1.0
+ */
+ public EventBus getEventBus() { return eventBus; }
+
+ /**
+ * @return the event that could not be delivered
+ * @since 1.1.0
+ */
+ public Object getEvent() { return event; }
+}
diff --git a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java
index 8f30e89..f0c065d 100644
--- a/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java
+++ b/event-bus-core/src/main/java/dev/kske/eventbus/core/EventBus.java
@@ -73,14 +73,19 @@ public final class EventBus {
var state = dispatchState.get();
state.isDispatching = true;
- for (var handler : getHandlersFor(event.getClass()))
- if (state.isCancelled) {
- logger.log(Level.INFO, "Cancelled dispatching event {0}", event);
- state.isCancelled = false;
- break;
- } else {
- handler.execute(event);
- }
+ Iterator
- * This is used to retrieve event handlers in order of descending priority from a tree set.
+ * This is used to retrieve event handlers in descending order of priority from a tree set.
*
* @since 0.0.1
*/
diff --git a/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java b/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java
new file mode 100644
index 0000000..94e925d
--- /dev/null
+++ b/event-bus-core/src/test/java/dev/kske/eventbus/core/DeadTest.java
@@ -0,0 +1,37 @@
+package dev.kske.eventbus.core;
+
+import static org.junit.jupiter.api.Assertions.*;
+
+import org.junit.jupiter.api.*;
+
+/**
+ * Tests the dispatching of a dead event if an event could not be delivered.
+ *
+ * @author Kai S. K. Engelbart
+ * @since 1.1.0
+ */
+class DeadTest {
+
+ EventBus bus;
+ String event = "This event has no handler";
+ boolean deadEventHandled;
+
+ @BeforeEach
+ void registerListener() {
+ bus = new EventBus();
+ bus.registerListener(this);
+ }
+
+ @Test
+ void testDeadEvent() {
+ bus.dispatch(event);
+ assertTrue(deadEventHandled);
+ }
+
+ @Event
+ void onDeadEvent(DeadEvent deadEvent) {
+ assertEquals(bus, deadEvent.getEventBus());
+ assertEquals(event, deadEvent.getEvent());
+ deadEventHandled = true;
+ }
+}