This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
This is a multi-module Maven project containing educational workshops for Java development on OpenShift. The repository demonstrates various Java frameworks and patterns for cloud-native applications.
- Java 21
- Spring Boot 3.5.x with Spring Cloud 2025.1.1
- Quarkus 3.30.8
- Apache Kafka with Spring Cloud Stream
- PostgreSQL databases
- Testcontainers for integration testing
- Maven 3.x for builds
- Dekorate/Quarkus extensions for OpenShift deployment
The repository is organized into independent workshop modules:
- basic-with-db: Quarkus applications (person-app, insurance-app) demonstrating REST APIs with PostgreSQL
- micro-springboot: Spring Boot microservices (person-service, insurance-service) with database integration
- event-driven: Event-driven architecture using Kafka and Spring Cloud Stream, including:
- Producer/consumer examples
- Event gateway, order-service, payment-service, shipment-service
- Order-query-service for CQRS pattern
- Kafka Streams examples (consumer-streams, producer-streams)
- messaging: Simple ActiveMQ messaging examples (producer, consumer, counter)
- micro-view: Microservices view pattern (department, employee, organization)
- camel-spring: Apache Camel integration with Spring Boot
- mesh-with-db: Service mesh demonstrations with Quarkus
- cpu-killer: Utility application for resource testing
Each module is self-contained with its own pom.xml and can be built independently.
Build entire project:
mvn clean installBuild specific module:
cd <module-name>
mvn clean installRun tests:
mvn testRun tests for specific module:
cd <module-name>
mvn testSkip tests during build:
mvn clean install -DskipTestsGenerate code coverage report (JaCoCo):
mvn test
# Reports generated in target/site/jacoco/Run locally:
cd <module-name>/<service-name>
mvn spring-boot:runRun in dev mode:
cd <module-name>/<app-name>
mvn quarkus:devBuild native image:
mvn clean package -PnativeAll modules use JUnit 5 for testing. Integration tests leverage Testcontainers to spin up real dependencies (PostgreSQL, Kafka) in Docker containers.
Example test execution pattern:
- Spring Boot tests: Use
@SpringBootTestwith@Testcontainersand@ServiceConnection - Quarkus tests: Use
@QuarkusTestwith Dev Services (auto-configured Testcontainers)
Run single test class:
mvn test -Dtest=<TestClassName>- Configuration in
src/main/resources/application.yml - Environment variables for database credentials:
DATABASE_HOST,DATABASE_NAME,DATABASE_USER,DATABASE_PASS
- Dekorate annotations in application.yml for OpenShift deployment configuration
- Configuration in
src/main/resources/application.properties - Profile-specific config using
%prod,%dev,%testprefixes - Environment variables (PostgreSQL):
POSTGRES_USER,POSTGRES_PASSWORD,POSTGRES_DB
- Liquibase for database migrations (enabled by default)
Quarkus apps use the OpenShift extension for deployment:
mvn clean package -Dquarkus.kubernetes.deploy=trueConfiguration in application.properties:
quarkus.kubernetes.deployment-target=openshiftquarkus.openshift.route.expose=true- Secret mappings for database credentials
Spring Boot apps use Dekorate for generating OpenShift manifests:
- Manifests auto-generated in
target/classes/META-INF/dekorate/ - Configuration via
dekorate.*properties in application.yml - Supports auto-deploy with
dekorate.openshift.auto-deploy-enabled=true
- Spring Cloud Stream for Kafka integration
- Functional programming model using
java.util.function.Function/Consumer - Topic bindings configured in application.yml
- CQRS pattern demonstrated in order-query-service
- Event sourcing patterns in order/payment/shipment services
- JPA/Hibernate for Spring Boot applications
- Hibernate ORM with Panache for Quarkus applications
- Liquibase migrations for Quarkus (changeLog in db/changeLog.sql)
- Hibernate auto-DDL for Spring Boot (ddl-auto: create)
- Spring Boot Actuator endpoints exposed at
/actuator/* - Quarkus health checks at
/q/health(liveness/readiness) - Prometheus metrics enabled
- Custom readiness probes include database connectivity
The project uses CircleCI for continuous integration:
- Test job: Runs
mvn teston all modules - Analyze job: Runs SonarCloud analysis via
mvn verify sonar:sonar - Configuration in
.circleci/config.yml
- SonarCloud integration for code quality metrics
- JaCoCo plugin for code coverage tracking
- Coverage reports uploaded to SonarCloud during CI