Cafienne Engine Release 1.1.14
Refactoring is Preparing
Refactoring is a term with many assocations. Some say it is where engineers loose themselves. Some say it is inevitable to handle the technical debt.
We think it is part of our daily job - and it is needed to continuously be prepared for future changes.
Cafienne version 1.1.14 contains a couple of case file enhancements, bugfixes and engine internal changes.
Case File Enhancements
Until this release, Cafienne Engine was a bit more lenient on handling task output than on handling case file modifications. When an modification was suggested through a direct Case File command (Create, Update, Replace) all json field names had to have a corresponding Case File Definition (either a property or a child case file item). This strict checking is not executed upon task completion and setting the task result in the case file. The direct commands are now also less strict. When a json field name is encountered that is not defined as a property or child, it will be accepted as part of the content. The type checking on properties continues to be validated.
Furthermore, when the Delete command is invoked on a Case File Item that has multiplicity defined (arrays), then it is no longer deleted from the json array, but it is set to null
instead. This is more in line with the CMMN specification, and also with the internal state of the Case File (which keeps it as an item in Discarded state). This enables a more logical interaction with the case file after the operation, e.g. the next item in the array has the same index in the json as it has in the internal engine representation.
Changes to the configuration
The engine changes require some adjustments to the configuration file.
Compatibility
If the engine encounters an old configuration, it will silently assume it can use the new configuration. However we recommend that you change your configuration files and keep them up-to-date.
Changes to serialization settings
Below settings must be replaced
serializers {
cafienne_serializer = "org.cafienne.akka.actor.serialization.CafienneSerializer"
}
serialization-bindings {
"org.cafienne.akka.actor.serialization.CafienneSerializable" = cafienne_serializer
}
New settings to be used
serializers {
cafienne_serializer = "org.cafienne.infrastructure.serialization.CafienneSerializer"
}
serialization-bindings {
"org.cafienne.infrastructure.serialization.CafienneSerializable" = cafienne_serializer
}
Changes to tagging settings inside the journal
Below settings must be replaced
event-adapters {
tagging = "org.cafienne.akka.actor.tagging.CaseTaggingEventAdapter"
}
event-adapter-bindings {
"org.cafienne.akka.actor.event.ModelEvent" = tagging
}
New settings to be used
event-adapters {
tagging = "org.cafienne.actormodel.tagging.CaseTaggingEventAdapter"
}
event-adapter-bindings {
"org.cafienne.actormodel.event.ModelEvent" = tagging
}
New Debug API
Cases inside the engine are built on top of Akka actors. When the actor goes out of memory, and a new request for it is received, the Akka system will recover it back into memory. Cafienne is configured to remove actors from memory after a certain idle time. For test scripts and debugging it is sometimes handy to force the recovery process. This can now be achieved through the new API endpoint. Note that debugging and testing APIs are not part of the swagger documentation.
Housekeeping
The internal build street has been extended to always compile the engine to Java 11 language level. This makes it possible to import the maven jar file also in Java 11 projects.