A Spring Boot microservice for determining messages (notifications and announcements) for a user, optimized as a demonstration project for Java application modernization and upgrade scenarios.
This project is based on uPortal, an open-source enterprise portal framework. The messaging service provides a REST API for managing user-targeted notifications and announcements with audience filtering, time-based delivery, and action buttons.
Primary Purpose: This repository serves as a reference implementation for modernizing legacy Java applications, demonstrating upgrade patterns, dependency management, and containerized development workflows.
This project is optimized for DevContainers, providing a consistent, reproducible development environment with all required tools pre-configured.
- Clone this repository
- Open in VS Code
- When prompted, click "Reopen in Container" (or use Command Palette:
Dev Containers: Reopen in Container) - The devcontainer will automatically set up Java, Maven, and all dependencies
- Build the project:
mvn clean install - Run the application:
mvn spring-boot:run
- Java: 1.8 (legacy version - upgrade target)
- Spring Boot: 1.5.9.RELEASE (legacy version)
- Build Tool: Maven
- Packaging: WAR
- Framework: Spring MVC, Spring Data REST
This project demonstrates common challenges and solutions for upgrading legacy Java applications:
- Upgrading from Java 8 to modern LTS versions (Java 11, 17, 21)
- Migrating Spring Boot 1.x to Spring Boot 3.x
- Resolving deprecated dependencies and APIs
- Modernizing build configurations
- Containerization and cloud-native patterns
- Testing strategies during upgrades
src/
├── main/
│ ├── java/edu/wisc/my/messages/
│ │ ├── controller/ # REST API endpoints
│ │ ├── service/ # Business logic & filtering
│ │ ├── model/ # Data models
│ │ ├── data/ # Data access layer
│ │ ├── exception/ # Custom exceptions
│ │ └── time/ # Time-based predicates
│ └── resources/
│ ├── application.properties
│ └── messages.json # Message data store
└── test/ # Unit and integration tests
# Build the project
mvn clean package
# Run tests
mvn test
# Run integration tests
mvn verify
# Start the application
mvn spring-boot:runGET /messages- Retrieve messages for authenticated user- Message filtering based on audience, date ranges, and user groups
The project includes comprehensive test coverage:
- Unit Tests:
*Test.java - Integration Tests:
*IT.java - Code coverage reports via Cobertura
For detailed API documentation and usage examples, see docs.
This is a demonstration project for Java upgrade scenarios. Feel free to use it as a reference for your own modernization efforts.
See LICENSE file for details.