Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/johanhaleby/occurrent
Unintrusive Event Sourcing Library for the JVM
https://github.com/johanhaleby/occurrent
cloud-events event-sourcing java kotlin
Last synced: 7 days ago
JSON representation
Unintrusive Event Sourcing Library for the JVM
- Host: GitHub
- URL: https://github.com/johanhaleby/occurrent
- Owner: johanhaleby
- Created: 2020-07-06T17:14:59.000Z (over 4 years ago)
- Default Branch: master
- Last Pushed: 2024-10-11T12:39:56.000Z (28 days ago)
- Last Synced: 2024-10-14T15:44:43.060Z (25 days ago)
- Topics: cloud-events, event-sourcing, java, kotlin
- Language: Java
- Homepage: https://occurrent.org
- Size: 7.22 MB
- Stars: 121
- Watchers: 5
- Forks: 15
- Open Issues: 59
-
Metadata Files:
- Readme: README.md
- Changelog: changelog.md
- Funding: .github/FUNDING.yml
Awesome Lists containing this project
README
[![Build Status](https://github.com/johanhaleby/occurrent/actions/workflows/maven.yml/badge.svg?branch=master)](https://github.com/johanhaleby/occurrent/actions/workflows/maven.yml)Occurrent is an Event Sourcing library based on the [cloud events](https://cloudevents.io/) specification.
#### Documentation
You can find documentation on the [website](https://occurrent.org).
#### Design Choices
Occurrent is designed to be [simple](https://www.infoq.com/presentations/Simple-Made-Easy/), unintrusive and pragmatic. It emphasizes understandability, composability, transparency, and pragmatism.
* You should be able to design your domain model without _any_ dependencies on Occurrent or any other library. Your domain model can be expressed with pure functions that return events. Use Occurrent to store these events.
* Simple: Pick only the libraries you need, no need for an all-or-nothing solution.
* You should be in control! Magic is kept to a minimum and data is stored in a standard format ([cloud events](https://cloudevents.io/)). You are responsible for serializing/deserializing the cloud events "body" (data) yourself.
* Composable: Function composition and pipes are encouraged. For example pipe the event stream to a rehydration function (any function that converts a stream of events to the current state) before calling your domain model.
* Designed to be used as a library and not a framework to the greatest extent possible.
* Pragmatic: Need consistent projections? You can decide to write projections and events transactionally using tools you already know (such as Spring `@Transactional`)!
* Interoperable/Portable: Cloud events is a [CNCF](https://www.cncf.io/) specification for describing event data in a common way. CloudEvents seeks to dramatically simplify event declaration and delivery across services, platforms, and beyond!
* Use the Occurrent components as legobricks to compose your own pipelines. Components are designed to be small so you should be able to re-write them tailored to your own needs if required. Missing a component? You should be able to write one yourself and hook into the rest of the ecosystem. Write your own problem/domain-specific layer on top of Occurrent.
* Since you know that events are stored as Cloud Events even in the database you can use the database to your advantage. For example, you can create custom indexes used for fast and fully consistent domain queries directly on an event stream (or even multiple streams).