Migrate to Fundamentals
Chronicle 7.x adopts io.cratis:fundamentals:0.1.0. This is a major,
breaking release: recompile consumers after updating. There is no dependency
to add; Fundamentals comes transitively with io.cratis:chronicle.
The JSON wire format and event schemas do not change. Concepts still serialize as their wrapped scalar value, so existing events continue to read back.
Kotlin concepts
Section titled “Kotlin concepts”Before:
import io.cratis.chronicle.concepts.ConceptAs
data class BookId(override val value: String) : ConceptAs<String>After:
import io.cratis.fundamentals.concepts.ConceptAs
data class BookId(val value: String) : ConceptAs<String> { override fun value(): String = value}Apply the same pattern to @JvmInline value class concepts. The backing
property can also have a different name and be private; the interface only
requires fun value(): T.
Reading through a ConceptAs<T> reference changes from concept.value to
concept.value(). To keep property-style reads in Kotlin, import
io.cratis.fundamentals.concepts.value. A concrete bookId.value still uses
the data-class property and needs no extension import.
EventSourceId keeps its name and package,
io.cratis.chronicle.concepts.EventSourceId. Its implementers make the same
property-to-function change.
Java concepts
Section titled “Java concepts”Before:
import io.cratis.chronicle.concepts.ConceptAs;
record BookId(String value) implements ConceptAs<String> { @Override public String getValue() { return value; }}After:
import io.cratis.fundamentals.concepts.ConceptAs;
record BookId(String value) implements ConceptAs<String> {}Delete the old getter override: the record accessor implements the new
interface directly. Change calls from getValue() to value(). Records
implementing EventSourceId follow the same pattern.
Correlation ids
Section titled “Correlation ids”Before:
import io.cratis.chronicle.correlation.CorrelationId
val empty = CorrelationId.notSetval uuid = CorrelationId.create().valueAfter:
import io.cratis.fundamentals.execution.CorrelationId
val empty = CorrelationId.NOT_SETval uuid = CorrelationId.create().value()CorrelationId(uuid) and CorrelationId.create() remain available. The new
type is an ordinary class rather than a Kotlin value class, with value-based
equality and hashing. Java can now call begin(CorrelationId),
tryGetFor(CorrelationId) and getCorrelationId() on units of work and their
manager without value-class name mangling. BlockingUnitOfWork still exposes
its correlation id as a string.
Deprecated names
Section titled “Deprecated names”For 7.x, io.cratis.chronicle.concepts.ConceptAs and
io.cratis.chronicle.correlation.CorrelationId remain deprecated Kotlin
typealiases, at warning level, with IDE import quick-fixes. References to the
old types can still compile, but concept implementations must implement
value() and the old notSet name is not available. Java cannot see Kotlin
typealiases; Java imports must change to Fundamentals.
Release notes
Section titled “Release notes”- Java can begin, look up and inspect units of work by correlation id (part of #151).
Changed
Section titled “Changed”- Breaking:
ConceptAs<T>moves to Fundamentals and requiresfun value(): Tinstead of a property. Java records no longer need an extra getter. - Breaking:
CorrelationIdmoves to Fundamentals as an ordinary class; useNOT_SETandvalue(). - Concept JSON and event schemas remain unchanged.
Deprecated
Section titled “Deprecated”- The two old Chronicle type names remain as Kotlin typealiases for this major version; migrate imports as shown above.