The layers between Spring Boot and your business rules.¶
Keep HTTP on Spring Boot and WebFlux. Add command and query buses, coordination engines, service clients, policy-based security, and telemetry as the service needs them.
Start with a working build¶
Build a small HTTP service, send a command through Jafly, and test its response.
Find the right component¶
Choose a library or provider for the operation you need. Check its setup requirements and examples before adding it.
Understand the boundaries¶
See what Spring provides, what Jafly adds, and which decisions belong to your service.
Find the layer your service needs¶
Choose a capability below to find its contracts and provider integrations.
Security and identity¶
Map principals to policy decisions with security contracts, a reactive resource server, method guards, and provider adapters.
Business operations¶
Dispatch commands and queries through validation, authorization, handlers, and optional event and cache bridges.
External services¶
Connect HTTP, SOAP, gRPC, notifications, callbacks, and Agentic through explicit service and provider integrations.
Event-driven integration¶
Use event contracts and transport adapters for in-process events, Kafka, RabbitMQ, PostgreSQL, and inbound webhooks.
Domain and data¶
Choose reactive data helpers, optional event history, cache providers, content storage, and signature adapters.
Business coordination¶
Coordinate workflows, compensating sagas, and try-confirm-cancel steps with explicit recovery and failure policies.
Service operations¶
Connect application telemetry, HTTP conventions, health checks, and centralized configuration.
Team-wide architecture¶
Share a dependency train, build conventions, service-layer starters, common types, validation, and extension contracts.
Choose what belongs in your service¶
A service can use CQRS without adopting an event store, or use a client adapter without a workflow engine. Add each dependency for a specific operation.
Kernel types and role-specific starters provide shared service conventions. CQRS, orchestration, and event sourcing add more structure when the application needs it.
Providers remain separate dependencies, so you can choose the cache, messaging transport, identity provider, or content store for each service. The parent and BOM align their versions while your application keeps its own version.
Follow one operation¶
In the first service, a controller accepts a customer application and sends SubmitApplication. The command bus validates it, runs configured authorization, and invokes the handler.
The handler owns the business decision. Event publishing, cached-query invalidation, and infrastructure calls depend on the modules, beans, and annotations you configure.