Challenge Overview
Design a Java module that is highly general that facilitates event-based communication between event producers and registered event listeners.
Intended for use between Task implementations in a Java Batch Job Infrastructure (JBJI) batch job, but should be able to be used in any Java program, so there should be nothing that is specific to JBJI. Details of JBJI are included if helpful for context, but should not be required at all to complete this contest.
Final Submission Guidelines
This module should define a lot of Interfaces and then provide all functionality based on those Interfaces. In addition, Java Generics should also be used as applicable for the best type checking possible with such a generic component.