Project Shape
This is a Java/Spring Boot REST microservice for Kinesis account, investor, vehicle, and financial-period workflows. Its general request path is:
HTTP request
-> controller
-> service interface and implementation
-> repository / DAO
-> Oracle database
-> mapper
-> JSON response
That’s the usual path, but this project also handles long-running document work, file imports/exports, and calls to other services.
A good starting point is one feature end to end. For example, transaction listing runs from VehicleInvestorProcessController.java through the service and VehicleInvestorProcessDAO.java, then maps database results to API types. For a more involved workflow, transaction import goes from the same controller into DefaultVehicleInvestorProcessService.java, where Excel files are converted, loaded into Oracle, and processed with a database procedure.
The application entry point is Application.java. The packages organize the main concerns: controller, service, repository, domain (entities, API models and mappers), security, client, utility, and pdf.
What It Uses
Java: object-oriented design, interfaces, generics, collections and streams, exceptions, date/time and numeric types, file I/O, and concurrency. The service uses CompletableFuture and executors for document processing, as well as Java process APIs to run SQL*Loader. Lombok generates some routine code.
Spring Boot and Spring: dependency injection, component scanning, configuration and profiles, REST controllers, request binding, validation, transactions, and asynchronous work. Learn how annotations such as @Service, @RestController, @Transactional, and @ConfigurationProperties affect runtime behavior.
HTTP and API design: REST endpoints, JSON, HTTP status codes, multipart uploads, streaming downloads, API versioning, and OpenAPI documentation. This repository contains the backend, not its frontend.
Security: authentication and authorization are distinct. Spring Security filter chains and internal DWS security libraries handle authentication; endpoint permissions are expressed with @PreAuthorize. CORS, TLS, client certificates, keystores, and truststores matter for local and service-to-service calls. The architecture test requires explicit authorization on controller endpoints: ControllerAuthorizationArchitectureTest.java.
Oracle and persistence: SQL, PL/SQL, Oracle-specific types and SQL, JDBC, connection pooling, Hibernate/JPA, and transaction boundaries. The application uses both JPA-related dependencies and explicit JDBC operations, including JdbcTemplate, SimpleJdbcCall, and custom SQL. MapStruct generates entity-to-API mappings, such as VehicleInvestorProcessMapper.java.
Domain knowledge: accounts, investors, vehicles, transactions, financial activities, reconciliations, periods, and document statuses. Financial concepts such as allocations, distributions, balances, and units are central to understanding whether a change is correct, not just whether it compiles.
File and document processing: Apache POI/JXLS for Excel, OpenCSV, SQL*Loader for bulk Oracle imports, FreeMarker/HTML-to-PDF tooling, and PDFBox. Imports require attention to validation, temporary files, rollback, resource usage, and safe error reporting.
Service integration: OpenFeign, RestTemplate, and Spring WebClient are used for downstream HTTP calls. Resilience4j circuit breakers, retries, timeouts, service discovery, and mutual TLS are useful concepts here.
Build and delivery: the project uses Gradle, not Maven. The wrapper is pinned to Gradle 9.5.1. build.gradle also applies internal DWS plugins for conventions, dependencies, publishing, docs, analysis, and deployment. Jenkinsfile loads an internal pipeline library.
Deployment and operations: the repo has Helm values, but no standalone Dockerfile. The internal deployment plugins and pipeline supply much of the image and release process. Container basics, Kubernetes/Helm concepts, CI, application configuration, and Actuator/Micrometer metrics are useful; Dockerfile authoring and Maven are not immediate project needs.
Testing: JUnit 5, Mockito, Spring Boot tests, MockMvc, Spring REST Docs, and H2. H2 is a test aid, not a substitute for the supported Oracle database. Some integration tests are disabled, so check whether a test actually runs before relying on its coverage. See MockMvcBase.java and application-test.yaml.
A Practical Learning Path
Orient yourself: read the README.md, browse the package structure, and learn basic Git and IDE navigation. The README documents local prerequisites and private configuration.
Get comfortable with Java: practice reading interfaces and implementations, collections, exceptions, streams, BigDecimal/BigInteger, dates, and tests. Then learn the project’s Lombok conventions.
Learn Spring Boot fundamentals: understand dependency injection, bean configuration, profiles, property binding, and how controllers, services, and repositories fit together.
Follow a small REST endpoint: trace controller → service interface → implementation → repository → mapper → response model. Understand its inputs, response codes, validation, and authorization.
Build SQL and Oracle skills: learn joins, grouping, indexes, transactions, JDBC, and Oracle syntax. Then investigate the schema, views, and stored procedures used by the feature you’re changing.
Learn security and service calls: trace an endpoint’s @PreAuthorize rule, then follow one downstream request. Understand CORS, TLS/mTLS, timeouts, retries, and circuit breakers.
Study the heavier workflows: trace transaction import through ExcelFileProcessor.java and SqlLoader.java. Then study document generation and asynchronous processing in DefaultPdfGenerationService.java.
Learn tests and delivery: run focused tests, understand the H2 setup and its Oracle limitations, then explore Gradle tasks, dependency locking, Jenkins, Helm, and the internal DWS pipeline.
Important Boundaries
Some of the most important behavior is outside this repository: internal DWS plugin/framework behavior, Oracle schema objects and stored procedures, environment secrets and configuration, and downstream service implementations. You’ll need the team’s documentation or access to those systems to understand the full runtime behavior. Also, although the workspace context records a failed compileJava, the terminal history available to me now shows an interrupted npm login, not the Gradle error output, so I can’t identify the cause of that compile failure from this snapshot.
For your first contribution, I’d focus on Java, Spring MVC, SQL/Oracle, and the test setup, then follow the specific feature’s code path. You do not need to master every library or the deployment platform before making a useful change.
Top comments (0)