From 738f2f59f099ff4ea18fd642d37b53b162b2ded1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Daniel=20G=C3=B6tten?= Date: Fri, 24 Apr 2026 16:01:21 +0200 Subject: [PATCH] Update license information and readme --- .github/workflows/ci.yml | 28 ++ CONTRIBUTING.md | 84 +++++ LICENSE-APACHE | 190 +++++++++++ LICENSE-MIT | 21 ++ MIGRATION_EVALUATION.md | 310 ------------------ README.md | 42 ++- build-logic/build.gradle.kts | 2 + build-logic/settings.gradle.kts | 2 + .../src/main/kotlin/slact.base-lib.gradle.kts | 2 + .../slact.integration-test-lib.gradle.kts | 2 + .../src/main/kotlin/slact.java-lib.gradle.kts | 2 + .../kotlin/slact.use-junit5-lib.gradle.kts | 2 + core/build.gradle.kts | 2 + .../dangoe/concurrent/slact/core/Actor.java | 2 + .../concurrent/slact/core/ActorContext.java | 2 + .../concurrent/slact/core/ActorCreator.java | 2 + .../concurrent/slact/core/ActorHandle.java | 2 + .../slact/core/ActorHandleResolver.java | 2 + .../concurrent/slact/core/ActorPath.java | 2 + .../concurrent/slact/core/ActorRuntime.java | 2 + .../concurrent/slact/core/ActorSpawner.java | 2 + .../concurrent/slact/core/Cancellable.java | 2 + .../concurrent/slact/core/Decision.java | 2 + .../de/dangoe/concurrent/slact/core/Done.java | 2 + .../concurrent/slact/core/FuturePipeOp.java | 2 + .../slact/core/MessageReceiver.java | 2 + .../slact/core/ScheduledExecutor.java | 2 + .../concurrent/slact/core/SlactContainer.java | 2 + .../slact/core/SlactContainerBuilder.java | 2 + .../exception/ActorRegistrationException.java | 2 + .../exception/MessageRejectedException.java | 2 + .../slact/core/exception/SlactException.java | 2 + .../internal/ActiveActorContextHolder.java | 2 + .../slact/core/internal/ActorRegistry.java | 2 + .../slact/core/internal/ActorWrapper.java | 2 + .../core/internal/DefaultSlactContainer.java | 2 + .../slact/core/internal/MailboxItem.java | 2 + .../slact/core/internal/RootActorSpawner.java | 2 + .../slact/core/logging/ActorLogger.java | 2 + .../core/logging/LogTemplateRenderer.java | 2 + .../logging/internal/AbstractActorLogger.java | 2 + .../internal/BraceTemplateRenderer.java | 2 + .../logging/internal/Slf4jActorLogger.java | 2 + .../core/patterns/actors/RoutingActor.java | 2 + .../core/util/concurrent/RichFuture.java | 2 + .../core/util/concurrent/RichFutureImpl.java | 2 + core/src/main/java/module-info.java | 2 + .../slact/core/ActorAsyncResponseTest.java | 2 + .../slact/core/ActorBehaviorTest.java | 2 + .../slact/core/ActorHandleTest.java | 2 + .../core/ActorMessagePropagationTest.java | 2 + .../concurrent/slact/core/ActorPathTest.java | 2 + .../slact/core/ActorPerformanceTest.java | 2 + .../slact/core/ActorSpawningTest.java | 2 + .../slact/core/CoordinatedActorStopTest.java | 2 + .../concurrent/slact/core/DecisionTest.java | 2 + .../slact/core/WordCountActorTest.java | 2 + .../actors/FutureCompletingActorTest.java | 2 + .../patterns/actors/RoutingActorTest.java | 2 + core/src/test/resources/logback-test.xml | 2 + gradle/wrapper/gradle-wrapper.properties | 2 + persistence-jdbc/build.gradle.kts | 2 + .../storage/jdbc/PostgreSqlEventStoreIT.java | 2 + .../jdbc/PostgreSqlPersistentActorIT.java | 2 + ...PostgreSqlSnapshotCapableEventStoreIT.java | 2 + ...reSqlSnapshotCapablePersistentActorIT.java | 2 + .../resources/logback-test.xml | 2 + .../storage/jdbc/HikariConnectionPool.java | 2 + .../storage/jdbc/JdbcConnectionPool.java | 2 + .../persistence/storage/jdbc/JdbcDialect.java | 2 + .../storage/jdbc/JdbcEventStore.java | 2 + .../storage/jdbc/JdbcExceptionTranslator.java | 2 + .../jdbc/JdbcSnapshotCapableEventStore.java | 2 + .../storage/jdbc/PostgreSqlDialect.java | 2 + .../changelog/changes/0001_create_schema.yaml | 2 + .../db/changelog/db.changelog-master.yaml | 2 + persistence-testkit/build.gradle.kts | 2 + .../persistence/testkit/EventStoreSpec.java | 2 + .../testkit/PersistentActorBaseSpec.java | 2 + .../testkit/PersistentActorSpec.java | 2 + .../SnapshotCapableEventStoreSpec.java | 2 + .../SnapshotCapablePersistentActorSpec.java | 2 + persistence/build.gradle.kts | 2 + .../slact/persistence/EventEnvelope.java | 2 + .../slact/persistence/EventLogEntryLike.java | 2 + .../slact/persistence/EventStore.java | 2 + .../slact/persistence/InMemoryEventStore.java | 2 + .../slact/persistence/PartitionKey.java | 2 + .../persistence/PersistenceExtension.java | 2 + .../PersistenceExtensionHolder.java | 2 + .../slact/persistence/PersistentActor.java | 2 + .../persistence/PersistentActorBase.java | 2 + .../SnapshotCapableEventStore.java | 2 + .../SnapshotCapableInMemoryEventStore.java | 2 + .../SnapshotCapablePersistentActor.java | 2 + .../slact/persistence/SnapshotEnvelope.java | 2 + .../persistence/SnapshottingStrategy.java | 2 + .../exception/ConcurrentWriteException.java | 2 + .../exception/PersistenceException.java | 2 + .../exception/RecoveryFailedException.java | 2 + .../exception/SaveFailedException.java | 2 + .../persistence/InMemoryEventStoreTest.java | 2 + .../slact/persistence/PartitionKeyTest.java | 2 + .../PersistenceExtensionHolderTest.java | 2 + .../persistence/PersistentActorTest.java | 2 + ...SnapshotCapableInMemoryEventStoreTest.java | 2 + .../SnapshotCapablePersistentActorTest.java | 2 + .../src/test/resources/logback-test.xml | 2 + settings.gradle.kts | 2 + testkit/build.gradle.kts | 2 + .../core/internal/ActorReadinessResolver.java | 2 + .../concurrent/slact/testkit/Constants.java | 2 + .../slact/testkit/SlactTestContainer.java | 2 + .../testkit/SlactTestContainerExtension.java | 2 + .../slact/testkit/model/ReceivedMessage.java | 2 + .../patterns/actors/CapturingActor.java | 2 + .../actors/FailingOnReceiveActor.java | 2 + 117 files changed, 579 insertions(+), 318 deletions(-) create mode 100644 .github/workflows/ci.yml create mode 100644 CONTRIBUTING.md create mode 100644 LICENSE-APACHE create mode 100644 LICENSE-MIT delete mode 100644 MIGRATION_EVALUATION.md diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml new file mode 100644 index 0000000..29d8699 --- /dev/null +++ b/.github/workflows/ci.yml @@ -0,0 +1,28 @@ +name: CI + +on: + push: + branches: [main] + pull_request: + branches: [main] + +permissions: + contents: read + +jobs: + build: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - uses: gradle/actions/wrapper-validation@v4 + + - uses: actions/setup-java@v4 + with: + distribution: temurin + java-version: "21" + + - uses: gradle/actions/setup-gradle@v4 + + - name: Build and test + run: ./gradlew build :persistence-jdbc:integrationTest --stacktrace diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md new file mode 100644 index 0000000..20f3b8a --- /dev/null +++ b/CONTRIBUTING.md @@ -0,0 +1,84 @@ +# Contributing to slact + +Contributions are welcome! Please open an issue to discuss significant changes before +submitting a pull request. + +--- + +## Branching Strategy + +slact follows a trunk-based branching model with four branch types. All branches are +short-lived except `main`. + +### `main` + +The single long-lived branch. `main` always reflects the latest released or +release-ready state. All work is integrated here via pull requests. + +### `feat/` + +Feature branches for new functionality or enhancements. + +- Branch from `main` +- Merge back into `main` via pull request +- Delete after merge +- Example: `feat/persistent-actor-recovery`, `feat/router-supervision` + +### `fix/` + +Bug fix branches for correcting defects. + +- Branch from `main` +- Merge back into `main` via pull request +- Delete after merge +- Example: `fix/mailbox-ordering`, `fix/jdbc-snapshot-recovery` + +### `release/` + +Short-lived branches for release stabilization. Used when a release needs final +adjustments without blocking ongoing feature work on `main`. + +- Branch from `main` +- Only release-related commits (version bumps, changelog, critical fixes) +- Merge back into `main` via pull request, then tag the merge commit +- Delete after merge +- Example: `release/1.0.0`, `release/1.1.0` + +--- + +## Commit Messages + +Write concise commit messages that focus on the _why_ rather than the _what_. Use +imperative mood (for example, "Add CI workflow" instead of "Added CI workflow"). + +--- + +## Development Workflow + +```bash +# Create a branch +git checkout -b feat/my-change + +# Build and run the standard checks +./gradlew build +./gradlew test + +# Module-specific test runs +./gradlew :core:test --tests "ClassName" +./gradlew :core:test --tests "ClassName.method" + +# Integration tests (requires Docker) +./gradlew :persistence-jdbc:integrationTest + +# Optional performance test +PERF_TEST=true ./gradlew :core:test --tests "*ActorPerformanceTest" +``` + +See the [README](README.md#development) for the main development commands. + +--- + +## License + +By contributing, you agree that your contributions will be dual-licensed under +[MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option. diff --git a/LICENSE-APACHE b/LICENSE-APACHE new file mode 100644 index 0000000..65cbdf9 --- /dev/null +++ b/LICENSE-APACHE @@ -0,0 +1,190 @@ + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to the Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by the Licensor and + subsequently incorporated within the Work. + +2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding any notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + +5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +Copyright 2024-2026 Daniel Götten + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/LICENSE-MIT b/LICENSE-MIT new file mode 100644 index 0000000..77246e9 --- /dev/null +++ b/LICENSE-MIT @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2024-2026 Daniel Götten + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/MIGRATION_EVALUATION.md b/MIGRATION_EVALUATION.md deleted file mode 100644 index 3a2d95f..0000000 --- a/MIGRATION_EVALUATION.md +++ /dev/null @@ -1,310 +0,0 @@ -# JVM Language Migration Evaluation - -## Context - -This document evaluates whether migrating the `core` module from Java 21 to Kotlin, Scala, or -Clojure would be beneficial. The key constraints are: - -- **Lean dependency footprint** — slact should remain as thin as possible with only the most - essential dependencies. -- **Java API** — any JVM-alternative implementation must still expose a first-class Java API for - downstream consumers. -- **Actor model suitability** — the target language should fit naturally to the actor model patterns - used in the core. - ---- - -## Baseline: Current Java 21 State - -The current implementation leverages modern Java features extensively: - -| Feature | Usage in slact | -|---------------------------------|------------------------------------------------------------------------------| -| Records | `SimpleRoutingRequest`, `ActorPath.Element` construction | -| Sealed interfaces | `MailboxItem` hierarchy, message type contracts | -| Pattern matching (`switch`) | `ReadyActorLogic.processMailboxItem`, `StoppingActorLogic.processMailboxItem` | -| `var` type inference | Widespread use in method bodies | -| `@NotNull`/`@Nullable` | All parameters and return types annotated via Jetbrains annotations | -| Java Module System | Explicit `module-info.java` with controlled package exports | -| `CompletableFuture` | Request-response pattern, stop coordination | -| `ScheduledExecutorService` | Thread-pool-based mailbox dispatching | -| `AtomicBoolean`/`AtomicReference` | Lock-free concurrency in `ActorWrapper` | - -**Runtime dependencies** (`core` module): - -| Artifact | Purpose | Approximate size | -|-----------------------------|-------------------------------------|------------------| -| `org.slf4j:slf4j-api` | Logging abstraction | ~65 KB | -| `org.jetbrains:annotations` | Nullability annotations | ~30 KB | - -Total additional runtime dependency weight: **~95 KB**. - ---- - -## Kotlin - -### Language Fit - -Kotlin runs on the JVM, produces standard class files, and interoperates bidirectionally with Java -with near-zero friction. It shares many concepts with modern Java 21 but goes further in several -areas relevant to slact. - -| Area | Java 21 | Kotlin | -|------------------------|------------------------------------------------|-----------------------------------------------------| -| Null safety | External `@NotNull`/`@Nullable` annotations | Built into the type system (`T` vs `T?`) | -| Data carriers | Records (immutable, no inheritance) | Data classes (mutable allowed, can be sealed) | -| Sealed hierarchies | Sealed interfaces/classes | Sealed classes/interfaces (richer pattern matching) | -| Pattern matching | `switch` expressions (JEP 441) | `when` expressions (more powerful, exhaustive) | -| Concurrency | Thread pool, virtual threads (JEP 444) | Coroutines (structured concurrency, `Flow`) | -| Boilerplate | Primary constructors via records only | Primary constructors on all classes | -| Extension methods | Not available | Extension functions on any type | - -**Impact on slact core:** - -- `ActorWrapper` has many annotated fields and long constructors; Kotlin primary constructors and - null safety would reduce noise significantly. -- The `ActorLogic` internal interface hierarchy maps directly to Kotlin sealed classes. -- Coroutines (`kotlinx-coroutines`) could replace the thread-pool dispatcher with lightweight - structured concurrency — but this is an _optional_ dependency, not forced. -- The `ScheduledExecutor` abstraction could leverage Kotlin `delay` / `launch` natively. - -### Java API Impact - -Most Kotlin constructs are callable from Java without modification: - -- Regular classes and functions are fully transparent. -- Extension functions become static utility methods. -- Data classes expose component accessors and `copy()`. -- `suspend` functions are **not directly callable** from Java; they require a coroutine context. - Any suspend-based internal API would need non-suspend wrapper overloads if exposed in the public - API — this is the main Java-interop constraint when using coroutines. -- `Unit` return type maps to `void` in Java, which is transparent. -- SAM (Single Abstract Method) conversions work in both directions. - -**Verdict:** A well-designed Kotlin implementation can maintain a 100% Java-compatible public API -without separate wrapper code, provided coroutines are kept in the internal layer only. - -### Dependency Cost - -| Artifact | Required | Approximate size | -|-----------------------------------------|----------------------|------------------| -| `org.jetbrains.kotlin:kotlin-stdlib` | Always | ~1.8 MB | -| `org.jetbrains.kotlinx:kotlinx-coroutines-core` | Optional (but large benefit) | ~1 MB | - -Adding Kotlin-stdlib increases the library dependency footprint by roughly **20×** compared to the -current baseline. For a library targeting minimal footprint, this is a meaningful cost. - -However, it is worth noting that `kotlin-stdlib` replaces `org.jetbrains:annotations` (both come -from the same vendor) and subsumes many common Java utilities, so the _net_ addition is -`kotlin-stdlib` minus what it replaces. - -### Module System - -Kotlin supports the Java Module System but with caveats: modules are defined in -`module-info.java` (not `.kt`), and there are known limitations with mixed Kotlin/Java module -compilation. The `module-info.java` can be retained as-is; only the source files switch language. -Gradle with the `kotlin-jvm` plugin handles this correctly. - -### Summary - -| Criterion | Rating | Notes | -|---------------------------|---------|---------------------------------------------------------------------| -| Actor model fit | ★★★★★ | Coroutines are ideal; sealed classes map directly | -| Lean dependency footprint | ★★★☆☆ | `kotlin-stdlib` is ~1.8 MB; coroutines add another ~1 MB | -| Java API quality | ★★★★★ | Transparent for non-suspend code; wrappers needed for suspend APIs | -| Gradual migration | ★★★★★ | Kotlin and Java files can coexist in the same module | -| Learning curve | ★★★★☆ | Java developers adapt quickly; coroutines require study | - ---- - -## Scala - -### Language Fit - -Scala 3 (the current major version) is a powerful JVM language with an advanced type system, -exhaustive pattern matching, and a functional programming heritage. Akka (now Pekko), the most -widely used JVM actor system, is written in Scala. - -| Area | Java 21 | Scala 3 | -|------------------------|-----------------------------------------------|---------------------------------------------------| -| Null safety | `@NotNull`/`@Nullable` annotations | `Option[T]` for optional values; type system based | -| Data carriers | Records | Case classes | -| Sealed hierarchies | Sealed interfaces/classes | Sealed traits / enums (very powerful) | -| Pattern matching | `switch` expressions | `match` expressions (exhaustive, deep, guards) | -| Concurrency | Thread pool, virtual threads | Futures, Akka actors (separate dependency) | -| Type system | Generics + wildcards | Higher-kinded types, type classes, union types | -| Functional style | Streams, Lambdas | First-class FP: for-comprehensions, monads, etc. | - -**Impact on slact core:** - -- The sealed `MailboxItem` hierarchy, `ActorLogic`, and message type hierarchies benefit from - Scala's more expressive `match` and sealed traits. -- Scala's type system would allow more precise modelling of the actor's generic message type - constraints. -- The concurrency model in slact does not need Akka; plain Scala `Future` or Cats Effect IO - could replace `CompletableFuture`. - -### Java API Impact - -Calling Scala from Java is significantly more complex than calling Kotlin from Java: - -- **Traits with default implementations** compile to interfaces + companion classes; calling from - Java requires care. -- **Case classes** expose `apply()`/`unapply()` via companion objects, which are not standard Java - constructors; Java callers must use `.apply(...)` or generated constructors. -- **Implicit parameters / context parameters (Scala 3 `given`/`using`)** are invisible to Java - callers; APIs using them cannot be consumed from Java without wrappers. -- **Higher-kinded types, union types, type aliases** are not representable in Java generics; they - require erasure-based workarounds. -- **Scala collections** are not `java.util` collections; explicit conversion (`asJava`, `asScala`) - is needed. -- The public API would need a **dedicated Java facade layer** (separate classes, no Scala-specific - types exposed), which is a non-trivial ongoing maintenance burden. - -**Verdict:** A Scala implementation requires a deliberate, separately maintained Java API wrapper -module. Without it, Java consumers face a hostile API surface. - -### Dependency Cost - -| Artifact | Required | Approximate size | -|--------------------------------|----------|------------------| -| `org.scala-lang:scala3-library` | Always | ~5.5 MB | -| Cats Effect / ZIO (optional) | Optional | ~3–8 MB | - -The Scala 3 standard library adds **~60× the current baseline** in dependency weight. For a lean -library, this is a very significant cost with no straightforward mitigation. - -### Module System - -Scala 3 does not integrate natively with the Java Module System. Using `module-info.java` in a -mixed Scala/Java module requires the `ModuleInfoPlugin` Gradle plugin and a build setup that is -noticeably more complex than pure Java or Kotlin. - -### Summary - -| Criterion | Rating | Notes | -|---------------------------|---------|-----------------------------------------------------------------------| -| Actor model fit | ★★★★★ | Excellent; Akka/Pekko heritage; expressive types | -| Lean dependency footprint | ★★☆☆☆ | `scala3-library` is ~5.5 MB, much heavier than Kotlin | -| Java API quality | ★★☆☆☆ | Requires a separately maintained Java facade; high ongoing overhead | -| Gradual migration | ★★★☆☆ | Possible but build complexity is high; Scala and Java interop is work | -| Learning curve | ★★☆☆☆ | Steep; Scala idioms and type system differ significantly from Java | - ---- - -## Clojure - -### Language Fit - -Clojure is a Lisp dialect on the JVM designed around immutability, software transactional memory -(STM), and functional programming. It has native `agent` abstractions that are conceptually similar -to the actor model. - -| Area | Java 21 | Clojure | -|------------------------|---------------------------|------------------------------------------------------| -| Null safety | `@NotNull`/`@Nullable` | No static types; `nil` is the default null | -| Data carriers | Records (static types) | Maps/records (dynamic, no compile-time checking) | -| Sealed hierarchies | Sealed types | Protocols (runtime dispatch) | -| Pattern matching | `switch` expressions | `cond`, `case`, `core.match` (library) | -| Concurrency | Thread pool, virtual threads | STM (`ref`), `atom`, `agent`, `core.async` | -| Type safety | Static generics | Fully dynamic; optional `clojure.spec` validation | -| Syntax | Standard Java | LISP (S-expressions) | - -**Impact on slact core:** - -- Clojure `agent` semantics are action-based (sequential execution per agent), which is similar to - an actor mailbox, but the programming model is quite different. -- There is no native compile-time type safety; `clojure.spec` provides runtime validation only. -- The `ActorWrapper` generic type safety (`ActorHandle`, `Actor`) would be lost. - -### Java API Impact - -Clojure can be compiled and packaged for Java consumption using `gen-class` or `definterface`, but: - -- Java callers work through generated class stubs or `clojure.lang.IFn` wrappers, which are - unintuitive. -- Type information is erased at the Clojure level; Java consumers receive `Object` in most cases. -- The Clojure runtime (`clojure.jar`) must always be on the classpath, adding the full Clojure - runtime as a hard dependency. -- A first-class Java API requires writing explicit Java adapters — the full public surface must be - reimplemented in Java or via Clojure's `gen-class` directive with significant boilerplate. - -**Verdict:** A Clojure-based implementation cannot provide a first-class Java API without -substantial additional wrapper code. The dynamic nature conflicts with slact's typed actor model. - -### Dependency Cost - -| Artifact | Required | Approximate size | -|--------------------------------|----------|------------------| -| `org.clojure:clojure` | Always | ~3.7 MB | -| `org.clojure:core.async` | Optional | ~200 KB | - -### Summary - -| Criterion | Rating | Notes | -|---------------------------|---------|---------------------------------------------------------------------------------| -| Actor model fit | ★★★☆☆ | `agent` primitive exists, but paradigm mismatch with typed actors | -| Lean dependency footprint | ★★☆☆☆ | Full Clojure runtime (~3.7 MB) required | -| Java API quality | ★☆☆☆☆ | Needs complete Java wrapper layer; dynamic types conflict with typed API | -| Gradual migration | ★★☆☆☆ | Cannot mix Clojure and Java at source level naturally | -| Learning curve | ★☆☆☆☆ | Entirely different paradigm (LISP, dynamic, functional-first) | - ---- - -## Comparative Summary - -| Criterion | Java 21 (current) | Kotlin | Scala 3 | Clojure | -|--------------------------------|-------------------|---------------|---------------|---------------| -| Actor model fit | ★★★★☆ | ★★★★★ | ★★★★★ | ★★★☆☆ | -| Lean dependency footprint | ★★★★★ | ★★★☆☆ | ★★☆☆☆ | ★★☆☆☆ | -| Java API quality | ★★★★★ | ★★★★★ | ★★☆☆☆ | ★☆☆☆☆ | -| Gradual migration | — | ★★★★★ | ★★★☆☆ | ★★☆☆☆ | -| Learning curve (for Java devs) | — | ★★★★☆ | ★★☆☆☆ | ★☆☆☆☆ | -| Tooling / ecosystem maturity | ★★★★★ | ★★★★★ | ★★★★☆ | ★★★☆☆ | - ---- - -## Recommendation - -**For the current project goals, migration is not recommended at this time.** - -Java 21 already provides the essential modern language features (records, sealed interfaces, -pattern matching, `var`) that motivated this evaluation. The codebase is clean, concise, and idiomatic. -Migrating solely to reduce boilerplate would provide marginal benefit at a real dependency cost. - -**If a migration is undertaken in the future, Kotlin is the only sensible choice**, for the -following reasons: - -1. **Incremental migration** — Kotlin and Java files can coexist in the same Gradle module. - Migration can be done file by file without breaking the build or tests. - -2. **Null safety in the type system** — eliminates all `@NotNull`/`@Nullable` annotations and - removes the `org.jetbrains:annotations` dependency entirely (folded into `kotlin-stdlib`). - -3. **No dedicated Java API wrapper needed** — the public Kotlin API is directly callable from Java - for all non-suspend code. A rule of thumb: keep all public API methods non-suspend and use - coroutines only in internal dispatch logic. - -4. **Coroutines as optional upgrade path** — virtual threads (Java 21 JEP 444) could replace the - current `ScheduledExecutorService` internally without changing the API; coroutines offer the - same benefit for a Kotlin rewrite. The choice between the two can be made at the time of - migration. - -5. **Small, predictable footprint** — `kotlin-stdlib` (~1.8 MB) is the only mandatory addition; - `kotlinx-coroutines-core` is optional and only needed if coroutines are adopted. - -**Scala** is powerful but over-engineered for this project's scope and requires a separately -maintained Java API facade, which is at odds with the lean-dependency goal. - -**Clojure** is fundamentally incompatible with slact's typed, statically-checked actor model and -would require a complete reimplementation of the Java API layer. - -### Decision Criteria for Future Kotlin Migration - -Before migrating, the following conditions should be met: - -- [ ] Java 21 language features no longer cover the use case (e.g. complex coroutine-based - scheduling is needed that virtual threads cannot replace). -- [ ] The `kotlin-stdlib` dependency is acceptable to downstream consumers. -- [ ] A migration plan that keeps the public Java API stable is in place. -- [ ] The team is comfortable with Kotlin idioms and coroutine semantics. diff --git a/README.md b/README.md index e5924d0..d29b59b 100644 --- a/README.md +++ b/README.md @@ -1,11 +1,19 @@ # slact +[![CI](https://github.com/dangoe/slacktors/actions/workflows/ci.yml/badge.svg)](https://github.com/dangoe/slacktors/actions/workflows/ci.yml) +[![License: MIT OR Apache-2.0](https://img.shields.io/badge/license-MIT%20OR%20Apache--2.0-blue.svg)](LICENSE-MIT) + A lightweight actor system implementation in Java 21 — built as a learning project to explore the actor model and concurrent message passing from scratch. ## Motivation This is a **tinker project** created to learn about actor system internals: message dispatching, actor lifecycle management, hierarchical supervision, and behavioral switching. It is not intended for production use but rather as an educational exercise in building concurrency primitives. +## Current State + +> **Note:** slact is under active development as a learning project. APIs, modules, and +> persistence surfaces may change between versions without prior deprecation. + ## Features - **Typed actors** — actors are generic (`Actor`) and process only their declared message type @@ -23,11 +31,14 @@ This is a **tinker project** created to learn about actor system internals: mess ## Project Structure -| Module | Description | -|---------------|----------------------------------------------------------| -| `core` | Main library — actor runtime, message handling, patterns | -| `testkit` | Testing utilities — test container, JUnit 5 extension | -| `build-logic` | Gradle convention plugins for shared build configuration | +| Module | Path | Description | +|-----------------------|------------------------|--------------------------------------------------------------------| +| `core` | `core` | Main library — actor runtime, message handling, and patterns | +| `testkit` | `testkit` | Testing utilities — test container and JUnit 5 extension | +| `persistence` | `persistence` | Event sourcing abstraction — event stores and persistent actors | +| `persistence-jdbc` | `persistence-jdbc` | JDBC-backed persistence implementation with PostgreSQL and HikariCP | +| `persistence-testkit` | `persistence-testkit` | Shared persistence testing specs and reusable contract coverage | +| `build-logic` | `build-logic` | Gradle convention plugins for shared build configuration | ## Quick Start @@ -72,9 +83,18 @@ try (var container = new SlactContainerBuilder().build()) { } ``` -## AI-Assisted Development +## Development + +```bash +./gradlew build +./gradlew test +./gradlew :core:test --tests "ClassName" +./gradlew :core:test --tests "ClassName.method" +./gradlew :persistence-jdbc:integrationTest +PERF_TEST=true ./gradlew :core:test --tests "*ActorPerformanceTest" +``` -Parts of this codebase were created with the help of **AI agents** (GitHub Copilot). AI was primarily used to improve **test completeness** — generating test cases for edge cases, lifecycle scenarios, and message flow coverage. The core architecture and design decisions are human-driven. All AI generated code is reviewed by the author for correctness and maintainability. +Integration tests require Docker. ## Tech Stack @@ -85,7 +105,13 @@ Parts of this codebase were created with the help of **AI agents** (GitHub Copil - **Awaitility** — async testing support - **SLF4J / Logback** — logging +## Contributing + +Contributions are welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for branching strategy, +development workflow, and guidelines. + ## License -This project is licensed under the [MIT License](LICENSE). +Dual-licensed under [MIT](LICENSE-MIT) or [Apache-2.0](LICENSE-APACHE), at your option. +Copyright © 2024-2026 Daniel Götten diff --git a/build-logic/build.gradle.kts b/build-logic/build.gradle.kts index 7aa182e..3a1b4b1 100644 --- a/build-logic/build.gradle.kts +++ b/build-logic/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `kotlin-dsl` } diff --git a/build-logic/settings.gradle.kts b/build-logic/settings.gradle.kts index cac9db2..0d1d76e 100644 --- a/build-logic/settings.gradle.kts +++ b/build-logic/settings.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + rootProject.name = "build-logic" pluginManagement { diff --git a/build-logic/src/main/kotlin/slact.base-lib.gradle.kts b/build-logic/src/main/kotlin/slact.base-lib.gradle.kts index dc45e3d..b1d0fe7 100644 --- a/build-logic/src/main/kotlin/slact.base-lib.gradle.kts +++ b/build-logic/src/main/kotlin/slact.base-lib.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + import org.gradle.accessors.dm.LibrariesForLibs val libs = the() diff --git a/build-logic/src/main/kotlin/slact.integration-test-lib.gradle.kts b/build-logic/src/main/kotlin/slact.integration-test-lib.gradle.kts index c62aeca..e79611e 100644 --- a/build-logic/src/main/kotlin/slact.integration-test-lib.gradle.kts +++ b/build-logic/src/main/kotlin/slact.integration-test-lib.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `java-library` } diff --git a/build-logic/src/main/kotlin/slact.java-lib.gradle.kts b/build-logic/src/main/kotlin/slact.java-lib.gradle.kts index 2a72fe0..19055a5 100644 --- a/build-logic/src/main/kotlin/slact.java-lib.gradle.kts +++ b/build-logic/src/main/kotlin/slact.java-lib.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { id("slact.base-lib") id("slact.use-junit5-lib") diff --git a/build-logic/src/main/kotlin/slact.use-junit5-lib.gradle.kts b/build-logic/src/main/kotlin/slact.use-junit5-lib.gradle.kts index 9612557..8f58944 100644 --- a/build-logic/src/main/kotlin/slact.use-junit5-lib.gradle.kts +++ b/build-logic/src/main/kotlin/slact.use-junit5-lib.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + import org.gradle.accessors.dm.LibrariesForLibs val libs = the() diff --git a/core/build.gradle.kts b/core/build.gradle.kts index 78f5de7..d937133 100644 --- a/core/build.gradle.kts +++ b/core/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { java id("slact.java-lib") diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/Actor.java b/core/src/main/java/de/dangoe/concurrent/slact/core/Actor.java index f325117..0be5e73 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/Actor.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/Actor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import de.dangoe.concurrent.slact.core.ActorRuntime.SendMessageOp; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorContext.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorContext.java index 8ace5e3..20416e8 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorContext.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorContext.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorCreator.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorCreator.java index 70c112c..61c7ada 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorCreator.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorCreator.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandle.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandle.java index cb67412..82843ea 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandle.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandle.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandleResolver.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandleResolver.java index e7361e8..1d36fd4 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandleResolver.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorHandleResolver.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.util.Optional; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorPath.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorPath.java index f5eb39f..3265406 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorPath.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorPath.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.util.Objects; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorRuntime.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorRuntime.java index 741fb1f..9048473 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorRuntime.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorRuntime.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.util.concurrent.Future; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorSpawner.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorSpawner.java index 183c9a0..99d7613 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ActorSpawner.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ActorSpawner.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.util.UUID; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/Cancellable.java b/core/src/main/java/de/dangoe/concurrent/slact/core/Cancellable.java index 2f9ca84..700ecf5 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/Cancellable.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/Cancellable.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; /** diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/Decision.java b/core/src/main/java/de/dangoe/concurrent/slact/core/Decision.java index d3ed7de..141b0ce 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/Decision.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/Decision.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.util.function.Function; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/Done.java b/core/src/main/java/de/dangoe/concurrent/slact/core/Done.java index 6aaf0ca..2c379f8 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/Done.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/Done.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/FuturePipeOp.java b/core/src/main/java/de/dangoe/concurrent/slact/core/FuturePipeOp.java index c1a6c7a..7f94018 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/FuturePipeOp.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/FuturePipeOp.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/MessageReceiver.java b/core/src/main/java/de/dangoe/concurrent/slact/core/MessageReceiver.java index 73153d2..848ea19 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/MessageReceiver.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/MessageReceiver.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/ScheduledExecutor.java b/core/src/main/java/de/dangoe/concurrent/slact/core/ScheduledExecutor.java index 47525ef..0f47e60 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/ScheduledExecutor.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/ScheduledExecutor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import java.time.Duration; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainer.java b/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainer.java index 31ba5a2..896f72a 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainer.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainer.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; /** diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainerBuilder.java b/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainerBuilder.java index 5d11247..0086ea5 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainerBuilder.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/SlactContainerBuilder.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import de.dangoe.concurrent.slact.core.internal.DefaultSlactContainer; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/ActorRegistrationException.java b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/ActorRegistrationException.java index 3b4b155..43e984b 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/ActorRegistrationException.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/ActorRegistrationException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.exception; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/MessageRejectedException.java b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/MessageRejectedException.java index 38b2927..31ce972 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/MessageRejectedException.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/MessageRejectedException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.exception; import de.dangoe.concurrent.slact.core.ActorHandle; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/SlactException.java b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/SlactException.java index 75e2f36..7bfc6ba 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/exception/SlactException.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/exception/SlactException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.exception; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActiveActorContextHolder.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActiveActorContextHolder.java index 783186b..00cec7a 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActiveActorContextHolder.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActiveActorContextHolder.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.ActorContext; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorRegistry.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorRegistry.java index 2521191..9d5bda1 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorRegistry.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorRegistry.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorWrapper.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorWrapper.java index 019a913..6779d88 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorWrapper.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorWrapper.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.Actor; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/DefaultSlactContainer.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/DefaultSlactContainer.java index f60c691..f994c92 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/DefaultSlactContainer.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/DefaultSlactContainer.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.Actor; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/MailboxItem.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/MailboxItem.java index 35c7a24..f44d257 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/MailboxItem.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/MailboxItem.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/RootActorSpawner.java b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/RootActorSpawner.java index 2160108..131ebfd 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/internal/RootActorSpawner.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/internal/RootActorSpawner.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.Actor; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/ActorLogger.java b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/ActorLogger.java index 2362b0b..4fed115 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/ActorLogger.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/ActorLogger.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.logging; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/LogTemplateRenderer.java b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/LogTemplateRenderer.java index 1e8ab26..bc0c79a 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/LogTemplateRenderer.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/LogTemplateRenderer.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.logging; import org.jetbrains.annotations.NotNull; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/AbstractActorLogger.java b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/AbstractActorLogger.java index 0860200..527cab9 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/AbstractActorLogger.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/AbstractActorLogger.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.logging.internal; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/BraceTemplateRenderer.java b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/BraceTemplateRenderer.java index 47f124d..80f4e8d 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/BraceTemplateRenderer.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/BraceTemplateRenderer.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.logging.internal; import de.dangoe.concurrent.slact.core.logging.LogTemplateRenderer; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/Slf4jActorLogger.java b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/Slf4jActorLogger.java index 487f2c4..3341c60 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/Slf4jActorLogger.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/logging/internal/Slf4jActorLogger.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.logging.internal; import de.dangoe.concurrent.slact.core.Actor; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActor.java b/core/src/main/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActor.java index ed49928..c6df54d 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActor.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.patterns.actors; import de.dangoe.concurrent.slact.core.Actor; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFuture.java b/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFuture.java index 2f86365..ce5cb70 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFuture.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFuture.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.util.concurrent; import java.util.concurrent.CompletableFuture; diff --git a/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFutureImpl.java b/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFutureImpl.java index 74ef408..72fefd0 100644 --- a/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFutureImpl.java +++ b/core/src/main/java/de/dangoe/concurrent/slact/core/util/concurrent/RichFutureImpl.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.util.concurrent; import java.util.concurrent.CompletableFuture; diff --git a/core/src/main/java/module-info.java b/core/src/main/java/module-info.java index c4fb31c..72c292e 100644 --- a/core/src/main/java/module-info.java +++ b/core/src/main/java/module-info.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + /** * slact core actor system runtime. */ diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorAsyncResponseTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorAsyncResponseTest.java index dea6ea9..0baa8df 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorAsyncResponseTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorAsyncResponseTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorBehaviorTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorBehaviorTest.java index 4af16ab..aeaf4b1 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorBehaviorTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorBehaviorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorHandleTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorHandleTest.java index acd9a6b..85d3789 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorHandleTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorHandleTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static de.dangoe.concurrent.slact.testkit.Constants.DEFAULT_TIMEOUT; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorMessagePropagationTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorMessagePropagationTest.java index 4ff976c..0c2b56a 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorMessagePropagationTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorMessagePropagationTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static de.dangoe.concurrent.slact.testkit.Constants.DEFAULT_TIMEOUT; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPathTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPathTest.java index b9ab8ca..792ebaf 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPathTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPathTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPerformanceTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPerformanceTest.java index d4ad2b7..6b383d3 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPerformanceTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorPerformanceTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.awaitility.Awaitility.await; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorSpawningTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorSpawningTest.java index a365161..3af32c9 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/ActorSpawningTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/ActorSpawningTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static de.dangoe.concurrent.slact.testkit.Constants.DEFAULT_TIMEOUT; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/CoordinatedActorStopTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/CoordinatedActorStopTest.java index feb193d..7925e1d 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/CoordinatedActorStopTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/CoordinatedActorStopTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static de.dangoe.concurrent.slact.testkit.Constants.DEFAULT_TIMEOUT; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/DecisionTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/DecisionTest.java index 9ea419b..3e50095 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/DecisionTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/DecisionTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/WordCountActorTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/WordCountActorTest.java index 99e4ff3..f1c8791 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/WordCountActorTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/WordCountActorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core; import static org.assertj.core.api.Assertions.assertThat; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/FutureCompletingActorTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/FutureCompletingActorTest.java index 813c0a4..5255e80 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/FutureCompletingActorTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/FutureCompletingActorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.patterns.actors; import org.junit.jupiter.api.DisplayName; diff --git a/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActorTest.java b/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActorTest.java index a9b06fa..4729406 100644 --- a/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActorTest.java +++ b/core/src/test/java/de/dangoe/concurrent/slact/core/patterns/actors/RoutingActorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.patterns.actors; import static de.dangoe.concurrent.slact.testkit.Constants.DEFAULT_TIMEOUT; diff --git a/core/src/test/resources/logback-test.xml b/core/src/test/resources/logback-test.xml index 40dc2f2..79b3eb2 100644 --- a/core/src/test/resources/logback-test.xml +++ b/core/src/test/resources/logback-test.xml @@ -1,3 +1,5 @@ + + diff --git a/gradle/wrapper/gradle-wrapper.properties b/gradle/wrapper/gradle-wrapper.properties index c61a118..7c2f439 100644 --- a/gradle/wrapper/gradle-wrapper.properties +++ b/gradle/wrapper/gradle-wrapper.properties @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MIT OR Apache-2.0 + distributionBase=GRADLE_USER_HOME distributionPath=wrapper/dists distributionUrl=https\://services.gradle.org/distributions/gradle-9.4.1-bin.zip diff --git a/persistence-jdbc/build.gradle.kts b/persistence-jdbc/build.gradle.kts index 78339f5..705d648 100644 --- a/persistence-jdbc/build.gradle.kts +++ b/persistence-jdbc/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `java-library` id("slact.java-lib") diff --git a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlEventStoreIT.java b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlEventStoreIT.java index faff598..d39f757 100644 --- a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlEventStoreIT.java +++ b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlEventStoreIT.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import com.zaxxer.hikari.HikariConfig; diff --git a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlPersistentActorIT.java b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlPersistentActorIT.java index 015df01..6a656c7 100644 --- a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlPersistentActorIT.java +++ b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlPersistentActorIT.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import com.zaxxer.hikari.HikariConfig; diff --git a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapableEventStoreIT.java b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapableEventStoreIT.java index c1c3809..3e43a70 100644 --- a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapableEventStoreIT.java +++ b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapableEventStoreIT.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import com.zaxxer.hikari.HikariConfig; diff --git a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapablePersistentActorIT.java b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapablePersistentActorIT.java index 05a2c23..508ca82 100644 --- a/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapablePersistentActorIT.java +++ b/persistence-jdbc/src/integrationTest/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlSnapshotCapablePersistentActorIT.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import com.zaxxer.hikari.HikariConfig; diff --git a/persistence-jdbc/src/integrationTest/resources/logback-test.xml b/persistence-jdbc/src/integrationTest/resources/logback-test.xml index 40dc2f2..79b3eb2 100644 --- a/persistence-jdbc/src/integrationTest/resources/logback-test.xml +++ b/persistence-jdbc/src/integrationTest/resources/logback-test.xml @@ -1,3 +1,5 @@ + + diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/HikariConnectionPool.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/HikariConnectionPool.java index 7e6d500..aa26b40 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/HikariConnectionPool.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/HikariConnectionPool.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import com.zaxxer.hikari.HikariConfig; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcConnectionPool.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcConnectionPool.java index e88c46f..3180a3e 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcConnectionPool.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcConnectionPool.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import java.sql.Connection; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcDialect.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcDialect.java index da8e747..04aef78 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcDialect.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcDialect.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import de.dangoe.concurrent.slact.persistence.EventEnvelope; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcEventStore.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcEventStore.java index de76136..7e4f6d0 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcEventStore.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcEventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcExceptionTranslator.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcExceptionTranslator.java index 6ae2dd8..98b374c 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcExceptionTranslator.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcExceptionTranslator.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import de.dangoe.concurrent.slact.persistence.PartitionKey; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcSnapshotCapableEventStore.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcSnapshotCapableEventStore.java index 29c4f8c..d90eed9 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcSnapshotCapableEventStore.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/JdbcSnapshotCapableEventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlDialect.java b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlDialect.java index 4363ec3..0a4df48 100644 --- a/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlDialect.java +++ b/persistence-jdbc/src/main/java/de/dangoe/concurrent/slact/persistence/storage/jdbc/PostgreSqlDialect.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.storage.jdbc; import de.dangoe.concurrent.slact.persistence.EventEnvelope; diff --git a/persistence-jdbc/src/main/resources/db/changelog/changes/0001_create_schema.yaml b/persistence-jdbc/src/main/resources/db/changelog/changes/0001_create_schema.yaml index 51ce6cd..e8180e6 100644 --- a/persistence-jdbc/src/main/resources/db/changelog/changes/0001_create_schema.yaml +++ b/persistence-jdbc/src/main/resources/db/changelog/changes/0001_create_schema.yaml @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MIT OR Apache-2.0 + databaseChangeLog: - changeSet: id: 0001 diff --git a/persistence-jdbc/src/main/resources/db/changelog/db.changelog-master.yaml b/persistence-jdbc/src/main/resources/db/changelog/db.changelog-master.yaml index 9078f53..9a063ac 100644 --- a/persistence-jdbc/src/main/resources/db/changelog/db.changelog-master.yaml +++ b/persistence-jdbc/src/main/resources/db/changelog/db.changelog-master.yaml @@ -1,3 +1,5 @@ +# SPDX-License-Identifier: MIT OR Apache-2.0 + databaseChangeLog: - includeAll: path: db/changelog/changes/ diff --git a/persistence-testkit/build.gradle.kts b/persistence-testkit/build.gradle.kts index ff1e5af..b761764 100644 --- a/persistence-testkit/build.gradle.kts +++ b/persistence-testkit/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `java-library` id("slact.java-lib") diff --git a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/EventStoreSpec.java b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/EventStoreSpec.java index ca794df..f00d920 100644 --- a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/EventStoreSpec.java +++ b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/EventStoreSpec.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.testkit; import static org.assertj.core.api.Assertions.assertThat; diff --git a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorBaseSpec.java b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorBaseSpec.java index ec1aee5..9256f11 100644 --- a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorBaseSpec.java +++ b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorBaseSpec.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.testkit; import static org.assertj.core.api.Assertions.assertThat; diff --git a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorSpec.java b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorSpec.java index e1ecf4f..5f420f8 100644 --- a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorSpec.java +++ b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/PersistentActorSpec.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.testkit; import de.dangoe.concurrent.slact.persistence.EventStore; diff --git a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapableEventStoreSpec.java b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapableEventStoreSpec.java index 8514cef..9137f24 100644 --- a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapableEventStoreSpec.java +++ b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapableEventStoreSpec.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.testkit; import static org.assertj.core.api.Assertions.assertThat; diff --git a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapablePersistentActorSpec.java b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapablePersistentActorSpec.java index 24dc29b..4da7c42 100644 --- a/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapablePersistentActorSpec.java +++ b/persistence-testkit/src/main/java/de/dangoe/concurrent/slact/persistence/testkit/SnapshotCapablePersistentActorSpec.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.testkit; import static org.assertj.core.api.Assertions.assertThat; diff --git a/persistence/build.gradle.kts b/persistence/build.gradle.kts index d1cebaf..ae03d8b 100644 --- a/persistence/build.gradle.kts +++ b/persistence/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `java-library` id("slact.java-lib") diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventEnvelope.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventEnvelope.java index 7beae17..bf69606 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventEnvelope.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventEnvelope.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.time.Instant; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventLogEntryLike.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventLogEntryLike.java index 5987ee7..6f4eb1e 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventLogEntryLike.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventLogEntryLike.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.time.Instant; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventStore.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventStore.java index 9ef0aed..139996b 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventStore.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/EventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStore.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStore.java index cb3c020..6831049 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStore.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PartitionKey.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PartitionKey.java index ff5ffa0..be19375 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PartitionKey.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PartitionKey.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.io.Serializable; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtension.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtension.java index 971cb77..66f9603 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtension.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtension.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.util.Optional; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolder.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolder.java index f480c28..9d00699 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolder.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolder.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.persistence.exception.PersistenceException; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActor.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActor.java index 6b4173f..cdb037b 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActor.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActorBase.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActorBase.java index 4cda5e9..25a9aef 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActorBase.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/PersistentActorBase.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.Actor; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableEventStore.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableEventStore.java index 6effa0a..b981986 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableEventStore.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableEventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStore.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStore.java index 0ed5983..0f006cb 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStore.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStore.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActor.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActor.java index f1546ea..7e6bc83 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActor.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.core.util.concurrent.RichFuture; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotEnvelope.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotEnvelope.java index 9545f4d..ae2bb51 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotEnvelope.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshotEnvelope.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.time.Instant; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshottingStrategy.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshottingStrategy.java index 0000c68..e771900 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshottingStrategy.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/SnapshottingStrategy.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import java.util.List; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/ConcurrentWriteException.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/ConcurrentWriteException.java index a511e9f..6323121 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/ConcurrentWriteException.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/ConcurrentWriteException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.exception; import de.dangoe.concurrent.slact.persistence.PartitionKey; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/PersistenceException.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/PersistenceException.java index 146543c..e13b94e 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/PersistenceException.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/PersistenceException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.exception; import de.dangoe.concurrent.slact.core.exception.SlactException; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/RecoveryFailedException.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/RecoveryFailedException.java index 1232f2b..88c30ff 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/RecoveryFailedException.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/RecoveryFailedException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.exception; import de.dangoe.concurrent.slact.persistence.PartitionKey; diff --git a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/SaveFailedException.java b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/SaveFailedException.java index 6f4f828..680ddd3 100644 --- a/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/SaveFailedException.java +++ b/persistence/src/main/java/de/dangoe/concurrent/slact/persistence/exception/SaveFailedException.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence.exception; import de.dangoe.concurrent.slact.persistence.PartitionKey; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStoreTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStoreTest.java index 3feb247..e8ff781 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStoreTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/InMemoryEventStoreTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.persistence.testkit.EventStoreSpec; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PartitionKeyTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PartitionKeyTest.java index f48e4f3..8d6dbe3 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PartitionKeyTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PartitionKeyTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import static org.assertj.core.api.Assertions.assertThatThrownBy; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolderTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolderTest.java index be9391c..3965931 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolderTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistenceExtensionHolderTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import static org.assertj.core.api.Assertions.assertThat; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistentActorTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistentActorTest.java index d372ff4..9c8b553 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistentActorTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/PersistentActorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.persistence.testkit.PersistentActorSpec; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStoreTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStoreTest.java index c4b0545..2971e9e 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStoreTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapableInMemoryEventStoreTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.persistence.testkit.SnapshotCapableEventStoreSpec; diff --git a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActorTest.java b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActorTest.java index 589a3d8..5d93805 100644 --- a/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActorTest.java +++ b/persistence/src/test/java/de/dangoe/concurrent/slact/persistence/SnapshotCapablePersistentActorTest.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.persistence; import de.dangoe.concurrent.slact.persistence.testkit.SnapshotCapablePersistentActorSpec; diff --git a/persistence/src/test/resources/logback-test.xml b/persistence/src/test/resources/logback-test.xml index 40dc2f2..79b3eb2 100644 --- a/persistence/src/test/resources/logback-test.xml +++ b/persistence/src/test/resources/logback-test.xml @@ -1,3 +1,5 @@ + + diff --git a/settings.gradle.kts b/settings.gradle.kts index 39fbaed..66d4c29 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + rootProject.name = "slact" include("core", "testkit", "persistence", "persistence-jdbc", "persistence-testkit") diff --git a/testkit/build.gradle.kts b/testkit/build.gradle.kts index 999fc68..2adbbf0 100644 --- a/testkit/build.gradle.kts +++ b/testkit/build.gradle.kts @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + plugins { `java-library` id("slact.java-lib") diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorReadinessResolver.java b/testkit/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorReadinessResolver.java index e79f339..1ff1332 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorReadinessResolver.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/core/internal/ActorReadinessResolver.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.core.internal; import de.dangoe.concurrent.slact.core.ActorPath; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/Constants.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/Constants.java index 8d290d7..acfdbea 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/Constants.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/Constants.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit; import java.time.Duration; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainer.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainer.java index cad71d5..4e0bdca 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainer.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainer.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit; import static org.awaitility.Awaitility.await; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainerExtension.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainerExtension.java index 608a421..4ccd12d 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainerExtension.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/SlactTestContainerExtension.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit; import org.jetbrains.annotations.NotNull; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/model/ReceivedMessage.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/model/ReceivedMessage.java index c8392d9..2184670 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/model/ReceivedMessage.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/model/ReceivedMessage.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit.model; import de.dangoe.concurrent.slact.core.ActorHandle; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/CapturingActor.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/CapturingActor.java index 9a69235..bc77d21 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/CapturingActor.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/CapturingActor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit.patterns.actors; import de.dangoe.concurrent.slact.core.Actor; diff --git a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/FailingOnReceiveActor.java b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/FailingOnReceiveActor.java index 2adf5c2..4d8b5b2 100644 --- a/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/FailingOnReceiveActor.java +++ b/testkit/src/main/java/de/dangoe/concurrent/slact/testkit/patterns/actors/FailingOnReceiveActor.java @@ -1,3 +1,5 @@ +// SPDX-License-Identifier: MIT OR Apache-2.0 + package de.dangoe.concurrent.slact.testkit.patterns.actors; import de.dangoe.concurrent.slact.core.Actor;