Evensourcing for Java (ES4J) captures commands as its primary input when they are published to a repository. A command is request for changes in the domain and may produce zero or more events. It holds an internal state and may return a value upon its termination (result). Every command and every event (collectively "entities") have a unique identifier (UUID) and a timestamp.
ES4J's main command processing duties include: journalling events and commands, indexing them, handling event production related exceptions and notifying application's entity subscribers about newly journalled entities.
The above model facilitates the application of so called late domain binding, a method for reducing the upfront work required to design an application and its domain model.