Business-relevant workflow
The demo models a digital onboarding or loan eligibility journey instead of a generic hello-world endpoint, keeping the story close to banking operations.
Client demo strategy
Recommended demo app
A compact enterprise application that shows Open Liberty as a production-ready MicroProfile runtime behind an NGINX web tier. The app demonstrates canary routing, operational health, JVM metrics, and edge hardening in one business-relevant workflow.
Capability story
The demo models a digital onboarding or loan eligibility journey instead of a generic hello-world endpoint, keeping the story close to banking operations.
Stable users receive the current scoring response from Instance A. Beta users receive the experimental risk model response from Instance B.
Target architecture
OpenShift target platform
External demo traffic enters through an OpenShift Route and reaches the NGINX reverse proxy service.
NGINX remains the L7 control point for header canary routing, hardening headers, rate limiting, and custom error pages.
Liberty A and Liberty B run as separate OpenShift Deployments or deployment variants so stable and beta traffic can be observed independently.
MicroProfile health and metrics are exposed through NGINX, while OpenShift can use probes for runtime lifecycle management.
CI/CD and GitOps
Jenkins should not deploy directly to OpenShift in the final flow. It should publish artifacts to Nexus and update the GitOps repository or manifest image tag, leaving OpenShift GitOps to reconcile the cluster.
Client requirement map
| Requirement | Demo implementation | Proof point |
|---|---|---|
| L7 Load Balancing | Two Open Liberty workloads behind one NGINX reverse proxy on OpenShift. | Requests are served through NGINX, not direct Liberty ports. |
| Header-based Canary | NGINX routes version: beta to Instance B. |
Response body shows instance: B and beta flags. |
| MicroProfile Health | Liberty exposes /health/live through NGINX. |
Wiki and demo show liveness status. |
| MicroProfile Metrics | Liberty exposes /metrics through NGINX. |
JVM thread count is highlighted from MP metrics output. |
| Hardening | NGINX config includes HSTS, custom errors, and rate limiting. | Brute-force simulation triggers throttling on app context. |
| Enterprise delivery | Jenkins builds, Nexus stores artifacts, OpenShift GitOps deploys. | Release promotion is visible through versioned artifacts and GitOps sync. |
Application scope
/appLanding page showing the active backend instance./app/api/applicationsMock onboarding application records./app/api/eligibilityLoan eligibility scoring endpoint./app/api/instanceReturns instance, version, hostname, and feature flags./app/loginProtected context for NGINX rate-limit demonstration./health/liveMicroProfile liveness endpoint exposed via NGINX./health/readyMicroProfile readiness endpoint exposed via NGINX./metricsMicroProfile metrics endpoint for JVM thread count./openapiOpenAPI document for API discovery.Traffic steering
curl http://localhost/app/api/instance
curl -H "version: beta" http://localhost/app/api/instance
The beta response should visibly include instance: B,
version: beta, and a feature flag such as
new-risk-model.
MicroProfile observability
Expose /health/live through NGINX and show an aggregate green
liveness status in the demo.
Read MicroProfile metrics from /metrics and highlight the JVM thread
count as the required runtime signal.
NGINX hardening
/app/login and high-risk app contexts.
Demo flow
version: beta and show the request is served by Instance B./health/live through NGINX and show liveness status./metrics and highlight the JVM thread count metric./app/login to show rate limiting.Delivery plan
brac-poc-openliberty-v5/
|-- app/ Open Liberty MicroProfile application
|-- liberty/ server.xml and runtime config
|-- nginx/ reverse proxy, hardening, error pages
|-- deploy/
| |-- openshift/ Deployment, Service, Route, ConfigMap, Secret templates
| `-- gitops/ Kustomize or Helm overlays consumed by OpenShift GitOps
|-- jenkins/ Jenkinsfile and pipeline helper scripts
|-- docs/ Cloudflare Pages wiki
|-- docker-compose.yml two Liberty instances plus NGINX
`-- README.md local runbook