Event capture and querying framework for Java
Java Other
Latest commit 34ce67b Feb 13, 2017 @yrashk yrashk committed on GitHub Merge pull request #213 from yrashk/avoid-reindexing-entities
Problem: reindexing large datasets is very time consuming
Permalink
Failed to load latest commit information.
docs Problem: using non-final index definitions is problematic Nov 1, 2016
eventsourcing-cep Problem: index.EntityQueryFactory and queries.QueryFactory overlap Jan 12, 2017
eventsourcing-core Problem: reindexing large datasets is very time consuming Feb 3, 2017
eventsourcing-hlc Problem: Repistory loses its exact last timestamp upon restart Jan 15, 2017
eventsourcing-inmem Problem: reindexing large datasets is very time consuming Feb 3, 2017
eventsourcing-kotlin Problem: MemoryIndexEngine is in eventsourcing-core Jan 11, 2017
eventsourcing-layout Problem: a Layout-related exception is missing a space character Jan 11, 2017
eventsourcing-migrations Problem: index.EntityQueryFactory and queries.QueryFactory overlap Jan 12, 2017
eventsourcing-postgresql Problem: reindexing large datasets is very time consuming Feb 3, 2017
eventsourcing-repository Problem: in some cases, RepositoryTest.repositoryTimestamp() test hangs Jan 26, 2017
examples/foodsourcing Problem: Min/Max queries are global to the attribute Jan 31, 2017
gradle/wrapper Problem: Gradle 3.1 is outdated Jan 25, 2017
src/jmh/java/com/eventsourcing/jmh Problem: H2 backend is no longer actively maintained or used Jan 11, 2017
.gitignore Problem: order example is too simple and boring Jul 12, 2016
.travis.yml Problem: cqengine 2.8.0 is oudated Nov 30, 2016
CHANGELOG.md Prepare next release Jan 9, 2017
CONTRIBUTING.md Problem: decentralized issue list isn't very convenient Oct 29, 2016
CONTRIBUTORS Problem: one of the recent contributors is not listed Oct 25, 2016
LICENSE Problem: No 3/CEP naming implementation in Java Jun 7, 2016
LICENSE-HEADER Problem: No 3/CEP naming implementation in Java Jun 7, 2016
MAINTAINERS.md Problem: hard to identify project maintainers Jun 12, 2016
README.md Problem: missing space in README Jan 11, 2017
RELEASE_NOTES.md Prepare next release Jan 9, 2017
book.js Problem: no tagged documentation for 0.4.2 Sep 21, 2016
build.gradle Problem: H2 backend is no longer actively maintained or used Jan 11, 2017
es4j-intellij-code-style.xml Problem: no defined code style guideline May 8, 2016
gradle.properties [Gradle Release Plugin] - new version commit: 'v0.4.7'. Jan 9, 2017
gradlew Problem: Gradle 3.1 is outdated Jan 25, 2017
gradlew.bat Problem: Gradle 2.x has been superseded Aug 28, 2016
settings.gradle Problem: queries module is an extra dependency Jan 12, 2017

README.md

Build Status Maven Central Download Join the chat at https://gitter.im/eventsourcing/eventsourcing

logo Eventsourcing for Java

Enabling plurality and evolution of domain models

Instead of mutating data in a database, Eventsourcing stores all changes (events) and what caused them (commands). To make this data useful, Eventsourcing builds indices over it.

This helps developing applications faster because there is no need to worry about designing the right domain models upfront (or as close to right as possible). By keeping all the commands and events, we can enrich or change our domain models over time with very little friction. Furthermore, this approach removes a need to have a one and only domain model for every entity. We experience the world and reality in different ways, depending on circumstances and points of view, and our programs should be able to reflect that.

To learn more about what kind of problems ES4J addresses, please read Why Use Eventsourcing Database

Lazy event sourcing: living in the now

Key benefits

  • Domain model flexibility
  • Late domain model binding
  • Persistence of causal information
  • Serializable conflict resolution
  • Audit trail logging
  • Mapping application functionality

Key features

  • Strongly typed schemas
  • Event migrations
  • Domain protocols
  • Batteries included (shared event languages)
  • Basic support for Kotlin
  • Causality-preserving Hybrid Logical Clocks
  • In-memory and server (PostgreSQL) storage
  • Locking synchronization primitive
  • JMX-based introspection and management

Presentation

You can find our current slide deck at https://eventsourcing.com/presentation

Downloading and installing

To start using ES4J, please follow the installation instructions.

Documentation

Documentation can be found at es4j.eventsourcing.com

We strive to specify the building blocks behind Eventsourcing and its ecosystem as succinct specifications, you can find the current list of them at rfc.eventsourcing.com

Roadmap

As this project is striving to be a decentralized, contributors-driven project governed by the C4 process, there is no central roadmap per se. However, there's a centralized list of reported issues. These do not imply an actual roadmap, just what has been reported, ranging from bugs to longer-term design issues.

Contributing

Contributions of all kinds (code, documentation, testing, artwork, etc.) are highly encouraged. Please open a GitHub issue if you want to suggest an idea or ask a question.

We use Unprotocols C4 process. In a nutshell, this means:

  • We merge pull requests rapidly (try!)
  • We are open to diverse ideas
  • We prefer code now over consensus later

For more details, please refer to CONTRIBUTING

Related projects

  • es4j-graphql A Relay.js/GraphQL adaptor for ES4J-based applications.