From e1c0731f7e2c58fba76c3c6ec393890b578e4370 Mon Sep 17 00:00:00 2001 From: cfarrugia Date: Sat, 28 Nov 2015 15:03:22 +0100 Subject: [PATCH] #113 Event Driven Architecture Adds more Javadoc and fixes checkstyle issues. --- event-driven-architecture/pom.xml | 25 +------------------ .../src/main/java/com/iluwatar/eda/App.java | 24 ++++++++++++++---- .../com/iluwatar/eda/EventDispatcher.java | 7 +++--- .../iluwatar/eda/event/UserCreatedEvent.java | 16 +++++++++++- .../iluwatar/eda/event/UserUpdatedEvent.java | 15 ++++++++++- .../com/iluwatar/eda/framework/Channel.java | 2 +- .../eda/handler/UserCreatedEventHandler.java | 10 ++++++-- .../eda/handler/UserUpdatedEventHandler.java | 10 ++++++-- .../java/com/iluwatar/eda/model/User.java | 21 ++++++++++++++++ 9 files changed, 90 insertions(+), 40 deletions(-) create mode 100644 event-driven-architecture/src/main/java/com/iluwatar/eda/model/User.java 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; + } +}