- Quick Start
- Repositories
- Challenge
- Target Outcomes
- What Participants Will Learn
- Devin Features Exercised
- Difficulty
- Estimated Time
- Going Further
- Notes
- ts-plsql-oracle-forms-hrms
- uc-legacy-modernization-oracle-forms-to-java
Paste this prompt into Devin to try migrating Oracle Forms PL/SQL to Java:
Migrate the Employee Management module from
ts-plsql-oracle-forms-hrms to Java. Analyze
plsql/packages/PKG_EMPLOYEE.pks and PKG_EMPLOYEE.pkb to
understand the business logic. Use the scaffolded project in
uc-legacy-modernization-oracle-forms-to-java/java-target/ as
your starting point.
Create:
1. Spring Boot REST controllers matching the PL/SQL
package procedures
2. JPA entities matching the schema in schema/tables/
3. Service classes that preserve the business rules from
PKG_EMPLOYEE
4. Unit tests verifying business logic parity
5. A MIGRATION_NOTES.md documenting translation decisions
- ts-plsql-oracle-forms-hrms — source PL/SQL estate
- uc-legacy-modernization-oracle-forms-to-java — scaffolded Java target project
Migrate an Oracle Forms PL/SQL module to a modern Java (Spring Boot) application. Starting from the PL/SQL packages and database schema in the source repo, use Devin to generate a clean Spring Boot project with JPA entities, REST APIs matching the PL/SQL procedures, service classes that faithfully translate the business logic, and unit tests that verify parity.
This is the execution phase of Oracle Forms modernization. Devin reads the PL/SQL packages, understands the business rules (validations, calculations, state transitions), and translates them to idiomatic Java — preserving behavior while modernizing the architecture.
- Spring Boot REST controllers with endpoints matching PL/SQL package procedures
- JPA entities with proper relationships and constraints from DDL schemas
- Service classes that faithfully translate PL/SQL business logic to Java
- Unit tests verifying business logic parity with PL/SQL originals
MIGRATION_NOTES.mddocumenting each translation decision (PL/SQL cursor → JPA query, PL/SQL exception → Java exception, PL/SQL record type → Java DTO, etc.)- PR with the migration code, tests, and documentation
- How Devin translates PL/SQL business logic (procedures, functions, cursors, exceptions) to Java equivalents
- How PL/SQL data access patterns map to JPA/Hibernate (cursors → repositories, DML → JPA methods)
- How PL/SQL validation logic maps to Java Bean Validation or service-layer checks
- The value of migration notes for audit trail and reviewability
- How different PL/SQL packages represent different levels of migration difficulty
- Cross-language code comprehension (PL/SQL → Java)
- Code generation with architectural decisions
- Test generation for migration parity
- PR creation with code + documentation
- AskDevin for pre-session planning
- DeepWiki for understanding package dependencies
- Child sessions for parallel migration of multiple packages
Intermediate to Advanced
60 minutes
- Divide-and-conquer with child sessions: Each PL/SQL package is an independent migration unit. A parent session can analyze the estate, then spawn one child session per package (PKG_EMPLOYEE, PKG_PAYROLL, PKG_LEAVE, PKG_PERFORMANCE, PKG_SECURITY). Each child follows the same migration playbook and opens its own PR.
- Playbook-driven migration: Encode the migration methodology (parse PL/SQL package spec → create JPA entities → build service layer → generate REST endpoints → write parity tests → document decisions) as a playbook. Every child session follows the same steps.
- Scheduled regression testing: After initial migration, configure a scheduled session that runs the parity tests weekly to catch regressions.
- Event-driven migration: Connect a webhook so that when a PL/SQL package is modified in the source repo, Devin automatically updates the corresponding Java code and re-runs parity tests.
- Team-based review: Multiple engineers can review migration PRs simultaneously. PR comments trigger Devin to iterate on specific translation decisions.
- The scaffolded project in
uc-legacy-modernization-oracle-forms-to-java/java-target/containspom.xml,docker-compose.yml, and a basic Spring Boot structure — Devin should build on this scaffold - The
uc-legacy-modernization-oracle-forms-to-java/migration-plan/directory contains pre-built planning artifacts (assessment-report.md,component-mapping.md,decision-log.md) that can guide the migration - Participants can choose which PL/SQL package to migrate — PKG_EMPLOYEE is the recommended starting point (moderate complexity)
- PKG_SECURITY contains intentional vulnerabilities (MD5, SQL injection) — the Java version should fix these while preserving functionality
- This module builds on Oracle Forms System Understanding and Oracle Forms Migration Planning — participants who completed those modules will have richer context
Repository: ts-plsql-oracle-forms-hrms
Source Oracle Forms estate with PL/SQL packages containing the business logic to migrate. Key packages: PKG_EMPLOYEE (employee CRUD + validations), PKG_PAYROLL (salary calculations), PKG_LEAVE (leave balance management), PKG_PERFORMANCE (review workflows), PKG_SECURITY (authentication + authorization — contains intentional vulnerabilities).
Repository: uc-legacy-modernization-oracle-forms-to-java
Scaffolded Spring Boot project for the Java migration target. Contains:
java-target/— Spring Boot project structure withpom.xml,docker-compose.yml, and basic application setupmigration-plan/— pre-built planning artifacts (assessment-report.md,component-mapping.md,decision-log.md)
Each participant creates a workshop-<attendee_id> branch from main and pushes their work there.
Migrate the Employee Management module from
ts-plsql-oracle-forms-hrms to Java. Analyze
plsql/packages/PKG_EMPLOYEE.pks and PKG_EMPLOYEE.pkb to
understand the business logic, validations, and data access
patterns.
Use the scaffolded project in
uc-legacy-modernization-oracle-forms-to-java/java-target/ as
your starting point. Create:
1. Spring Boot REST controllers matching the PL/SQL package
procedures (hire, terminate, transfer, promote, etc.)
2. JPA entities matching the schema in schema/tables/
(employees, departments, job_history, etc.) with proper
relationships and constraints
3. Service classes that preserve the business rules from
PKG_EMPLOYEE (validation logic, status transitions,
department transfer rules)
4. Unit tests verifying business logic parity — the Java
version should produce identical results to the PL/SQL
for the same inputs
5. A MIGRATION_NOTES.md documenting each translation
decision: PL/SQL cursor → JPA query, PL/SQL exception →
Java exception, PL/SQL record type → Java DTO, etc.
- "What business rules does PKG_EMPLOYEE enforce? What validations need to be preserved in the Java version?"
- "How should PL/SQL cursors in PKG_EMPLOYEE be translated to JPA — should I use Spring Data repositories, JPQL queries, or native SQL?"
- "What are the differences between PKG_EMPLOYEE.pks (spec) and PKG_EMPLOYEE.pkb (body)? What private procedures exist?"
- Use the refined understanding to adjust the migration approach
Open each repo's DeepWiki page to understand:
- ts-plsql-oracle-forms-hrms — PL/SQL package dependencies, Forms-to-package call patterns, and the data model
- uc-legacy-modernization-oracle-forms-to-java — the scaffolded project structure and pre-built migration plan
- Review the Java code — does the service layer faithfully translate the PL/SQL business rules? Are there missed validations?
- Review MIGRATION_NOTES.md — does it document each translation decision clearly?
- Leave a comment asking Devin to fix the security vulnerabilities from PKG_SECURITY when migrating (e.g., "Replace MD5 with bcrypt, use parameterized queries instead of string concatenation")
- Leave a comment asking Devin to add integration tests using Testcontainers for the database layer
- Cross-language translation: Devin reads PL/SQL package specs and bodies, understanding procedures, cursors, exceptions, and record types, and translates them to idiomatic Spring Boot Java
- Business rule preservation: Migration parity tests verify that the Java version enforces the same validations and produces the same results as the PL/SQL original
- Parallelizable migration: Each PL/SQL package is an independent migration unit — child sessions can migrate multiple packages simultaneously
- Audit trail: Migration notes document every translation decision, creating a reviewable record of how PL/SQL constructs became Java code