diff --git a/event-driven-architecture/pom.xml b/event-driven-architecture/pom.xml
index 0c72f2157..2c011759b 100644
--- a/event-driven-architecture/pom.xml
+++ b/event-driven-architecture/pom.xml
@@ -19,28 +19,5 @@
test
-
-
-
- org.apache.maven.plugins
- maven-checkstyle-plugin
- 2.15
-
-
- validate
-
- check
-
- validate
-
- checkstyle.xml
- UTF-8
- true
- true
-
-
-
-
-
-
+
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java
index ab4b2e489..5ef58d20b 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/App.java
@@ -5,23 +5,37 @@ import com.iluwatar.eda.event.UserCreatedEvent;
import com.iluwatar.eda.event.UserUpdatedEvent;
import com.iluwatar.eda.handler.UserCreatedEventHandler;
import com.iluwatar.eda.handler.UserUpdatedEventHandler;
+import com.iluwatar.eda.model.User;
/**
* An event-driven architecture (EDA) is a framework that orchestrates behavior around the
* production, detection and consumption of events as well as the responses they evoke. An event is
* any identifiable occurrence that has significance for system hardware or software.
The
- * example below we uses an {@link EventDispatcher} to link/register {@link Event} objects to their
- * respective handlers Once an {@link Event} is dispatched, it's respective handler is invoked and
- * the {@link Event} is handled accordingly
+ * example below uses an {@link EventDispatcher} to link/register {@link Event} objects to their
+ * respective handlers once an {@link Event} is dispatched, it's respective handler is invoked and
+ * the {@link Event} is handled accordingly.
+ *
*/
public class App {
+ /**
+ * Once the {@link EventDispatcher} is initialised, channels related to specific events have to be
+ * made known to the dispatcher by registering them. In this case the {@link UserCreatedEvent} is
+ * bound to the UserCreatedEventHandler, whilst the {@link UserUpdatedEvent} is bound to the
+ * {@link UserUpdatedEventHandler}. The dispatcher can now be called to dispatch specific events.
+ * When a user is saved, the {@link UserCreatedEvent} can be dispatched.
+ * On the other hand, when a user is updated, {@link UserUpdatedEvent} can be dispatched.
+ *
+ */
public static void main(String[] args) {
+
EventDispatcher dispatcher = new EventDispatcher();
dispatcher.registerChannel(UserCreatedEvent.class, new UserCreatedEventHandler());
dispatcher.registerChannel(UserUpdatedEvent.class, new UserUpdatedEventHandler());
- dispatcher.dispatch(new UserCreatedEvent());
- dispatcher.dispatch(new UserUpdatedEvent());
+
+ User user = new User("iluwatar");
+ dispatcher.dispatch(new UserCreatedEvent(user));
+ dispatcher.dispatch(new UserUpdatedEvent(user));
}
}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java
index 3b44a414a..e52f9db46 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/EventDispatcher.java
@@ -8,21 +8,20 @@ import java.util.HashMap;
import java.util.Map;
/**
- * The {@link Event Dispatcher} handles routing of {@link Event} messages
- * to associated channels.
+ * Handles the routing of {@link Event} messages to associated channels.
* A {@link HashMap} is used to store the association between events and their respective handlers.
*
*/
public class EventDispatcher implements DynamicRouter {
- private Map, Channel> handlers;
+ private Map, Channel>> handlers;
public EventDispatcher() {
handlers = new HashMap<>();
}
/**
- * Links an {@link Event} to a specific {@link Channel}
+ * Links an {@link Event} to a specific {@link Channel}.
*
* @param contentType The {@link Event} to be registered
* @param channel The {@link Channel} that will be handling the {@link Event}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java
index 1a61dfa59..3d6187b7e 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserCreatedEvent.java
@@ -1,8 +1,22 @@
package com.iluwatar.eda.event;
+import com.iluwatar.eda.model.User;
+
/**
* The {@link UserCreatedEvent} class should should be dispatched whenever a user has been created.
- * This class can be extended to contain details about the user has been created.
+ * This class can be extended to contain details about the user has been created. In this example,
+ * the entire {@link User} object is passed on as data with the event.
*/
public class UserCreatedEvent extends Event {
+
+ private User user;
+
+ public UserCreatedEvent(User user) {
+ this.user = user;
+ }
+
+
+ public User getUser() {
+ return user;
+ }
}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java
index 3b401ecd1..f3bce8124 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/event/UserUpdatedEvent.java
@@ -1,8 +1,21 @@
package com.iluwatar.eda.event;
+import com.iluwatar.eda.model.User;
+
/**
* The {@link UserUpdatedEvent} class should should be dispatched whenever a user has been updated.
- * This class can be extended to contain details about the user has been updated.
+ * This class can be extended to contain details about the user has been updated. In this example,
+ * the entire {@link User} object is passed on as data with the event.
*/
public class UserUpdatedEvent extends Event {
+
+ private User user;
+
+ public UserUpdatedEvent(User user) {
+ this.user = user;
+ }
+
+ public User getUser() {
+ return user;
+ }
}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java
index 32eca09d4..1684a9641 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/framework/Channel.java
@@ -7,5 +7,5 @@ import com.iluwatar.eda.event.Event;
* of message
*/
public interface Channel {
- void dispatch(E message);
+ void dispatch(Event message);
}
\ No newline at end of file
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java
index e406f7c51..49d209eb0 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserCreatedEventHandler.java
@@ -1,13 +1,19 @@
package com.iluwatar.eda.handler;
+import com.iluwatar.eda.event.Event;
import com.iluwatar.eda.event.UserCreatedEvent;
import com.iluwatar.eda.framework.Channel;
+import com.iluwatar.eda.model.User;
/**
* Handles the {@link UserCreatedEvent} message.
*/
public class UserCreatedEventHandler implements Channel {
- public void dispatch(UserCreatedEvent message) {
- System.out.println("User Created!");
+
+ @Override
+ public void dispatch(Event message) {
+
+ UserCreatedEvent userCreatedEvent = (UserCreatedEvent) message;
+ System.out.printf("User with %s has been Created!", userCreatedEvent.getUser().getUsername());
}
}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java
index d59954806..fd3a6d3ba 100644
--- a/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/handler/UserUpdatedEventHandler.java
@@ -1,5 +1,7 @@
package com.iluwatar.eda.handler;
+import com.iluwatar.eda.event.Event;
+import com.iluwatar.eda.event.UserCreatedEvent;
import com.iluwatar.eda.event.UserUpdatedEvent;
import com.iluwatar.eda.framework.Channel;
@@ -7,7 +9,11 @@ import com.iluwatar.eda.framework.Channel;
* Handles the {@link UserUpdatedEvent} message.
*/
public class UserUpdatedEventHandler implements Channel {
- public void dispatch(UserUpdatedEvent message) {
- System.out.println("User Updated!");
+
+ @Override
+ public void dispatch(Event message) {
+
+ UserUpdatedEvent userUpdatedEvent = (UserUpdatedEvent) message;
+ System.out.printf("User with %s has been Updated!", userUpdatedEvent.getUser().getUsername());
}
}
diff --git a/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java
new file mode 100644
index 000000000..02a7a4641
--- /dev/null
+++ b/event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java
@@ -0,0 +1,21 @@
+package com.iluwatar.eda.model;
+
+import com.iluwatar.eda.event.UserCreatedEvent;
+import com.iluwatar.eda.event.UserUpdatedEvent;
+
+/**
+ * This {@link User} class is a basic pojo used to demonstrate user data sent along with
+ * the {@link UserCreatedEvent} and {@link UserUpdatedEvent} events.
+ */
+public class User {
+
+ private String username;
+
+ public User(String username) {
+ this.username = username;
+ }
+
+ public String getUsername() {
+ return username;
+ }
+}