Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
459 commits
Select commit Hold shift + click to select a range
a2f27e3
Merge pull request #62 from prdoyle/polyfill-writes
prdoyle Mar 15, 2025
c623f4f
Remove obsolete polyfill info from docs
prdoyle Mar 16, 2025
0172e03
Add Polyfill to glossary
prdoyle Mar 16, 2025
b38d215
Merge pull request #64 from prdoyle/docs
prdoyle Mar 16, 2025
c5d8e6c
Modularize
prdoyle Mar 16, 2025
bf20ef1
Merge pull request #65 from prdoyle/modules
prdoyle Mar 16, 2025
66a00d6
Mention SQL in main README
prdoyle Mar 16, 2025
b0f3cbf
Merge branch 'develop' into develop
prdoyle Mar 16, 2025
194915f
Merge pull request #66 from prdoyle/develop
prdoyle Mar 16, 2025
aa2165d
Revert "Modularize"
prdoyle Mar 16, 2025
1b891ca
Merge pull request #67 from boskworks/revert-65-modules
prdoyle Mar 16, 2025
fa08377
Support Cache-Control: no-cache in ReadContextFilter.
prdoyle Mar 23, 2025
2860fa4
Javadocs
prdoyle Mar 22, 2025
1282113
Silence warnings from tests
prdoyle Mar 24, 2025
4bbb7e0
Merge pull request #69 from prdoyle/cache-control-flush
prdoyle Mar 24, 2025
5dcb1c3
Rename StateTreeSerializer
prdoyle Mar 25, 2025
40e2de2
Merge pull request #70 from prdoyle/rename-serializer
prdoyle Mar 25, 2025
e79bd04
Fix stale comment
prdoyle Mar 29, 2025
541f7d6
Move diagnosticContext from rootRef to boskInfo.
prdoyle Mar 29, 2025
cc8382f
Document the fixed nature of the sub-objects
prdoyle Mar 29, 2025
77f2fc6
Merge pull request #71 from prdoyle/move-diagnostics
prdoyle Mar 29, 2025
4ba7b34
Add domain-only tests to DriverConformanceTest
prdoyle Apr 4, 2025
4073ab3
Merge pull request #73 from prdoyle/domain-only
prdoyle Apr 4, 2025
1916e97
Remove linked-map JSON serialization.
prdoyle Apr 5, 2025
a830d83
Tidy up JsonNodeSurgeon
prdoyle Apr 5, 2025
61490ba
Merge pull request #74 from prdoyle/no-linked-maps
prdoyle Apr 5, 2025
8441ad5
Rename Spring maintenance-path setting
prdoyle Apr 5, 2025
1cb27ee
Describe intent of maintenance endpoints
prdoyle Apr 5, 2025
0b893d6
Merge pull request #75 from prdoyle/maintenance-path
prdoyle Apr 5, 2025
4c5cf0f
High-res bosk logo
prdoyle Apr 5, 2025
c3a9e7a
Reindent TypeValidationTest
prdoyle Apr 5, 2025
c1e7e65
Minor cleanup in PathCompiler
prdoyle Apr 5, 2025
d0daa43
Support for primitives
prdoyle Apr 5, 2025
52ea8cd
Accept suggestion from copilot.
prdoyle Apr 5, 2025
d732786
Merge pull request #77 from prdoyle/primitives
prdoyle Apr 5, 2025
c3a9279
Remove compilerArg "-parameters"
prdoyle Apr 5, 2025
ef2984a
Merge pull request #78 from prdoyle/cleanup
prdoyle Apr 5, 2025
fb1e827
Remove accidental mongo dependency
prdoyle Apr 10, 2025
699a0f0
Upgrade to gradle 8.13
prdoyle Apr 10, 2025
e8fbd1c
Comment out pitest.
prdoyle Apr 10, 2025
cbeaa0c
Fix test: OptionalEntity should have Optional fields
prdoyle Apr 10, 2025
63995f6
Fix and test nested side tables.
prdoyle Apr 10, 2025
7333de8
Use equals instead of !=
prdoyle Apr 10, 2025
109a589
Merge pull request #80 from prdoyle/nested-domain
prdoyle Apr 10, 2025
b71bfaa
Rename spring-boot-3 to spring-boot.
prdoyle Apr 13, 2025
0ec9c46
Merge pull request #83 from prdoyle/move-spring-boot
prdoyle Apr 13, 2025
e6a51a2
Link central.sonatype.com from README.md
boskworks Apr 17, 2025
9379c22
Refactor: rename HookScanner.
prdoyle Apr 19, 2025
b999335
Virtual threads to isolate ThreadLocals in hooks.
prdoyle Apr 19, 2025
ead5361
Merge pull request #84 from prdoyle/tidy-hooks
prdoyle Apr 19, 2025
598440b
Fixup tombstone message for bosk-spring-boot-3
prdoyle Apr 19, 2025
98085a1
Merge pull request #85 from prdoyle/tombstone
prdoyle Apr 19, 2025
bd64346
Add registrar factory to Bosk constructor
prdoyle Apr 19, 2025
aa5af0a
Merge pull request #87 from prdoyle/registrar
prdoyle Apr 19, 2025
862fe7b
BoskDiagnosticContext.withReplacedPrefix.
prdoyle Mar 22, 2025
7cd064b
Initial OTel context propagation
prdoyle Mar 24, 2025
fe8dbd3
Merge pull request #86 from prdoyle/otel
prdoyle Apr 19, 2025
0078960
Javadoc tweaks
prdoyle Apr 26, 2025
224ca7a
Minor refactor of Reference.truncatedTo
prdoyle Apr 26, 2025
af3f787
Add Bosk.simple factory method
prdoyle Apr 26, 2025
b157d2f
requireNonNull
prdoyle Apr 26, 2025
e6a7035
Merge pull request #88 from prdoyle/tweaks
prdoyle Apr 26, 2025
482e45e
Link to works.bosk namespace in README
boskworks Apr 27, 2025
1d7b835
Bump logback for CVE-2024-12798
prdoyle May 4, 2025
9647452
Merge pull request #89 from prdoyle/bump
prdoyle May 4, 2025
9437f89
Simplify gradle setup.
prdoyle May 4, 2025
fc9feca
Bump spring boot plugin
prdoyle May 4, 2025
8547b6d
Spotless
prdoyle May 10, 2025
d45e3cf
Sort libs.version.toml.
prdoyle May 10, 2025
a8ac2e0
Refactor: split main vs test dependencies
prdoyle May 10, 2025
a0e1bb8
Merge pull request #90 from prdoyle/regradle
prdoyle May 10, 2025
78a1885
Move `group` to top level in build.gradle.
prdoyle May 10, 2025
c1b9ee6
Merge pull request #91 from prdoyle/fix-publish
prdoyle May 10, 2025
3b4c5fe
Try applying 'group' to allprojects
prdoyle May 10, 2025
1dc66dc
Merge pull request #92 from prdoyle/fix2-publish
prdoyle May 10, 2025
53ee6f8
Remove some obsolete javadocs
prdoyle May 14, 2025
4cf36f3
Fix Jaeger all-in-one setup
prdoyle May 22, 2025
e6dd2b0
Factory for ForwardingDriver.
prdoyle May 23, 2025
f2baf15
Case-insensitive check for Cache-Control header
prdoyle May 23, 2025
bf1b210
Messing with otel and Jaeger
prdoyle May 23, 2025
740a5cf
Tweak readme wording
prdoyle May 23, 2025
c4dcd02
Merge pull request #93 from prdoyle/tweaks
prdoyle May 23, 2025
b9357db
Cleanup: remove unused var
prdoyle May 23, 2025
5d116d6
Create DriverOperation for ReportingDriver.
prdoyle May 23, 2025
a722fff
Fix: don't fail DriverStateVerifier on nops
prdoyle May 23, 2025
ab049a9
Fix: use flushListener!
prdoyle May 23, 2025
d003470
Merge pull request #94 from prdoyle/odds-and-ends
prdoyle May 23, 2025
4059e27
ReadContextFilterTest
prdoyle May 23, 2025
8472956
Merge pull request #95 from prdoyle/read-context-filter
prdoyle May 23, 2025
be939a6
Bump ASM to support Java 24.
prdoyle Jun 21, 2025
cd9efaa
Merge pull request #96 from prdoyle/bump-asm
prdoyle Jun 21, 2025
63b14d1
Remove unused spotbugs.annotations library
prdoyle Jun 21, 2025
b1b4071
Improve error handling in HookScanner
prdoyle Jun 21, 2025
acc0350
Merge pull request #97 from prdoyle/hook-scanner-error-messages
prdoyle Jun 21, 2025
8557967
Create dependabot.yml
boskworks Jun 22, 2025
16f044a
Bump testcontainers from 1.20.4 to 1.21.2
dependabot[bot] Jun 22, 2025
fe04068
Bump io.opentelemetry:opentelemetry-sdk from 1.48.0 to 1.51.0
dependabot[bot] Jun 22, 2025
c1eaba7
Bump org.xerial:sqlite-jdbc from 3.49.1.0 to 3.50.1.0
dependabot[bot] Jun 22, 2025
e840cdd
Bump com.github.spotbugs from 6.1.2 to 6.2.0
dependabot[bot] Jun 22, 2025
ccc3a23
Merge pull request #98 from boskworks/dependabot/gradle/testcontainer…
boskworks Jun 22, 2025
97de385
Merge pull request #100 from boskworks/dependabot/gradle/org.xerial-s…
boskworks Jun 22, 2025
e7e9cbb
Merge pull request #99 from boskworks/dependabot/gradle/io.openteleme…
boskworks Jun 22, 2025
db29a14
Merge pull request #102 from boskworks/dependabot/gradle/com.github.s…
boskworks Jun 22, 2025
7e00e51
Bump hamcrest from 2.2 to 3.0
dependabot[bot] Jun 22, 2025
fcebe43
Bump io.spring.dependency-management from 1.1.3 to 1.1.7
dependabot[bot] Jun 22, 2025
f03828e
Bump com.zaxxer:HikariCP from 6.2.1 to 6.3.0
dependabot[bot] Jun 22, 2025
e6122a7
Bump org.slf4j:slf4j-api from 2.0.13 to 2.0.17
dependabot[bot] Jun 22, 2025
9c34bf9
Merge pull request #104 from boskworks/dependabot/gradle/io.spring.de…
boskworks Jun 22, 2025
e2524a6
Merge pull request #106 from boskworks/dependabot/gradle/org.slf4j-sl…
boskworks Jun 22, 2025
63793a9
Merge pull request #105 from boskworks/dependabot/gradle/com.zaxxer-H…
boskworks Jun 22, 2025
fe28ad0
Merge pull request #103 from boskworks/dependabot/gradle/hamcrest-3.0
boskworks Jun 22, 2025
a6c5049
Group all dependabot updates
prdoyle Jun 22, 2025
2918e39
Bump to Gradle 8.14
prdoyle Jun 22, 2025
fec1566
Merge pull request #108 from prdoyle/group-dependabot-updates
prdoyle Jun 22, 2025
a84233b
Peel off dependabot groups for spring-boot and junit.
prdoyle Jun 22, 2025
f006257
Merge pull request #110 from prdoyle/dependabot-groups
boskworks Jun 22, 2025
331d351
Bump the ordinary-dependencies group with 10 updates
dependabot[bot] Jun 22, 2025
edff91c
Implement new methods of TransactionalCollection
prdoyle Jun 22, 2025
156b031
Merge pull request #113 from boskworks/dependabot/gradle/ordinary-dep…
boskworks Jun 22, 2025
a0f904b
Silence warning in example-hello/build.gradle
prdoyle Jun 22, 2025
28eff07
Put spring-boot and junit in one dependabot group
prdoyle Jun 22, 2025
f3e61f6
Merge pull request #116 from prdoyle/tweak-dependabot
prdoyle Jun 22, 2025
e49c682
Fix mongo warning on nullability annotations
prdoyle Jun 26, 2025
0d98af2
Gradle syntax fix
prdoyle Jun 26, 2025
b7a4f67
Make some classes final to avoid this-escape warning
prdoyle Jun 26, 2025
975fb82
Remove accidental javadocs-style comment
prdoyle Jun 26, 2025
438f5ad
Suppress a couple of warnings in tests
prdoyle Jun 26, 2025
88c51ff
Bump Postgres version for testing
prdoyle Jun 27, 2025
df11e26
Upgrade setup-gradle to v4
prdoyle Jun 27, 2025
199f958
Merge pull request #120 from prdoyle/reduce-warnings
boskworks Jun 27, 2025
9d1ec02
Refactor: encapsulate setConnectionCut
prdoyle Jun 27, 2025
7632ae2
Refactor: stop using deprecated ContainerProxy
prdoyle Jun 27, 2025
e77fa10
Use MongoDBContainer
prdoyle Jun 27, 2025
b9a84a1
Bump toxiproxy
prdoyle Jun 27, 2025
c969789
Move off deprecated Spotless indentWithTabs
prdoyle Jun 27, 2025
ff6ef81
Merge pull request #121 from prdoyle/fix-testcontainers-warnings
prdoyle Jun 27, 2025
d599234
Bump the ordinary-dependencies group with 2 updates
dependabot[bot] Jun 27, 2025
e8853af
Merge pull request #123 from boskworks/dependabot/gradle/ordinary-dep…
prdoyle Jun 27, 2025
42c5daf
Remove deprecateed bosk-spring-boot-3
prdoyle Jun 28, 2025
5bdaabd
Merge pull request #124 from prdoyle/remove-spring-boot-3
prdoyle Jun 28, 2025
4a25e85
Remove unnecessary junit.engine dependencies
prdoyle Jun 28, 2025
bfe0fa8
Bump the testing-dependencies group with 7 updates
dependabot[bot] Jun 23, 2025
ecda616
Align junit launcher and engine versions
prdoyle Jun 28, 2025
7b2b36a
Merge pull request #125 from prdoyle/fix-junit
prdoyle Jun 28, 2025
cc5cc6b
Bump org.junit:junit-bom in the testing-dependencies group
dependabot[bot] Jun 28, 2025
5a1a701
Merge pull request #126 from boskworks/dependabot/gradle/testing-depe…
prdoyle Jun 28, 2025
aa5e8dc
Bump the ordinary-dependencies group with 7 updates
dependabot[bot] Jun 30, 2025
6a681b4
Use lib-testing in all bosk-* subprojects.
prdoyle Jun 30, 2025
5662e66
Suppress replay warnings in tests
prdoyle Jun 30, 2025
ede0c7b
Merge pull request #128 from prdoyle/fix-logging
prdoyle Jun 30, 2025
88013ea
Elaborate on comment
prdoyle Jul 1, 2025
82bcac4
Move off deprecated ArgumentsProvider
prdoyle Jul 1, 2025
e5f3f61
Refactor: move MDC to bosk-core.
prdoyle Jul 1, 2025
2ab5e57
Add MDC to SqlDriverImpl
prdoyle Jul 1, 2025
001989c
Suppress expected logs in SqlDriverDurabilityTest
prdoyle Jul 1, 2025
835147b
Merge pull request #129 from prdoyle/more-cleanup
prdoyle Jul 1, 2025
6f23f25
Merge pull request #127 from boskworks/dependabot/gradle/ordinary-dep…
prdoyle Jul 1, 2025
542e2fc
JDK24 doesn't like Unsafe one bit
prdoyle Jul 1, 2025
1bd84b0
Prevent warning from SQLite JDBC
prdoyle Jul 1, 2025
65bb43a
Merge pull request #130 from prdoyle/suppress-lombok-warnings
prdoyle Jul 1, 2025
aa07589
Bump the ordinary-dependencies group across 1 directory with 10 updates
dependabot[bot] Jul 28, 2025
1f8f22e
Merge pull request #134 from boskworks/dependabot/gradle/ordinary-dep…
prdoyle Aug 1, 2025
24cfe73
Bump the testing-dependencies group across 1 directory with 5 updates
dependabot[bot] Aug 1, 2025
c7fa990
Merge pull request #135 from boskworks/dependabot/gradle/testing-depe…
prdoyle Aug 1, 2025
403cbd2
A few cleanups suggested by SonarQube
prdoyle Jul 2, 2025
f0e48d6
Get Manifest codec once
prdoyle Aug 1, 2025
f41773d
Reduce redundant test parameters to speed up tests
prdoyle Aug 2, 2025
53008c9
Common up DOMAIN_FIELD_NAME
prdoyle Aug 2, 2025
6b73a67
Merge pull request #136 from prdoyle/tweak
prdoyle Aug 2, 2025
0e68d97
MongoDriverSettings.timescaleMS.
prdoyle Aug 2, 2025
4195259
Set Mongo timescaleMS to one second.
prdoyle Aug 2, 2025
3b49cc9
Merge pull request #137 from prdoyle/mongo-timeouts
prdoyle Aug 2, 2025
d6caf6d
Change to the OSSRH staging compatibility servers.
prdoyle Aug 3, 2025
2177b6b
Merge pull request #138 from prdoyle/sonatype-central-portal
prdoyle Aug 3, 2025
0851e17
Oops, missed a spot for central portal
prdoyle Aug 3, 2025
d21e23b
Merge pull request #139 from prdoyle/sonatype-central-portal
prdoyle Aug 3, 2025
2470e79
Upgradle to 9.
prdoyle Aug 3, 2025
6dedb6b
Don't warn on disconnect if driver is closed
prdoyle Aug 3, 2025
2998f24
Close receiver first in MainDriver close.
prdoyle Aug 3, 2025
3d9c802
Merge pull request #140 from prdoyle/gradle9
prdoyle Aug 3, 2025
a5fb1f8
Bump the ordinary-dependencies group with 2 updates
dependabot[bot] Aug 3, 2025
2edc998
Merge pull request #141 from boskworks/dependabot/gradle/ordinary-dep…
prdoyle Aug 3, 2025
b1d8d27
Remove unnecessary dependabot groups.
prdoyle Aug 4, 2025
5c5163f
Merge pull request #142 from prdoyle/simplify-dependabot
prdoyle Aug 4, 2025
f4bfc3e
Eliminate asm-util dependency
prdoyle Aug 6, 2025
ca01f9c
Merge pull request #144 from prdoyle/no-asm-utils
prdoyle Aug 6, 2025
1ad99ac
Remove redundant mavenCentral repo
prdoyle Aug 4, 2025
63e9b89
Move bosk-testing into its own package.
prdoyle Aug 4, 2025
26f071a
Minor fixes to dependencies.
prdoyle Aug 4, 2025
f185b7e
Merge pull request #147 from prdoyle/module-prep
prdoyle Aug 7, 2025
2aadc5b
Enable gradle build cache
prdoyle Aug 7, 2025
70502ad
works.bosk.annotations module
prdoyle Aug 4, 2025
ef3136c
works.bosk.core module
prdoyle Aug 4, 2025
929ee87
works.bosk.jackson module
prdoyle Aug 4, 2025
c557234
works.bosk.logback module
prdoyle Aug 4, 2025
beb9cff
works.bosk.opentelemetry module
prdoyle Aug 4, 2025
e5c53fb
works.bosk.mongo module
prdoyle Aug 4, 2025
38e99c1
works.bosk.spring.boot module
prdoyle Aug 4, 2025
1be7278
works.bosk.sql module
prdoyle Aug 4, 2025
caf2329
Module tweaks to reduce warnings
prdoyle Aug 4, 2025
ab3e63d
Ignore warnings about requiring automatic modules.
prdoyle Aug 7, 2025
31fb8f3
Rearrange bosk-mongo packages to support modules
prdoyle Aug 7, 2025
d07b993
require transitive in bosk-spring-boot
prdoyle Aug 7, 2025
085f1c2
WAIT longer. I saw a failure
prdoyle Aug 7, 2025
91ea023
Futz with MongoDriver exceptions.
prdoyle Aug 7, 2025
d1e46f2
Tweak UNINITIALIZED_COLLECTION_LOGGER_NAME
prdoyle Aug 7, 2025
0623d41
Merge pull request #148 from prdoyle/modules
prdoyle Aug 7, 2025
dad31c1
Stop using unnecessary concatenation in logs
prdoyle Aug 7, 2025
d776e3a
Comment: explain why we don't rethrow
prdoyle Aug 7, 2025
71845ea
Merge pull request #149 from prdoyle/futz
prdoyle Aug 7, 2025
000ebc4
Support BindingEnvironment in ReferenceBuilder
prdoyle Aug 8, 2025
d80b37b
Merge pull request #151 from prdoyle/buildReferences-env
prdoyle Aug 8, 2025
8718cd0
Restore CurriedFields in ClassBuilder.
prdoyle Aug 9, 2025
2e2384d
Document tail releases.
prdoyle Aug 9, 2025
a258a3d
Merge branch 'memory-leak' into main
prdoyle Aug 9, 2025
2fc9618
Merge pull request #153 from prdoyle/memory-leak-main
prdoyle Aug 9, 2025
263574b
Proper interrupt handling in ReadContextFilter.
prdoyle Aug 17, 2025
5358a03
Merge pull request #158 from prdoyle/fix-interrupt-main
prdoyle Aug 17, 2025
fc661fe
Many code cleanups suggested by static analysis
prdoyle Aug 17, 2025
c88077f
Bump com.zaxxer:HikariCP from 7.0.0 to 7.0.2
dependabot[bot] Aug 25, 2025
d02cd3b
Various minor cleanups
prdoyle Sep 4, 2025
382314f
Bump org.jooq:jooq from 3.20.5 to 3.20.7
dependabot[bot] Sep 15, 2025
8dfb7ea
Timescale constants
prdoyle Sep 19, 2025
8c8f3d8
Fix spotbugs failure
prdoyle Sep 20, 2025
a0cc191
Merge pull request #170 from prdoyle/mucho-cleanup
prdoyle Sep 20, 2025
4d2aa25
Refactor: change BoskLogFilter into a TurboFilter.
prdoyle Sep 19, 2025
1bbe212
Merge pull request #164 from boskworks/dependabot/gradle/com.zaxxer-H…
prdoyle Sep 20, 2025
76d53da
Merge pull request #171 from prdoyle/turbofilter
prdoyle Sep 20, 2025
16f3dd8
Merge pull request #168 from boskworks/dependabot/gradle/org.jooq-joo…
prdoyle Sep 20, 2025
eae03b6
Group dependabot updates into one PR
prdoyle Sep 20, 2025
b79fa94
Merge pull request #177 from prdoyle/group-dependabot
prdoyle Sep 20, 2025
7d2b934
jackson bom
prdoyle Sep 20, 2025
e2b3b14
Merge pull request #179 from prdoyle/jackson-bom
prdoyle Sep 20, 2025
3902e80
Bump the dependencies group with 13 updates
dependabot[bot] Sep 20, 2025
d1ea3c0
Mongo fix due to upgrade
prdoyle Sep 20, 2025
28e4d57
Merge pull request #180 from boskworks/dependabot/gradle/dependencies…
boskworks Sep 20, 2025
5a6c232
Tweaks to DemultiplexerTest
prdoyle Sep 20, 2025
954bcf4
Optimize imports
prdoyle Sep 20, 2025
666f6f5
Merge pull request #181 from prdoyle/tweaks
prdoyle Sep 20, 2025
2ae9275
Initial bosk-junit with @InjectedTest
prdoyle Sep 24, 2025
41b2e26
Migrate from ParametersByName to InjectedTest
prdoyle Sep 26, 2025
1f7e86d
Merge pull request #182 from prdoyle/bosk-junit
prdoyle Sep 26, 2025
ac0576f
Java 25
prdoyle Sep 28, 2025
c20f474
Merge pull request #183 from prdoyle/java-25
prdoyle Sep 28, 2025
e16be0a
Comments
prdoyle Sep 28, 2025
1684da5
Refactor: chmod -x *.java
prdoyle Sep 28, 2025
e3bc3aa
Bump the dependencies group with 3 updates
dependabot[bot] Sep 28, 2025
ab56bab
Merge pull request #184 from boskworks/dependabot/gradle/dependencies…
prdoyle Sep 28, 2025
4d49d86
Merge pull request #187 from prdoyle/tweaks
prdoyle Sep 28, 2025
2d4a02e
Remove ASM Type from ClassBuilder interface
prdoyle Sep 28, 2025
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
15 changes: 15 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,15 @@
# To get started with Dependabot version updates, you'll need to specify which
# package ecosystems to update and where the package manifests are located.
# Please see the documentation for all configuration options:
# https://docs.github.com/code-security/dependabot/dependabot-version-updates/configuration-options-for-the-dependabot.yml-file

