rahulsom / grooves Goto Github PK
View Code? Open in Web Editor NEWEventSourcing for Java
Home Page: https://rahulsom.github.io/grooves
License: Apache License 2.0
EventSourcing for Java
Home Page: https://rahulsom.github.io/grooves
License: Apache License 2.0
This possibly needs AspectJ support
Please install our new product, Sonatype Lift with advanced features
Depends on #53
Depends on #66
This includes documenting Push Style
This should allow moving off to gradle 4, and eventually support/test java 9.
One line is commented out to show what is broken.
Fixing the redirects should allow uncommenting that line.
This can help users render their own diagrams.
Currently rollups are computed as
departmentEmployeeJoin
.computeSnapshot(id, dateOrVersion)
.flatMap { fromIterator(it.joinedIds) }
.flatMap { employeeQuery.computeSnapshot(it) }
.reduce (new DepartmentSummary()) { rollup, snapshot -> ... }
There isn't much potential to do this additively.
If we can do it differently, and this works, we could try this
departmentEmployeeJoin
.computeSnapshot(id, dateOrVersion)
.flatMap { getAllEventsForAfterDateOrVersion(it.joinedIds, dateOrVersion) }
.reduce (new DepartmentSummary()) {rollup, event -> ... }
The challenge is reducing
A potential solution could be implementing similar annotations to groovy with aspectj.
This allows for testing and documenting RxJava2 in addition to Reactor and RxJava1.
This issue lists Renovate updates and detected dependencies. Read the Dependency Dashboard docs to learn more.
These updates have all been created already. Click a checkbox below to force a retry/rebase of any.
org.apache.groovy:groovy-xml
, org.apache.groovy:groovy-json
, org.apache.groovy:groovy-dateutil
, org.apache.groovy:groovy-all
, org.apache.groovy:groovy
)These are blocked by an existing closed PR and will not be recreated unless you click a checkbox below.
.github/workflows/build.yml
gradle.properties
settings.gradle.kts
com.gradle.enterprise 3.12.4
build.gradle.kts
com.github.rahulsom.waena.root 0.6.1
org.jetbrains.kotlin.jvm 1.8.10
org.jetbrains.kotlin.plugin.allopen 1.8.10
org.jlleitschuh.gradle.ktlint 11.3.1
org.springframework.boot 3.0.4
io.spring.dependency-management 1.1.0
org.sonarqube 4.0.0.2929
me.champeau.buildscan-recipes 0.2.3
com.sourcemuse.mongo 1.0.7
gradle/jacoco.gradle
jacoco 0.8.8
gradle/libs.versions.toml
javax.activation:activation 1.1.1
org.asciidoctor:asciidoctorj 2.5.7
org.aspectj:aspectjrt 1.9.19
org.assertj:assertj-core 3.24.2
org.awaitility:awaitility 4.2.0
commons-beanutils:commons-beanutils 1.9.4
com.google.auto.service:auto-service 1.0.1
com.google.testing.compile:compile-testing 0.21.0
com.google.inject:guice 5.1.0
com.google.guava:guava 31.1-jre
org.apache.groovy:groovy 4.0.9
org.apache.groovy:groovy-all 4.0.9
org.apache.groovy:groovy-dateutil 4.0.9
org.apache.groovy:groovy-json 4.0.9
org.apache.groovy:groovy-xml 4.0.9
com.h2database:h2 2.1.214
javax:javaee-api 8.0.1
javax.xml.bind:jaxb-api 2.3.1
io.openliberty.features:jaxrs-2.1 23.0.0.2
javax.annotation:javax.annotation-api 1.3.2
org.junit.jupiter:junit-jupiter-api 5.9.2
org.junit.jupiter:junit-jupiter-engine 5.9.2
org.junit.jupiter:junit-jupiter-params 5.9.2
org.apache.commons:commons-lang3 3.12.0
org.apache.logging.log4j:log4j-core 2.20.0
org.apache.logging.log4j:log4j-slf4j-impl 2.20.0
ch.qos.logback:logback-classic 1.4.6
org.projectlombok:lombok 1.18.26
com.squareup.okhttp3:okhttp 4.10.0
org.reactivestreams:reactive-streams 1.0.4
io.reactivex:rxjava 1.2.1
io.reactivex:rxjava-reactive-streams 1.2.1
io.reactivex.rxjava2:rxjava 2.2.21
org.slf4j:slf4j-api 2.0.7
org.slf4j:slf4j-simple 2.0.7
org.spockframework:spock-core 2.3-groovy-4.0
org.spockframework:spock-spring 2.3-groovy-4.0
org.jetbrains:annotations 24.0.1
io.spring.asciidoctor:spring-asciidoctor-extensions-block-switch 0.6.1
com.sun.xml.bind:jaxb-core 4.0.2
com.sun.xml.bind:jaxb-impl 4.0.2
com.github.rahulsom:svg-builder 0.5.0
gradle/codenarc/codenarc.gradle
codenarc 3.2.0
grooves-api/build.gradle.kts
grooves-core/build.gradle.kts
dev.jacomet.logging-capabilities 0.+
io.freefair.aspectj.post-compile-weaving 6.6.3
grooves-diagrams/build.gradle.kts
io.miret.etienne.sass 1.4.2
grooves-docs/build.gradle.kts
org.ajoberstar.git-publish 2.1.3
org.asciidoctor.jvm.convert 3.3.2
grooves-example-javaee/build.gradle
io.openliberty.tools.gradle.Liberty 3.5.2
grooves-example-pushstyle/build.gradle
nu.studer.jooq 8.1
org.flywaydb.flyway 9.16.0
grooves-example-springboot-jpa/build.gradle.kts
grooves-example-springboot-kotlin/build.gradle.kts
io.projectreactor.addons:reactor-test 3.0.7.RELEASE
grooves-example-test/build.gradle.kts
xerces:xercesImpl 2.12.2
org.apache.httpcomponents:httpclient 4.5.14
grooves-groovy/build.gradle.kts
grooves-java/build.gradle.kts
grooves-types/build.gradle.kts
gradle/wrapper/gradle-wrapper.properties
gradle 7.6.1
grooves-docs/src/docs/asciidoc/docinfo-footer.html
jquery 3.6.4@sha512-pumBsjNRGGqkPzKHndZMaAG+bir374sORyzM3uulLV14lN5LyykqNk8eEeUlUkB3U0M4FApyaHraT65ihJhDpQ==
grooves-site/index.html
jquery 3.6.4@sha512-6DC1eE3AWg1bgitkoaRM1lhY98PxbMIbhgYCGV107aZlyzzvaWCW1nJW2vDuYQm06hXrW0As6OGKcIaAVWnHJw==
popper.js 2.11.6@sha512-6UofPqm0QupIL0kzS/UIzekR73/luZdC6i/kXDbWnLOJoqwklBK6519iUnShaYceJ0y4FaiPtX/hRnV/X/xlUQ==
The current ones are very object oriented. Here's my plan for it.
def query = Grooves.temporal().
snapshotsFrom {Date maxTimestamp, AggregateT aggregate ->
? as Publisher<SnapshotT>
}.
eventsFrom {AggregateT aggregate, SnapshotT lastSnapshot, Date snapshotTime ->
? as Publisher<EventT>
}.
onException {Exception e, SnapshotT snapshot, EventT event ->
? as Publisher<EventApplyOutcome>
}.
on(MyFirstEvent.class) {MyFirstEvent event, SnapshotT snapshot ->
? as Publisher<EventApplyOutcome>
}.
on(MySecondEvent.class) {MySecondEvent event, SnapshotT snapshot ->
? as Publisher<EventApplyOutcome>
}.
build()
query.computeSnapshot(aggregate, new Date()).subscribe(...)
Open questions:
Current manual is at https://rahulsom.github.io/grooves/manual/current
https://rahulsom.github.io/grooves needs a landing page.
There is an error with this repository's Renovate configuration that needs to be fixed. As a precaution, Renovate will stop PRs until it is resolved.
Error type: undefined. Note: this is a nested preset so please contact the preset author if you are unable to fix it yourself.
Joins are currently only performed in one example project.
It might be a good idea to perform joins in all projects so they can be documented in all styles.
Currently, we query the events when computing snapshots. A lot of event sourcing frameworks are built around push, i.e. a kafka stream with the event causes snapshots to be computed. There is no turning around and querying the source of truth for the event.
In our case, it would mean, we always precompute snapshots. This reduces the cost of computation at read time. The downside of such a system would be, it won't support reverts.
For some applications, that is not a big problem.
Currently groovydoc is being published and it is empty.
Cobertura is currently being used for some things, and jacoco for others.
Having one tool will help understanding where coverage is needed.
George Harrison will do
A declarative, efficient, and flexible JavaScript library for building user interfaces.
๐ Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. ๐๐๐
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google โค๏ธ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.