Chenile 2.1.31 release notes
Highlights
Transport-neutral Chenile services
@ChenileController is now supplied by chenile-core, while retaining its
existing package name for source compatibility. A plain Spring bean can become
a Chenile controller without @RestController, a servlet request, an HTTP
route, or a chenile-http dependency. Headless controllers use
@ChenileOperation and @ChenileBody and can serve in-process,
event-driven, and serverless workloads.
The common annotation-initialization lifecycle now lives in core. The HTTP initializer inherits it and adds only Spring MVC controller selection and mapping behavior.
→ Annotation-based Chenile services
Simplified Spring MVC mappings
One SpringMvcMappingProducer now handles all five existing composed Spring
mapping annotations and direct @RequestMapping declarations. A Chenile
operation must have one supported HTTP verb and one route; invalid ambiguous
mappings are rejected during startup instead of being silently reduced.
Service-registry publication controls
@ChenileController(registerInServiceRegistry = false) suppresses publication
for one service while retaining it in local Chenile configuration. For a whole
package that should consume metadata but publish nothing, configure:
chenile.service.registry.read-only=true
Read-only mode retains registry reads and local cache loading. It prevents both
automatic startup publication and direct delegate save(...) calls before an
outbound HTTP write occurs.
JGen headless-service blueprint
The new chenile-headless-service blueprint generates a non-HTTP Chenile
service and prompts for registry publication. It requires Chenile 2.1.31 or
newer. More generally, blueprints can declare sinceVersion; JGen validates
it through its OWIZ processor chain before hooks or generated files run.
Diagnostics and BDD helpers
CANNOT_INVOKE_TARGET diagnostics now retain the target operation, exception
type, and underlying message. REST Cucumber utilities add collection assertions
for scalar values and arbitrary item key/value pairs.
Upgrade notes
Once published, point your application’s parent (or chenile.*.version properties) at 2.1.31 and rebuild — the 11 repositories move together under chenile-parent.
<parent>
<groupId>org.chenile</groupId>
<artifactId>chenile-parent</artifactId>
<version>2.1.31</version>
</parent>
Existing HTTP controllers continue to work. New headless controllers should use
@ChenileOperation for every operation and @ChenileBody for an exchange-body
parameter. Direct @RequestMapping methods must have one supported HTTP verb
and one route.