version: 2
updates:
- package-ecosystem: "gradle" # See documentation for possible values
directory: "/" # Location of package manifests
schedule:
interval: "weekly"
groups:
dependencies:
patterns:
- "*"
9 changes: 5 additions & 4 deletions .github/workflows/build-and-test.yml
Original file line number Diff line number Diff line change
Expand Up @@ -20,15 +20,16 @@ jobs:

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: temurin
# First version is for Bosk to use, and the second is for Gradle
java-version: |
25
17

- uses: gradle/actions/setup-gradle@v3
- uses: gradle/actions/setup-gradle@v4
with:
cache-read-only: false # OR: ${{ github.ref != 'refs/heads/develop' }}

Expand Down
16 changes: 6 additions & 10 deletions .github/workflows/release.yml
Original file line number Diff line number Diff line change
Expand Up @@ -16,28 +16,24 @@ jobs:

steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0

- uses: actions/setup-java@v4
with:
java-version: '17'
distribution: temurin
server-id: ossrh
server-username: ${{ secrets.OSSRH_USERNAME }}
server-password: ${{ secrets.OSSRH_TOKEN }}
gpg-private-key: ${{ secrets.GPG_PRIVATE_KEY }}
# First version is for Bosk to use, and the second is for Gradle
java-version: |
25
17

