CSV Payments Monolith Walkthrough
This page documents the current monolith topology in examples/csv-payments.
What exists today
- Monolith parent POM:
examples/csv-payments/pom.monolith.xml - Monolith runtime module:
examples/csv-payments/monolith-svc/pom.xml - Runtime mapping scenario:
examples/csv-payments/config/runtime-mapping/monolith.yaml - Build script:
examples/csv-payments/build-monolith.sh
Source layout clarification
- Service source code remains in service modules.
monolith-svcaggregates those sources during the monolith build and packages the runnable runtime.monolith-svcalso merges generated orchestrator client-step sources and pipeline metadata needed at runtime.
Packaging details (important)
monolith-svc uses the same merge pattern as other csv-payments modules:
maven-resources-pluginmerges role outputs fromtarget/classes-pipeline/*intotarget/classesbefore Quarkus packaging.- Monolith additionally copies orchestrator metadata needed by the harness/runtime boundary into
target/classes/META-INF/pipeline:telemetry.jsonorchestrator-clients.properties
order.jsonmust come from monolith generation for the active transport/layout. It should not be overwritten by orchestrator metadata.
Without these metadata files, monolith startup can fail with errors such as: Pipeline order metadata not found. Ensure META-INF/pipeline/order.json is generated at build time.
Build the monolith runtime
bash
./examples/csv-payments/build-monolith.sh -DskipTestsWhat the script does:
- Applies monolith runtime mapping.
- Installs
examples/csv-payments/pom.xml(-N install) so module parent descriptors are resolvable in clean local repositories (including CI jobs). - Ensures development certificates exist for module-local test/runtime launches.
- Builds
pom.monolith.xml. - Uses local transport for in-process step calls.
- Restores previous runtime mapping file after build.
Run monolith E2E
bash
./mvnw -f examples/csv-payments/pom.xml -pl orchestrator-svc \
-Dcsv.runtime.layout=monolith -Dtest=CsvPaymentsEndToEndIT testImportant detail:
- The test class lives in
orchestrator-svc. - In monolith mode, it launches
monolith-svcrunnable JAR. orchestrator-svcis the harness;monolith-svcis the runtime under test.
CI expectation
Monolith support is complete only when CI runs both:
- Monolith build (
build-monolith.sh) - Monolith E2E (
CsvPaymentsEndToEndITwith-Dcsv.runtime.layout=monolith)
Common failure signals
Expected executable jar at ../monolith-svc/target/quarkus-app/quarkus-run.jar: monolith build not run before test.Pipeline order metadata not found...: monolith packaging did not include orchestrator pipeline metadata inMETA-INF/pipeline.- Missing tables (for example
relation ... does not exist): launched runtime is not creating schema in the test DB. - gRPC connectivity errors in monolith mode: transport/layout mismatch (using network client steps where local is expected).