Chenile is organized as a layered framework rather than a single application:
chenile-parentdefines the common build and dependency baseline.chenile-coreprovides the execution engine, exchange model, interceptors, HTTP binding, state machine support, and core helpers.chenile-query-workflow-blueprintsbuilds reusable query and workflow service patterns on top of the core runtime.chenile-service-registry,chenile-proxies,chenile-security, andchenile-messagingprovide integration capabilities around service interaction.chenile-process-managementadds long-running orchestration over parent and child processes.chenile-bdd,chenile-others, andcconfigprovide supporting capabilities.
Architecture Layers
Layer 1: Build and version baseline
Repository:
chenile-parent
This is the Maven super-parent for the ecosystem. It inherits from Spring Boot and centralizes Java version, Spring Boot version, library versions, plugin versions, and Chenile artifact versions for all sibling repositories.
Layer 2: Core runtime
Repository:
chenile-core
This is the runtime substrate that the rest of the framework builds on. Its main concerns are:
- request and event normalization into
ChenileExchange - execution through an interceptor and orchestration pipeline
- service definition and operation definition loading
- HTTP adaptation
- state machine support
- persistence and utility helpers
Layer 3: Application blueprints
Repositories:
chenile-query-workflow-blueprintschenile-process-management
These repositories encode higher-level service patterns:
- query services backed by metadata and MyBatis
- workflow-enabled services built on Chenile STM
- long-running process orchestration with sub-process tracking
Layer 4: Integration capabilities
Repositories:
chenile-service-registrychenile-proxieschenile-securitychenile-messaging
These repositories make the core runtime usable in distributed, secured, and event-driven deployments.
Layer 5: Testing and operational support
Repositories:
chenile-bddchenile-otherscconfig
Runtime Model
The runtime center of gravity is in chenile-core.
Common request model
Chenile normalizes incoming work into a ChenileExchange. That exchange carries:
- request metadata
- selected service and operation
- request body and files
- resolved target bean and method
- response and exception state
Interceptor highway
The typical execution path is:
- build a
ChenileExchange - run fixed and interpolated interceptors
- resolve the target service bean and method
- transform the payload into target Java types
- invoke the service method
- build the response
Dependency Direction Across Repositories
At a high level:
- Everything inherits from
chenile-parent. chenile-coreprovides the most reused runtime foundation.chenile-query-workflow-blueprintsdepends heavily on the core libraries.chenile-service-registry,chenile-proxies,chenile-security,chenile-messaging,chenile-process-management,chenile-others, andcconfigsit above the shared parent and consume selected Chenile runtime libraries where needed.chenile-bddprovides testing support rather than serving as a runtime foundation.
Build and Release Workflow
All 11 repositories follow a similar Makefile pattern:
build:mvn -Drevision=$(version) installdeploy:mvn -B -DskipTests -Drevision=$(version) -DperformRelease=true deploytag: creates an annotated git tagfind-latest-local-tag: usesgit describe | cut -d- -f1
The version comes from a repo-local text file such as chenile-version.txt or chenile-core-version.txt.
Release order
For versioned multi-repo releases, the correct sequence is:
- update
chenile-parent - update the other 10 repositories to point to the new
chenile-parent - run local build verification
- commit and tag each repository
- deploy
chenile-parent - confirm
org.chenile:chenile-parent:<version>is visible in Maven Central - only then deploy the remaining 10 repositories
Why annotated tags matter
git describe prefers annotated tags by default. If a lightweight tag is created, git describe may still resolve to the previous annotated tag, which makes the release metadata misleading.