- uses: gradle/actions/setup-gradle@v3
- uses: gradle/actions/setup-gradle@v4

- name: Run Gradle Publish
run: |
./gradlew spotlessCheck spotBugsMain test publish \
./gradlew smoke publishToSonatype closeAndReleaseSonatypeStagingRepository \
-Pversion="${{github.event.release.tag_name}}" \
--info
env:
ORG_GRADLE_PROJECT_ossrhUsername: ${{secrets.OSSRH_USERNAME}}
ORG_GRADLE_PROJECT_ossrhPassword: ${{secrets.OSSRH_TOKEN}}
ORG_GRADLE_PROJECT_signingKey: ${{secrets.GPG_PRIVATE_KEY}}
ORG_GRADLE_PROJECT_signingPassword: ${{secrets.GPG_PASSWORD}}

147 changes: 45 additions & 102 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,102 +1,55 @@
![Release status](https://github.com/venasolutions/bosk/actions/workflows/release.yml/badge.svg)
[![Maven Central](https://img.shields.io/maven-central/v/io.vena/bosk-core)](https://mvnrepository.com/artifact/io.vena/bosk-core)
![Release status](https://github.com/boskworks/bosk/actions/workflows/release.yml/badge.svg)
[![Maven Central](https://img.shields.io/maven-central/v/works.bosk/bosk-core)](https://central.sonatype.com/namespace/works.bosk)

# Bosk

![Three inquisitive cartoon trees with eyes](/art/bosk-evergreen-icon.png)
![Three inquisitive cartoon trees with eyes](/art/bosk-3trees-wide-small.png)

Bosk is a state management library for developing distributed application control-plane logic.
It's a bit like server-side Redux for Java, but without the boilerplate code.
(No selectors, no action objects, no reducers.)
Bosk is a Java library for state management in distributed systems.
It eases the journey from a simple standalone application to a high-availability clustered replica set
by supporting reactive, idempotent, deterministic control logic design patterns,
using an immutable in-memory state tree for ultra-fast reads (~50ns).

Bosk eases the transition from a standalone application to a clustered high-availability replica set,
by supporting a programming style that minimizes the surprises encountered during the transition.
Bosk encourages reactive event-triggered closed-loop control logic
based on a user-defined immutable state tree structure,
and favours idempotency and determinism.
First, you start with just the `bosk-core` library, writing your application's control plane logic using Bosk.
The the built-in integrations with things like Jackson and Spring Boot help you get your application up and running.

State is kept in memory, making reads extremely fast (on the order of 50ns).

Replication is achieved by activating an optional [MongoDB module](bosk-mongo), meaning the hard work of
change propagation, ordering, durability, consistency, atomicity, and observability,
Then, when the time comes to turn your standalone application into a high-availability replica set,
you can bring in the optional [MongoDB library](bosk-mongo).
The hard work of change propagation, ordering, durability, consistency, atomicity, and observability,
as well as fault tolerance, and emergency manual state inspection and modification,
is all delegated to MongoDB: a well-known, reliable, battle-hardened codebase.
You don't need to trust Bosk to get all these details right:
You don't even need to trust Bosk to get all these details right:
all we do is send updates to MongoDB, and maintain the in-memory replica by following the MongoDB change stream.

If you'd rather use SQL instead of MongoDB, there's a [SQL library](bosk-sql) too.

## Documentation
- [User's Guide](docs/USERS.md)

## Getting Started

### Build settings

First, be sure you're compiling Java with the `-parameters` argument.

In Gradle:

```
dependencies {
compileJava {
options.compilerArgs << '-parameters'
}

compileTestJava {
options.compilerArgs << '-parameters'
}
}
```

In Maven:

```
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<configuration>
<compilerArgs>
<arg>-parameters</arg>
</compilerArgs>
</configuration>
</plugin>
```

### Standalone example

The [bosk-core](bosk-core) library is enough to create a `Bosk` object and start writing your application.

The library works particularly well with Java records.
You can define your state tree's root node as follows:
You can define your state tree's root node as a java Record, like this:

```
import io.vena.bosk.StateTreeNode;
import io.vena.bosk.Identifier;
import works.bosk.StateTreeNode;
import works.bosk.Identifier;

public record ExampleState (
// Add fields here as you need them
String name
) implements StateTreeNode {}
```

You can also use classes, especially if you're using Lombok:

```
@Value
@Accessors(fluent = true)
public class ExampleState implements StateTreeNode {
// Add fields here as you need them
String name;
}
```

Now declare your singleton `Bosk` class to house and manage your application state:

```
import io.vena.bosk.Bosk;
import io.vena.bosk.DriverFactory;
import io.vena.bosk.Reference;
import io.vena.bosk.annotations.ReferencePath;
import io.vena.bosk.exceptions.InvalidTypeException;
import works.bosk.Bosk;
import works.bosk.DriverFactory;
import works.bosk.Reference;
import annotations.works.bosk.ReferencePath;
import exceptions.works.bosk.InvalidTypeException;

@Singleton // You can use your framework's dependency injection for this
public class ExampleBosk extends Bosk<ExampleState> {
Expand All @@ -121,15 +74,15 @@ public class ExampleBosk extends Bosk<ExampleState> {

// Start off simple
private static DriverFactory<ExampleState> driverFactory() {
return Bosk::simpleDriver;
return Bosk.simpleDriver();
}
}
```

You create an instance of `ExampleBosk` at initialization time,
typically using your application framework's dependency injection system.

To read state, acquire a `ReadContext`:
To read state, acquire a `ReadContext`, providing access to a lightweight immutable snapshot of your state tree:

```
try (var __ = bosk.readContext()) {
Expand All @@ -141,13 +94,16 @@ A read context is intended to be coarse-grained, for example covering an entire
giving you "snapshot-at-start" semantics and protecting you from race conditions.
It is an antipattern to use many small read contexts during the course of a single operation.

To modify state, use the `BoskDriver` interface:
If you're using Spring Boot 3, you can bring in `bosk-spring-boot`
and set the `bosk.web.maintenance-path` property to get an immediate HTTP REST API to view and edit your state tree.

To modify state programmatically, use the `BoskDriver` interface:

```
bosk.driver().submitReplacement(bosk.refs.name(), "everybody");
```

During your application's initialization, register a hook to perform an action whenever state changes:
During your application's initialization, you can register a callback hook to perform an action whenever state changes:

```
bosk.registerHook("Name update", bosk.refs.name(), ref -> {
Expand All @@ -164,15 +120,15 @@ Use the same version number for all packages.

When you're ready to turn your standalone app into a replica set,
add [bosk-mongo](bosk-mongo) as a dependency
and change your Bosk `driverFactory` method to substitute `MongoDriver` in place of `Bosk::simpleDriver`:
and change your Bosk `driverFactory` method to substitute `MongoDriver` in place of `Bosk.simpleDriver()`:

```
import com.mongodb.MongoClientSettings;
import com.mongodb.ReadConcern;
import com.mongodb.WriteConcern;
import io.vena.bosk.drivers.mongo.BsonPlugin;
import io.vena.bosk.drivers.mongo.MongoDriver;
import io.vena.bosk.drivers.mongo.MongoDriverSettings;
import mongo.drivers.works.bosk.BsonSerializer;
import mongo.drivers.works.bosk.MongoDriver;
import mongo.drivers.works.bosk.MongoDriverSettings;

...
private static DriverFactory<ExampleState> driverFactory() {
Expand All @@ -185,20 +141,20 @@ import io.vena.bosk.drivers.mongo.MongoDriverSettings;

// For advanced usage, you'll want to inject this object,
// but for getting started, we can just create one here.
BsonPlugin bsonPlugin = new BsonPlugin();
BsonSerializer bsonSerializer = new BsonSerializer();

return MongoDriver.factory(
clientSettings,
driverSettings,
bsonPlugin);
bsonSerializer);
}
```

To run this, you'll need a MongoDB replica set.
You can run a single-node replica set using the following `Dockerfile`:

```
FROM mongo:4.4
FROM mongo:7.0
RUN echo "rs.initiate()" > /docker-entrypoint-initdb.d/rs-initiate.js
CMD [ "mongod", "--replSet", "rsLonesome", "--port", "27017", "--bind_ip_all" ]
```
Expand All @@ -215,30 +171,17 @@ provide integrations with other technologies.

The subprojects are listed in [settings.gradle](settings.gradle), and each has its own `README.md` describing what it is.

### Compiler flags

Ensure `javac` is supplied the `-parameters` flag.

This is required because,
for each class you use to describe your Bosk state, the "system of record" for its structure is its constructor.
For example, you might define a class with a constructor like this:

```
public Member(Identifier id, String name) {...}
```

Based on this, Bosk now knows the names and types of all the "properties" of your object.
For this to work smoothly, the parameter names must be present in the compiled bytecode.
### Versioning

### Gradle setup
In the long run, we'll use the usual semantic versioning.

Each project has its own `build.gradle`.
Common settings across projects are in custom plugins under the [buildSrc directory](buildSrc/src/main/groovy).
For 0.x.y releases, all bets are off, and no backward compatibility is guaranteed.

### Versioning
Releases with four numbers, like a.b.c.d, are "tail" releases containing
important fixes to old releases.

In the long run, we'll use the usual semantic versioning.
### Logo

For the 0.x.y releases, treat x as a major release number.
Logo was derived from this public-domain image: https://openclipart.org/detail/44023/small-trees-bushes

For the 0.0.x releases, all bets are off, and no backward compatibility is guaranteed.
Modified by Grady Johnson.
Binary file added art/bosk-tree-2k.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
16 changes: 1 addition & 15 deletions bosk-annotations/build.gradle
Original file line number Diff line number Diff line change
@@ -1,15 +1 @@

plugins {
id 'bosk.development'
id 'bosk.maven-publish'
id 'com.github.spotbugs' version '5.1.5'
}

java {
sourceCompatibility = '17'
targetCompatibility = '17'
}

repositories {
mavenCentral()
}
dependencies{}

This file was deleted.

3 changes: 3 additions & 0 deletions bosk-annotations/src/main/java/module-info.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,3 @@
module works.bosk.annotations {
exports works.bosk.annotations;
}
Loading