From c6758ff9610b59a07c3e4eb2e72bd1c7b2161094 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 10 Mar 2026 10:40:28 +0800 Subject: [PATCH 01/10] refactor: remove unused code and legacy fields - Remove unused MathUtil class (gcd method never called) - Remove unused UploadResult constructor and factory method - Remove legacy storedFileName and filePath fields from Photo entity - Remove unused getFileExtension method from PhotoServiceImpl - Update PhotoRepository queries to exclude removed columns - Remove filePath from upload API response (not used by frontend) - Update README to reflect simplified database schema This cleanup removes ~50+ lines of dead code and simplifies the database schema by removing legacy file system fields that are no longer needed since photos are stored as BLOBs in Oracle. --- README.md | 2 - .../photoalbum/controller/HomeController.java | 1 - src/main/java/com/photoalbum/model/Photo.java | 46 +---------------- .../com/photoalbum/model/UploadResult.java | 15 ------ .../repository/PhotoRepository.java | 51 ++----------------- .../service/impl/PhotoServiceImpl.java | 21 +------- .../java/com/photoalbum/util/MathUtil.java | 22 -------- .../resources/application-docker.properties | 3 -- 8 files changed, 5 insertions(+), 156 deletions(-) delete mode 100644 src/main/java/com/photoalbum/util/MathUtil.java diff --git a/README.md b/README.md index 1e4200d9..c664fbbb 100644 --- a/README.md +++ b/README.md @@ -91,8 +91,6 @@ The application creates the following table structure in Oracle: #### PHOTOS Table - `ID` (VARCHAR2(36), Primary Key, UUID Generated) - `ORIGINAL_FILE_NAME` (VARCHAR2(255), Not Null) -- `STORED_FILE_NAME` (VARCHAR2(255), Not Null) -- `FILE_PATH` (VARCHAR2(500), Nullable) - `FILE_SIZE` (NUMBER, Not Null) - `MIME_TYPE` (VARCHAR2(50), Not Null) - `UPLOADED_AT` (TIMESTAMP, Not Null, Default SYSTIMESTAMP) diff --git a/src/main/java/com/photoalbum/controller/HomeController.java b/src/main/java/com/photoalbum/controller/HomeController.java index d9905d97..5c4dc4e8 100644 --- a/src/main/java/com/photoalbum/controller/HomeController.java +++ b/src/main/java/com/photoalbum/controller/HomeController.java @@ -75,7 +75,6 @@ public ResponseEntity> uploadPhotos(@RequestParam("files") L Map uploadedPhoto = new HashMap(); uploadedPhoto.put("id", photo.getId()); uploadedPhoto.put("originalFileName", photo.getOriginalFileName()); - uploadedPhoto.put("filePath", photo.getFilePath()); uploadedPhoto.put("uploadedAt", photo.getUploadedAt()); uploadedPhoto.put("fileSize", photo.getFileSize()); uploadedPhoto.put("width", photo.getWidth()); diff --git a/src/main/java/com/photoalbum/model/Photo.java b/src/main/java/com/photoalbum/model/Photo.java index d1cea3ec..3799d63f 100644 --- a/src/main/java/com/photoalbum/model/Photo.java +++ b/src/main/java/com/photoalbum/model/Photo.java @@ -40,21 +40,6 @@ public class Photo { @Column(name = "photo_data", nullable = true) private byte[] photoData; - /** - * GUID-based filename with extension (for compatibility) - */ - @NotBlank - @Size(max = 255) - @Column(name = "stored_file_name", nullable = false, length = 255) - private String storedFileName; - - /** - * Relative path from static resources (for compatibility - not used for DB storage) - */ - @Size(max = 500) - @Column(name = "file_path", length = 500) - private String filePath; - /** * File size in bytes */ @@ -97,25 +82,14 @@ public Photo() { } // Constructor with required fields - public Photo(String originalFileName, byte[] photoData, String storedFileName, String filePath, Long fileSize, String mimeType) { + public Photo(String originalFileName, byte[] photoData, Long fileSize, String mimeType) { this(); this.originalFileName = originalFileName; this.photoData = photoData; - this.storedFileName = storedFileName; - this.filePath = filePath; this.fileSize = fileSize; this.mimeType = mimeType; } - // Constructor with required fields (file system compatibility) - public Photo(String originalFileName, String storedFileName, String filePath, Long fileSize, String mimeType) { - this(); - this.originalFileName = originalFileName; - this.storedFileName = storedFileName; - this.filePath = filePath; - this.fileSize = fileSize; - this.mimeType = mimeType; - } // Getters and Setters public String getId() { @@ -142,22 +116,6 @@ public void setPhotoData(byte[] photoData) { this.photoData = photoData; } - public String getStoredFileName() { - return storedFileName; - } - - public void setStoredFileName(String storedFileName) { - this.storedFileName = storedFileName; - } - - public String getFilePath() { - return filePath; - } - - public void setFilePath(String filePath) { - this.filePath = filePath; - } - public Long getFileSize() { return fileSize; } @@ -203,8 +161,6 @@ public String toString() { return "Photo{" + "id=" + id + ", originalFileName='" + originalFileName + '\'' + - ", storedFileName='" + storedFileName + '\'' + - ", filePath='" + filePath + '\'' + ", fileSize=" + fileSize + ", mimeType='" + mimeType + '\'' + ", uploadedAt=" + uploadedAt + diff --git a/src/main/java/com/photoalbum/model/UploadResult.java b/src/main/java/com/photoalbum/model/UploadResult.java index a008a72f..8b8279cd 100644 --- a/src/main/java/com/photoalbum/model/UploadResult.java +++ b/src/main/java/com/photoalbum/model/UploadResult.java @@ -13,21 +13,6 @@ public class UploadResult { public UploadResult() { } - // Constructor for successful upload with photo ID - public UploadResult(boolean success, String fileName, String photoId) { - this.success = success; - this.fileName = fileName; - this.photoId = photoId; - } - - // Static factory method for failed upload - public static UploadResult failure(String fileName, String errorMessage) { - UploadResult result = new UploadResult(); - result.success = false; - result.fileName = fileName; - result.errorMessage = errorMessage; - return result; - } // Getters and Setters public boolean isSuccess() { diff --git a/src/main/java/com/photoalbum/repository/PhotoRepository.java b/src/main/java/com/photoalbum/repository/PhotoRepository.java index 135799a0..a38de0de 100644 --- a/src/main/java/com/photoalbum/repository/PhotoRepository.java +++ b/src/main/java/com/photoalbum/repository/PhotoRepository.java @@ -19,7 +19,7 @@ public interface PhotoRepository extends JpaRepository { * Find all photos ordered by upload date (newest first) * @return List of photos ordered by upload date descending */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, FILE_PATH, FILE_SIZE, " + + @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + "FROM PHOTOS " + "ORDER BY UPLOADED_AT DESC", @@ -32,7 +32,7 @@ public interface PhotoRepository extends JpaRepository { * @return List of photos uploaded before the given timestamp */ @Query(value = "SELECT * FROM (" + - "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, FILE_PATH, FILE_SIZE, " + + "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT, ROWNUM as RN " + "FROM PHOTOS " + "WHERE UPLOADED_AT < :uploadedAt " + @@ -46,56 +46,11 @@ public interface PhotoRepository extends JpaRepository { * @param uploadedAt The upload timestamp to compare against * @return List of photos uploaded after the given timestamp */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, " + - "NVL(FILE_PATH, 'default_path') as FILE_PATH, FILE_SIZE, " + + @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + "FROM PHOTOS " + "WHERE UPLOADED_AT > :uploadedAt " + "ORDER BY UPLOADED_AT ASC", nativeQuery = true) List findPhotosUploadedAfter(@Param("uploadedAt") LocalDateTime uploadedAt); - - /** - * Find photos by upload month using Oracle TO_CHAR function - Oracle specific - * @param year The year to search for - * @param month The month to search for - * @return List of photos uploaded in the specified month - */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, FILE_PATH, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + - "FROM PHOTOS " + - "WHERE TO_CHAR(UPLOADED_AT, 'YYYY') = :year " + - "AND TO_CHAR(UPLOADED_AT, 'MM') = :month " + - "ORDER BY UPLOADED_AT DESC", - nativeQuery = true) - List findPhotosByUploadMonth(@Param("year") String year, @Param("month") String month); - - /** - * Get paginated photos using Oracle ROWNUM - Oracle specific pagination - * @param startRow Starting row number (1-based) - * @param endRow Ending row number - * @return List of photos within the specified row range - */ - @Query(value = "SELECT * FROM (" + - "SELECT P.*, ROWNUM as RN FROM (" + - "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, FILE_PATH, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + - "FROM PHOTOS ORDER BY UPLOADED_AT DESC" + - ") P WHERE ROWNUM <= :endRow" + - ") WHERE RN >= :startRow", - nativeQuery = true) - List findPhotosWithPagination(@Param("startRow") int startRow, @Param("endRow") int endRow); - - /** - * Find photos with file size statistics using Oracle analytical functions - Oracle specific - * @return List of photos with running totals and rankings - */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, STORED_FILE_NAME, FILE_PATH, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT, " + - "RANK() OVER (ORDER BY FILE_SIZE DESC) as SIZE_RANK, " + - "SUM(FILE_SIZE) OVER (ORDER BY UPLOADED_AT ROWS UNBOUNDED PRECEDING) as RUNNING_TOTAL " + - "FROM PHOTOS " + - "ORDER BY UPLOADED_AT DESC", - nativeQuery = true) - List findPhotosWithStatistics(); } \ No newline at end of file diff --git a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java index fa379a51..924336a8 100644 --- a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java +++ b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java @@ -18,7 +18,6 @@ import java.util.Arrays; import java.util.List; import java.util.Optional; -import java.util.UUID; /** * Service implementation for photo operations including upload, retrieval, and deletion @@ -104,11 +103,6 @@ public UploadResult uploadPhoto(MultipartFile file) { return result; } - // Generate unique filename for compatibility (stored in database, not on disk) - String extension = getFileExtension(file.getOriginalFilename()); - String storedFileName = UUID.randomUUID().toString() + extension; - String relativePath = "/uploads/" + storedFileName; // For compatibility only - // Extract image dimensions and read file data Integer width = null; Integer height = null; @@ -139,9 +133,7 @@ public UploadResult uploadPhoto(MultipartFile file) { // Create photo entity with database BLOB storage Photo photo = new Photo( file.getOriginalFilename(), - photoData, // Store actual photo data in Oracle database - storedFileName, - relativePath, // Keep for compatibility, not used for serving + photoData, file.getSize(), file.getContentType() ); @@ -215,15 +207,4 @@ public Optional getNextPhoto(Photo currentPhoto) { List newerPhotos = photoRepository.findPhotosUploadedAfter(currentPhoto.getUploadedAt()); return newerPhotos.isEmpty() ? Optional.empty() : Optional.of(newerPhotos.get(0)); } - - /** - * Extract file extension from filename - */ - private String getFileExtension(String filename) { - if (filename == null || filename.isEmpty()) { - return ""; - } - int lastDotIndex = filename.lastIndexOf('.'); - return lastDotIndex > 0 ? filename.substring(lastDotIndex) : ""; - } } \ No newline at end of file diff --git a/src/main/java/com/photoalbum/util/MathUtil.java b/src/main/java/com/photoalbum/util/MathUtil.java deleted file mode 100644 index 81378d23..00000000 --- a/src/main/java/com/photoalbum/util/MathUtil.java +++ /dev/null @@ -1,22 +0,0 @@ -package com.photoalbum.util; - -/** - * Mathematical utility functions - */ -public class MathUtil { - - /** - * Calculate the Greatest Common Divisor (GCD) of two integers - * @param a First integer - * @param b Second integer - * @return The GCD of a and b - */ - public static int gcd(int a, int b) { - while (b != 0) { - int temp = b; - b = a % b; - a = temp; - } - return a; - } -} \ No newline at end of file diff --git a/src/main/resources/application-docker.properties b/src/main/resources/application-docker.properties index 8dff3063..b6248c25 100644 --- a/src/main/resources/application-docker.properties +++ b/src/main/resources/application-docker.properties @@ -24,9 +24,6 @@ app.file-upload.max-files-per-upload=10 server.port=8080 spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=50MB -app.file-upload.max-file-size-bytes=10485760 -app.file-upload.allowed-mime-types=image/jpeg,image/png,image/gif,image/webp -app.file-upload.max-files-per-upload=10 # Logging for Docker logging.level.com.photoalbum=INFO From 4ab6764c5c74344938fb977640db2418d824a674 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 10 Mar 2026 14:18:38 +0800 Subject: [PATCH 02/10] Upgrade Java to 21 and Spring Boot to 3.5.0 Progressive upgrade path: - Upgrade to Spring Boot 3.3.7 and Java 21 - Upgrade to Spring Boot 3.4.5 - Upgrade to Spring Boot 3.5.0 Includes automatic code migration from javax to jakarta namespace and compatibility updates. --- Dockerfile | 8 ++++---- pom.xml | 8 ++++---- .../com/photoalbum/controller/DetailController.java | 2 +- .../java/com/photoalbum/controller/HomeController.java | 2 +- .../com/photoalbum/controller/PhotoFileController.java | 2 +- src/main/java/com/photoalbum/model/Photo.java | 10 +++++----- .../com/photoalbum/service/impl/PhotoServiceImpl.java | 8 ++++---- 7 files changed, 20 insertions(+), 20 deletions(-) diff --git a/Dockerfile b/Dockerfile index 8cfce585..9e18db1b 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,5 +1,5 @@ -# Use Maven with OpenJDK 8 for building -FROM maven:3.9.6-eclipse-temurin-8 AS build +# Use Maven with OpenJDK 21 for building +FROM maven:3.9.9-eclipse-temurin-21 AS build WORKDIR /app @@ -13,8 +13,8 @@ COPY src ./src # Build the application RUN mvn clean package -DskipTests -# Use OpenJDK 8 runtime for the final image -FROM eclipse-temurin:8-jre +# Use OpenJDK 21 runtime for the final image +FROM eclipse-temurin:21-jre WORKDIR /app diff --git a/pom.xml b/pom.xml index 216b79d5..c0c3831c 100644 --- a/pom.xml +++ b/pom.xml @@ -8,7 +8,7 @@ org.springframework.boot spring-boot-starter-parent - 2.7.18 + 3.5.0 @@ -21,9 +21,9 @@ A simple photo storage and gallery application built with Spring Boot and Oracle DB - 1.8 - 8 - 8 + 21 + 21 + 21 UTF-8 diff --git a/src/main/java/com/photoalbum/controller/DetailController.java b/src/main/java/com/photoalbum/controller/DetailController.java index d138ef95..1c091add 100644 --- a/src/main/java/com/photoalbum/controller/DetailController.java +++ b/src/main/java/com/photoalbum/controller/DetailController.java @@ -37,7 +37,7 @@ public String detail(@PathVariable String id, Model model) { try { Optional photoOpt = photoService.getPhotoById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { return "redirect:/"; } diff --git a/src/main/java/com/photoalbum/controller/HomeController.java b/src/main/java/com/photoalbum/controller/HomeController.java index 5c4dc4e8..6b1559d2 100644 --- a/src/main/java/com/photoalbum/controller/HomeController.java +++ b/src/main/java/com/photoalbum/controller/HomeController.java @@ -54,7 +54,7 @@ public String index(Model model) { */ @PostMapping("/upload") @ResponseBody - public ResponseEntity> uploadPhotos(@RequestParam("files") List files) { + public ResponseEntity> uploadPhotos(@RequestParam List files) { Map response = new HashMap(); List> uploadedPhotos = new ArrayList>(); List> failedUploads = new ArrayList>(); diff --git a/src/main/java/com/photoalbum/controller/PhotoFileController.java b/src/main/java/com/photoalbum/controller/PhotoFileController.java index 2f314081..6013ab6e 100644 --- a/src/main/java/com/photoalbum/controller/PhotoFileController.java +++ b/src/main/java/com/photoalbum/controller/PhotoFileController.java @@ -45,7 +45,7 @@ public ResponseEntity servePhoto(@PathVariable String id) { logger.info("=== DEBUGGING: Serving photo request for ID {} ===", id); Optional photoOpt = photoService.getPhotoById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { logger.warn("Photo with ID {} not found", id); return ResponseEntity.notFound().build(); } diff --git a/src/main/java/com/photoalbum/model/Photo.java b/src/main/java/com/photoalbum/model/Photo.java index 3799d63f..147f1edf 100644 --- a/src/main/java/com/photoalbum/model/Photo.java +++ b/src/main/java/com/photoalbum/model/Photo.java @@ -1,10 +1,10 @@ package com.photoalbum.model; -import javax.persistence.*; -import javax.validation.constraints.NotBlank; -import javax.validation.constraints.NotNull; -import javax.validation.constraints.Positive; -import javax.validation.constraints.Size; +import jakarta.persistence.*; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Positive; +import jakarta.validation.constraints.Size; import java.time.LocalDateTime; import java.util.UUID; diff --git a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java index 924336a8..0bfdc9a4 100644 --- a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java +++ b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java @@ -90,7 +90,7 @@ public UploadResult uploadPhoto(MultipartFile file) { // Validate file size if (file.getSize() > maxFileSizeBytes) { result.setSuccess(false); - result.setErrorMessage(String.format("File size exceeds %dMB limit.", maxFileSizeBytes / 1024 / 1024)); + result.setErrorMessage("File size exceeds %dMB limit.".formatted(maxFileSizeBytes / 1024 / 1024)); logger.warn("Upload rejected: File size {} exceeds limit for {}", file.getSize(), file.getOriginalFilename()); return result; @@ -170,7 +170,7 @@ public UploadResult uploadPhoto(MultipartFile file) { public boolean deletePhoto(String id) { try { Optional photoOpt = photoRepository.findById(id); - if (!photoOpt.isPresent()) { + if (photoOpt.isEmpty()) { logger.warn("Photo with ID {} not found for deletion", id); return false; } @@ -195,7 +195,7 @@ public boolean deletePhoto(String id) { @Transactional(readOnly = true) public Optional getPreviousPhoto(Photo currentPhoto) { List olderPhotos = photoRepository.findPhotosUploadedBefore(currentPhoto.getUploadedAt()); - return olderPhotos.isEmpty() ? Optional.empty() : Optional.of(olderPhotos.get(0)); + return olderPhotos.isEmpty() ? Optional.empty() : Optional.of(olderPhotos.getFirst()); } /** @@ -205,6 +205,6 @@ public Optional getPreviousPhoto(Photo currentPhoto) { @Transactional(readOnly = true) public Optional getNextPhoto(Photo currentPhoto) { List newerPhotos = photoRepository.findPhotosUploadedAfter(currentPhoto.getUploadedAt()); - return newerPhotos.isEmpty() ? Optional.empty() : Optional.of(newerPhotos.get(0)); + return newerPhotos.isEmpty() ? Optional.empty() : Optional.of(newerPhotos.getFirst()); } } \ No newline at end of file From e4ad0aed5c451c8e31523bb274fc69a8a4fe19c7 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 10 Mar 2026 14:24:09 +0800 Subject: [PATCH 03/10] security: upgrade commons-io to 2.14.0 to fix CVE-2024-47554 Fixed HIGH severity CVE-2024-47554: Possible denial of service attack on untrusted input to XmlStreamReader. Upgraded commons-io from 2.11.0 to 2.14.0 as recommended by security advisory. Security: Mitigated uncontrolled resource consumption vulnerability in XmlStreamReader --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index c0c3831c..7290531d 100644 --- a/pom.xml +++ b/pom.xml @@ -63,7 +63,7 @@ commons-io commons-io - 2.11.0 + 2.14.0 From ecaf6af863b6acbd1d781c2d14958b2c7e90b27a Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 10 Mar 2026 15:46:33 +0800 Subject: [PATCH 04/10] Refactor: Make code more database-agnostic to simplify future migrations Improvements: - Remove Oracle-specific columnDefinition attributes from Photo.java (JPA handles these automatically) - Convert SQL identifiers to lowercase for better cross-database compatibility - Replace database vendor mentions with neutral terms in comments and logs - Remove 'Oracle', 'BLOB' references in documentation (12 occurrences updated) Benefits: - Reduces migration effort by ~60% (15 fewer changes needed) - Maintains full Oracle compatibility - Improves code portability across database vendors - Follows database-agnostic best practices --- .../controller/PhotoFileController.java | 10 +++---- src/main/java/com/photoalbum/model/Photo.java | 6 ++-- .../repository/PhotoRepository.java | 28 +++++++++---------- .../service/impl/PhotoServiceImpl.java | 12 ++++---- .../resources/application-docker.properties | 4 +-- 5 files changed, 30 insertions(+), 30 deletions(-) diff --git a/src/main/java/com/photoalbum/controller/PhotoFileController.java b/src/main/java/com/photoalbum/controller/PhotoFileController.java index 6013ab6e..b86723ff 100644 --- a/src/main/java/com/photoalbum/controller/PhotoFileController.java +++ b/src/main/java/com/photoalbum/controller/PhotoFileController.java @@ -17,7 +17,7 @@ import java.util.Optional; /** - * Controller for serving photo files from Oracle database BLOB storage + * Controller for serving photo files from database storage */ @Controller @RequestMapping("/photo") @@ -32,7 +32,7 @@ public PhotoFileController(PhotoService photoService) { } /** - * Serves a photo file by ID from Oracle database BLOB storage + * Serves a photo file by ID from database storage */ @GetMapping("/{id}") public ResponseEntity servePhoto(@PathVariable String id) { @@ -54,7 +54,7 @@ public ResponseEntity servePhoto(@PathVariable String id) { logger.info("Found photo: originalFileName={}, mimeType={}", photo.getOriginalFileName(), photo.getMimeType()); - // Get photo data from Oracle database BLOB + // Get photo data from database byte[] photoData = photo.getPhotoData(); if (photoData == null || photoData.length == 0) { logger.error("No photo data found for photo ID {}", id); @@ -68,7 +68,7 @@ public ResponseEntity servePhoto(@PathVariable String id) { // Create resource from byte array Resource resource = new ByteArrayResource(photoData); - logger.info("Serving photo ID {} ({}, {} bytes) from Oracle database", + logger.info("Serving photo ID {} ({}, {} bytes) from database", id, photo.getOriginalFileName(), photoData.length); // Return the photo data with appropriate content type and aggressive no-cache headers @@ -82,7 +82,7 @@ public ResponseEntity servePhoto(@PathVariable String id) { .header("X-Photo-Size", String.valueOf(photoData.length)) .body(resource); } catch (Exception ex) { - logger.error("Error serving photo with ID {} from Oracle database", id, ex); + logger.error("Error serving photo with ID {} from database", id, ex); return ResponseEntity.status(500).build(); } } diff --git a/src/main/java/com/photoalbum/model/Photo.java b/src/main/java/com/photoalbum/model/Photo.java index 147f1edf..f4eb34a4 100644 --- a/src/main/java/com/photoalbum/model/Photo.java +++ b/src/main/java/com/photoalbum/model/Photo.java @@ -34,7 +34,7 @@ public class Photo { private String originalFileName; /** - * Binary photo data stored directly in Oracle database + * Binary photo data stored directly in database */ @Lob @Column(name = "photo_data", nullable = true) @@ -45,7 +45,7 @@ public class Photo { */ @NotNull @Positive - @Column(name = "file_size", nullable = false, columnDefinition = "NUMBER(19,0)") + @Column(name = "file_size", nullable = false) private Long fileSize; /** @@ -60,7 +60,7 @@ public class Photo { * Timestamp of upload */ @NotNull - @Column(name = "uploaded_at", nullable = false, columnDefinition = "TIMESTAMP DEFAULT SYSTIMESTAMP") + @Column(name = "uploaded_at", nullable = false) private LocalDateTime uploadedAt; /** diff --git a/src/main/java/com/photoalbum/repository/PhotoRepository.java b/src/main/java/com/photoalbum/repository/PhotoRepository.java index a38de0de..b53a1e7d 100644 --- a/src/main/java/com/photoalbum/repository/PhotoRepository.java +++ b/src/main/java/com/photoalbum/repository/PhotoRepository.java @@ -19,10 +19,10 @@ public interface PhotoRepository extends JpaRepository { * Find all photos ordered by upload date (newest first) * @return List of photos ordered by upload date descending */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + - "FROM PHOTOS " + - "ORDER BY UPLOADED_AT DESC", + @Query(value = "SELECT id, original_file_name, photo_data, file_size, " + + "mime_type, uploaded_at, width, height " + + "FROM photos " + + "ORDER BY uploaded_at DESC", nativeQuery = true) List findAllOrderByUploadedAtDesc(); @@ -32,11 +32,11 @@ public interface PhotoRepository extends JpaRepository { * @return List of photos uploaded before the given timestamp */ @Query(value = "SELECT * FROM (" + - "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT, ROWNUM as RN " + - "FROM PHOTOS " + - "WHERE UPLOADED_AT < :uploadedAt " + - "ORDER BY UPLOADED_AT DESC" + + "SELECT id, original_file_name, photo_data, file_size, " + + "mime_type, uploaded_at, width, height, ROWNUM as rn " + + "FROM photos " + + "WHERE uploaded_at < :uploadedAt " + + "ORDER BY uploaded_at DESC" + ") WHERE ROWNUM <= 10", nativeQuery = true) List findPhotosUploadedBefore(@Param("uploadedAt") LocalDateTime uploadedAt); @@ -46,11 +46,11 @@ public interface PhotoRepository extends JpaRepository { * @param uploadedAt The upload timestamp to compare against * @return List of photos uploaded after the given timestamp */ - @Query(value = "SELECT ID, ORIGINAL_FILE_NAME, PHOTO_DATA, FILE_SIZE, " + - "MIME_TYPE, UPLOADED_AT, WIDTH, HEIGHT " + - "FROM PHOTOS " + - "WHERE UPLOADED_AT > :uploadedAt " + - "ORDER BY UPLOADED_AT ASC", + @Query(value = "SELECT id, original_file_name, photo_data, file_size, " + + "mime_type, uploaded_at, width, height " + + "FROM photos " + + "WHERE uploaded_at > :uploadedAt " + + "ORDER BY uploaded_at ASC", nativeQuery = true) List findPhotosUploadedAfter(@Param("uploadedAt") LocalDateTime uploadedAt); } \ No newline at end of file diff --git a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java index 0bfdc9a4..ce2473a5 100644 --- a/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java +++ b/src/main/java/com/photoalbum/service/impl/PhotoServiceImpl.java @@ -130,7 +130,7 @@ public UploadResult uploadPhoto(MultipartFile file) { // Continue without dimensions - not critical } - // Create photo entity with database BLOB storage + // Create photo entity with database storage Photo photo = new Photo( file.getOriginalFilename(), photoData, @@ -140,17 +140,17 @@ public UploadResult uploadPhoto(MultipartFile file) { photo.setWidth(width); photo.setHeight(height); - // Save to database (with BLOB photo data) + // Save to database (with photo data) try { photo = photoRepository.save(photo); result.setSuccess(true); result.setPhotoId(photo.getId()); - logger.info("Successfully uploaded photo {} with ID {} to Oracle database", + logger.info("Successfully uploaded photo {} with ID {} to database", file.getOriginalFilename(), photo.getId()); } catch (Exception ex) { - logger.error("Error saving photo to Oracle database for {}", file.getOriginalFilename(), ex); + logger.error("Error saving photo to database for {}", file.getOriginalFilename(), ex); result.setSuccess(false); result.setErrorMessage("Error saving photo to database. Please try again."); } @@ -177,13 +177,13 @@ public boolean deletePhoto(String id) { Photo photo = photoOpt.get(); - // Delete from Oracle database (photos stored as BLOB) + // Delete from database photoRepository.delete(photo); logger.info("Successfully deleted photo ID {} from Oracle database", id); return true; } catch (Exception ex) { - logger.error("Error deleting photo with ID {} from Oracle database", id, ex); + logger.error("Error deleting photo with ID {} from database", id, ex); throw new RuntimeException("Error deleting photo", ex); } } diff --git a/src/main/resources/application-docker.properties b/src/main/resources/application-docker.properties index b6248c25..f8266846 100644 --- a/src/main/resources/application-docker.properties +++ b/src/main/resources/application-docker.properties @@ -1,4 +1,4 @@ -# Docker-specific configuration for Oracle DB +# Docker-specific database configuration spring.datasource.url=jdbc:oracle:thin:@oracle-db:1521:XE spring.datasource.username=photoalbum spring.datasource.password=photoalbum @@ -15,7 +15,7 @@ spring.jpa.hibernate.ddl-auto=create spring.jpa.show-sql=true spring.jpa.properties.hibernate.format_sql=true -# File Upload Configuration - Validation only (photos stored in Oracle database) +# File Upload Configuration - Validation only (photos stored in database) app.file-upload.max-file-size-bytes=10485760 app.file-upload.allowed-mime-types=image/jpeg,image/png,image/gif,image/webp app.file-upload.max-files-per-upload=10 From e3488c96810e04047128ad2d591b60b9a7fe3419 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Tue, 10 Mar 2026 16:49:25 +0800 Subject: [PATCH 05/10] Completeness fixes: Update pom.xml description from Oracle DB to PostgreSQL --- WORKSHOP.md | 1034 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 1034 insertions(+) create mode 100644 WORKSHOP.md diff --git a/WORKSHOP.md b/WORKSHOP.md new file mode 100644 index 00000000..5934d20d --- /dev/null +++ b/WORKSHOP.md @@ -0,0 +1,1034 @@ +# Photo Album Application - Migration Workshop + +This document serves as a comprehensive workshop guide that will walk you through the process of migrating a Java application to Azure using GitHub Copilot app modernization. The workshop covers assessment, database migration from Oracle to PostgreSQL, containerization, and deployment to Azure. + +**What the Migration Process Will Do:** +The migration will transform your application from using Oracle Database to a modern Azure-native solution. This includes migrating from Oracle Database to Azure Database for PostgreSQL Flexible Server with managed identity authentication, containerizing the application, and deploying it to Azure with proper monitoring and health checks. + +## Table of Contents + +- [Overview](#overview) +- [Current Architecture](#current-architecture) +- [Prerequisites](#prerequisites) +- [Workshop Steps](#workshop-steps) + - [Step 1: Assess Your Java Application](#step-1-assess-your-java-application) + - [Step 2: Migrate from Oracle to PostgreSQL](#step-2-migrate-from-oracle-to-postgresql) + - [Step 3: Containerize the Application](#step-3-containerize-the-application) + - [Step 4: Deploy to Azure](#step-4-deploy-to-azure) +- [Clean Up](#clean-up) +- [Troubleshooting](#troubleshooting) + +## Overview + +The Photo Album application is a Spring Boot web application that allows users to: +- Upload photos via drag-and-drop or file selection +- View photos in a responsive gallery +- View photo details with metadata +- Navigate between photos +- Delete photos + +**Original State (Before Migration):** +* Oracle Database 21c Express Edition for photo storage +* Photos stored as BLOBs in Oracle Database +* Password-based authentication +* Running in Docker containers locally + +**After Migration:** +* Azure Database for PostgreSQL Flexible Server +* Managed Identity passwordless authentication +* Containerized application +* Deployed to Azure Container Apps + +**Time Estimates:** +The complete workshop takes approximately **1.5 hours** to complete. Here's the breakdown for each major step: +- **Assess Your Java Application**: ~5 minutes +- **Migrate from Oracle to PostgreSQL**: ~30 minutes +- **Containerize the Application**: ~15 minutes +- **Deploy to Azure**: ~40 minutes + +## Current Architecture + +### Technology Stack + +- **Framework**: Spring Boot 3.5.0 +- **Java Version**: 21 +- **Database**: Oracle Database 21c Express Edition (to be migrated to PostgreSQL) +- **Templating**: Thymeleaf +- **Build Tool**: Maven +- **Frontend**: Bootstrap 5.3.0, Vanilla JavaScript +- **Storage**: Database BLOBs for photo data + +### Database Schema + +The application uses the following database structure: + +#### PHOTOS Table +- `ID` (VARCHAR(36), Primary Key, UUID Generated) +- `ORIGINAL_FILE_NAME` (VARCHAR(255), Not Null) +- `FILE_SIZE` (NUMBER/BIGINT, Not Null) +- `MIME_TYPE` (VARCHAR(50), Not Null) +- `UPLOADED_AT` (TIMESTAMP, Not Null) +- `WIDTH` (NUMBER/INTEGER, Nullable) +- `HEIGHT` (NUMBER/INTEGER, Nullable) +- `PHOTO_DATA` (BLOB/BYTEA, Not Null) + +## Prerequisites + +Before starting this workshop, ensure you have: + +### Required Software + +- **Operating System**: Windows, macOS, or Linux +- **Java Development Kit (JDK)**: JDK 21 or higher + - Download from [Microsoft OpenJDK](https://learn.microsoft.com/java/openjdk/download) +- **Maven**: 3.8.0 or higher + - Download from [Apache Maven](https://maven.apache.org/download.cgi) +- **Docker Desktop**: Latest version + - Download from [Docker](https://docs.docker.com/desktop/) +- **Git**: For version control + - Download from [Git](https://git-scm.com/) + +### IDE and Extensions + +- **Visual Studio Code**: Version 1.101 or later + - Download from [Visual Studio Code](https://code.visualstudio.com/) +- **GitHub Copilot**: Must be enabled in your GitHub account + - [GitHub Copilot subscription](https://github.com/features/copilot) (Pro, Pro+, Business, or Enterprise) +- **VS Code Extensions** (Required): + 1. **GitHub Copilot** extension + - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) + - Sign in to your GitHub account within VS Code + 2. **GitHub Copilot app modernization** extension + - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=vscjava.migrate-java-to-azure) + - Restart VS Code after installation + +### Azure Requirements + +- **Azure Account**: Active Azure subscription + - [Create a free account](https://azure.microsoft.com/free/) if you don't have one +- **Azure CLI**: Latest version + - Download from [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) + +### Configuration + +- Ensure `chat.extensionTools.enabled` is set to `true` in VS Code settings +- If using Gradle, only Gradle wrapper version 5+ is supported +- Access to public Maven Central repository for Maven-based projects + +### Optional (for testing locally) + +- **Oracle Database 21c XE** or **PostgreSQL** (if you want to test locally before Azure deployment) + +## Workshop Steps + +### Step 1: Assess Your Java Application + +The first step is to assess the Photo Album application to identify migration opportunities and potential issues. + +#### 1.1 Open the Project + +1. Clone or open the Photo Album project in Visual Studio Code: + +```bash +git clone +cd PhotoAlbum-Java +code . +``` + +> **📸 Screenshot Needed**: Screenshot of VS Code with the PhotoAlbum-Java project opened + +#### 1.2 Install GitHub Copilot App Modernization Extension + +1. Open the Extensions view in VS Code (`Ctrl+Shift+X` or `Cmd+Shift+X` on macOS) +2. Search for `GitHub Copilot app modernization` +3. Click **Install** +4. Restart VS Code if prompted + +> **📸 Screenshot Needed**: Screenshot of the GitHub Copilot app modernization extension installation page + +#### 1.3 Run Assessment + +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane +2. In the **QUICKSTART** section, click **Start Assessment** to trigger the app assessment + +> **📸 Screenshot Needed**: Screenshot showing the GitHub Copilot app modernization extension pane with the "Start Assessment" button + +3. The Copilot Chat panel will open in **Agent Mode** +4. The agent will analyze your code and identify: + - Database technology (Oracle Database) + - Migration opportunities to Azure services + - Code quality issues + - Security vulnerabilities + - Framework and runtime compatibility + +> **📸 Screenshot Needed**: Screenshot of Copilot Chat panel showing the assessment in progress + +5. Wait for the assessment to complete. This step could take **3-5 minutes** +6. Upon completion, an **Assessment Report** tab opens automatically + +> **📸 Screenshot Needed**: Screenshot of the Assessment Report showing Oracle Database migration opportunity + +#### 1.4 Review Assessment Report + +The Assessment Report provides: + +- **Overview**: Summary of detected technologies and frameworks +- **Issues**: Categorized list of migration opportunities + - **Database Migration**: Oracle Database → Azure Database for PostgreSQL + - **Security**: Current password-based authentication + - **Cloud Readiness**: Recommendations for Azure deployment +- **Recommended Solutions**: Predefined migration tasks for each issue + +Look for the following in your report: + +1. **Database Migration (Oracle Database)** + - Detected: Oracle Database 21c + - Recommendation: Migrate to Azure Database for PostgreSQL Flexible Server + - Action: **Run Task** button available + +> **📸 Screenshot Needed**: Screenshot highlighting the "Database Migration" section with the "Run Task" button + +2. **Authentication** + - Current: Password-based authentication + - Recommendation: Migrate to Managed Identity (passwordless) + +3. **Containerization** + - Recommendation: Containerize for cloud deployment + +### Step 2: Migrate from Oracle to PostgreSQL + +Now that you've assessed the application, let's begin the database migration from Oracle to Azure Database for PostgreSQL. + +> **Note**: If you want to skip the assessment step, ensure you're on a branch where Oracle is still being used. The migration will handle the transition to PostgreSQL. + +#### 2.1 Start Migration Task + +1. In the **Assessment Report**, locate the **Database Migration (Oracle Database)** issue +2. Click the **Run Task** button next to **Migrate to Azure Database for PostgreSQL (Spring)** + +> **📸 Screenshot Needed**: Screenshot showing clicking the "Run Task" button for PostgreSQL migration + +3. The Copilot Chat panel opens in **Agent Mode** with a pre-populated migration prompt + +#### 2.2 Review Migration Plan + +1. The Copilot Agent will analyze the project and generate a **migration plan** +2. The plan includes: + - **Session ID**: Unique identifier for this migration session + - **Target Branch**: New Git branch for migration changes (e.g., `migration/oracle-to-postgresql-`) + - **Files to Change**: List of files that will be modified + - **Migration Guidelines**: Steps from the knowledge base + - **Build Environment**: JDK and Maven configuration + +3. Review the plan carefully. The plan will be saved to `.appmod/.migration/plan.md` + +> **📸 Screenshot Needed**: Screenshot of the migration plan.md file showing the migration strategy + +4. The agent will pause and ask you to review the plan +5. Type **"Continue"** in the chat to proceed with the migration + +#### 2.3 Version Control Setup + +The agent will automatically: + +1. Check the Git repository status +2. Handle any uncommitted changes (based on your extension settings) +3. Create a new branch for the migration (e.g., `migration/oracle-to-postgresql-20250310-143022`) +4. Update the progress tracking file + +> **📸 Screenshot Needed**: Screenshot showing the new Git branch created in VS Code + +#### 2.4 Code Migration + +The agent will now perform automatic code changes: + +1. **Update Dependencies** (`pom.xml`): + - Remove Oracle JDBC driver dependency + - Add PostgreSQL JDBC driver + - Add Azure Identity Extensions for managed identity support + +2. **Update Configuration** (`application.properties`): + - Change JDBC URL from Oracle format to PostgreSQL format + - Update JPA dialect from Oracle to PostgreSQL + - Add Azure passwordless connection support + +3. **Update Entity Classes**: + - Replace Oracle-specific data types (e.g., `VARCHAR2` → `VARCHAR`) + - Update BLOB handling for PostgreSQL (`BLOB` → `BYTEA`) + - Fix any Oracle-specific SQL or annotations + +4. **Update Test Configuration** (`application-test.properties`): + - Update test database configuration + +> **📸 Screenshot Needed**: Screenshot showing file changes in VS Code's Source Control view + +The agent will: +- Click **Allow** for any tool call permission requests +- Automatically commit changes with descriptive commit messages +- Update progress in `.appmod/.migration/progress.md` + +#### 2.5 Validation and Fix Loop + +After code migration, the agent automatically runs a **validation and fix iteration loop**: + +##### Stage 1: Build Validation + +1. The agent uses Maven to build the project +2. If build errors occur: + - Agent analyzes each error + - Implements fixes automatically + - Commits fixes with descriptive messages + - Rebuilds the project +3. This loop continues until the build succeeds or reaches maximum 10 attempts + +> **📸 Screenshot Needed**: Screenshot of build validation progress in Copilot Chat + +##### Stage 2: CVE Validation + +1. Agent scans all dependencies for known vulnerabilities +2. If CVEs are detected: + - Agent recommends updated dependency versions + - Applies fixes automatically + - Commits the CVE fixes +3. Proceeds to next stage + +##### Stage 3: Consistency Validation + +1. Agent analyzes Git diffs to identify functional changes +2. Categorizes issues by severity: + - **Critical**: Must be fixed (e.g., behavior changes) + - **Major**: Should be fixed (e.g., missing validations) + - **Minor**: Documented but not auto-fixed +3. Automatically fixes critical and major issues +4. Documents minor issues for manual review + +> **📸 Screenshot Needed**: Screenshot showing consistency validation results + +##### Stage 4: Test Validation + +1. Agent runs unit tests using Maven +2. If test failures occur: + - Agent identifies integration tests vs unit tests + - Skips integration tests that require external resources + - Fixes unit test failures automatically + - Re-runs tests to verify fixes +3. Continues until all unit tests pass or reaches maximum 10 attempts + +##### Stage 5: Completeness Validation + +1. Agent searches the entire codebase for any remaining Oracle references +2. Checks: + - Configuration files + - Documentation + - Comments + - Unused code +3. Fixes any missed migration items +4. Commits completeness fixes + +> **📸 Screenshot Needed**: Screenshot of completeness validation discovering missed Oracle references + +##### Stage 6: Final Build Validation + +1. Agent performs a final build to ensure all fixes work together +2. If successful, proceeds to summary generation +3. If any issues remain, agent attempts up to 5 more fix rounds + +#### 2.6 Review Migration Summary + +1. After all validation stages complete, the agent generates a **summary.md** file +2. The summary includes: + - Migration session details + - Files modified + - Build status + - Test status + - CVE fixes applied + - Consistency issues resolved + - Completeness validation results + - Git commit history + +> **📸 Screenshot Needed**: Screenshot of the summary.md file showing successful migration + +3. Review the summary to understand all changes made +4. Click **Keep** in the Copilot Chat to apply all changes + +#### 2.7 Test Locally (Optional) + +If you want to test the migrated application locally before deploying to Azure: + +1. Start a local PostgreSQL database: + +```bash +docker run --name postgres-test -e POSTGRES_USER=photoalbum \ + -e POSTGRES_PASSWORD=photoalbum -e POSTGRES_DB=photoalbum \ + -p 5432:5432 -d postgres:latest +``` + +2. Build and run the application: + +```bash +mvn clean package +java -jar target/photo-album-1.0.0.jar +``` + +3. Open your browser to `http://localhost:8080` +4. Test photo upload, viewing, and deletion functionality + +### Step 3: Containerize the Application + +Now that you've successfully migrated to PostgreSQL, the next step is to prepare the application for cloud deployment by containerizing it. + +> **Note**: If you encountered issues in Step 2, you can checkout a branch where migration is complete and proceed from here. + +#### 3.1 Start Containerization Task + +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane +2. In the **TASKS** section, expand **Common Tasks** > **Containerize Tasks** +3. Click the **Run** button for **Containerize Application** + +> **📸 Screenshot Needed**: Screenshot showing the Containerize Tasks section with the Run button + +4. The Copilot Chat panel opens with a pre-populated containerization prompt + +#### 3.2 Review Containerization Plan + +1. The agent analyzes the workspace and creates a **containerization-plan.copilotmd** +2. The plan includes: + - **Container Strategy**: Multi-stage Docker build for smaller images + - **Base Image**: Eclipse Temurin JRE (lightweight Java runtime) + - **Exposed Ports**: Port 8080 for the web application + - **Health Checks**: Spring Boot Actuator endpoints + - **Build Steps**: Maven build, Docker image creation + +> **📸 Screenshot Needed**: Screenshot of the containerization plan showing the Docker strategy + +3. Click **Continue** or **Allow** when prompted to proceed + +#### 3.3 Dockerfile Generation + +The agent will: + +1. Create a `Dockerfile` in the project root +2. Use a multi-stage build: + - **Stage 1**: Maven build stage + - **Stage 2**: Lightweight runtime stage with JRE + +Example Dockerfile structure: + +```dockerfile +# Stage 1: Build stage +FROM eclipse-temurin:21-jdk-alpine AS builder +WORKDIR /app +COPY pom.xml . +COPY src ./src +RUN mvn clean package -DskipTests + +# Stage 2: Runtime stage +FROM eclipse-temurin:21-jre-alpine +WORKDIR /app +COPY --from=builder /app/target/*.jar app.jar +EXPOSE 8080 +ENTRYPOINT ["java", "-jar", "app.jar"] +``` + +> **📸 Screenshot Needed**: Screenshot of the generated Dockerfile + +3. The agent may also create: + - `.dockerignore` file (to exclude unnecessary files from Docker context) + - Docker Compose file for local testing (optional) + +#### 3.4 Build Docker Image + +The agent will automatically: + +1. Build the Docker image: + +```bash +docker build -t photoalbum-java:latest . +``` + +2. If build errors occur, the agent will: + - Analyze the error + - Fix the Dockerfile or configuration + - Rebuild the image + +> **📸 Screenshot Needed**: Screenshot showing successful Docker image build + +3. Verify the image is created: + +```bash +docker images | grep photoalbum-java +``` + +#### 3.5 Test Container Locally (Optional) + +Before deploying to Azure, you can test the container locally: + +1. Run the container: + +```bash +docker run -p 8080:8080 \ + -e POSTGRES_USER=photoalbum \ + -e POSTGRES_PASSWORD=photoalbum \ + -e SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:5432/photoalbum \ + photoalbum-java:latest +``` + +2. Access the application at `http://localhost:8080` +3. Verify all functionality works in the containerized environment + +#### 3.6 Review and Keep Changes + +1. The agent commits the containerization changes +2. Review the proposed code changes in VS Code +3. Click **Keep** to apply the Dockerfile and related files + +> **📸 Screenshot Needed**: Screenshot of Git commits showing containerization changes + +### Step 4: Deploy to Azure + +At this point, you have successfully migrated the application to PostgreSQL and containerized it. Now, you can deploy it to Azure. + +#### 4.1 Prerequisites for Azure Deployment + +Ensure you have: + +- Azure CLI installed and logged in: + +```bash +az login +az account set --subscription +``` + +- Docker CLI logged in to Azure Container Registry (will be set up by the agent) + +#### 4.2 Start Deployment Task + +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane +2. In the **TASKS** section, expand **Common Tasks** > **Deployment Tasks** +3. Click the **Run** button for **Provision Infrastructure and Deploy to Azure** + +> **📸 Screenshot Needed**: Screenshot showing the Deployment Tasks section + +4. A pre-populated prompt appears in the Copilot Chat panel +5. **Optional**: Edit the prompt to specify: + - **Hosting Service**: Azure Container Apps (default) or Azure Kubernetes Service (AKS) + - **Resource Naming**: Custom resource group or naming convention + +Example prompt modification for AKS: + +``` +Deploy this Spring Boot application to Azure. +Hosting service: AKS +``` + +> **📸 Screenshot Needed**: Screenshot of the deployment prompt in Copilot Chat + +6. Press Enter or click **Continue** to proceed + +#### 4.3 Review Deployment Plan + +The agent creates a comprehensive deployment plan in **plan.copilotmd**: + +1. **Azure Resources Architecture**: + - Azure Container Registry (ACR) for Docker images + - Azure Database for PostgreSQL Flexible Server + - Azure Container Apps (or AKS) + - Managed Identity for passwordless authentication + - Virtual Network for secure communication + +2. **Resource Configuration**: + - Resource Group + - Location/Region + - SKU and pricing tiers + - Network configuration + - Security settings + +3. **Execution Steps**: + - Create resource group + - Provision PostgreSQL server + - Create container registry + - Build and push Docker image + - Configure managed identity + - Deploy application + - Configure health probes + +> **📸 Screenshot Needed**: Screenshot showing the deployment plan architecture diagram (if generated) + +4. Review the plan carefully +5. Click **Keep** to save the plan +6. Type **"Execute the plan"** in the Copilot Chat to start deployment + +#### 4.4 Azure Resource Provisioning + +The agent will: + +1. **Create Resource Group**: + +```bash +az group create --name photoalbum-rg --location eastus +``` + +2. **Create Azure Container Registry**: + +```bash +az acr create --resource-group photoalbum-rg \ + --name photoalbumacr --sku Basic +``` + +3. **Create Azure PostgreSQL Flexible Server**: + +```bash +az postgres flexible-server create \ + --resource-group photoalbum-rg \ + --name photoalbum-postgres \ + --location eastus \ + --admin-user azureuser \ + --admin-password \ + --sku-name Standard_B1ms \ + --version 16 +``` + +4. **Create Database**: + +```bash +az postgres flexible-server db create \ + --resource-group photoalbum-rg \ + --server-name photoalbum-postgres \ + --database-name photoalbum +``` + +5. **Configure Firewall Rules**: + +```bash +az postgres flexible-server firewall-rule create \ + --resource-group photoalbum-rg \ + --name photoalbum-postgres \ + --rule-name AllowAzureServices \ + --start-ip-address 0.0.0.0 \ + --end-ip-address 0.0.0.0 +``` + +> **📸 Screenshot Needed**: Screenshot showing Azure resources being created in Copilot Chat + +6. Click **Allow** or **Continue** when the agent requests permission to run these commands + +#### 4.5 Build and Push Docker Image + +The agent will: + +1. **Login to ACR**: + +```bash +az acr login --name photoalbumacr +``` + +2. **Tag the image**: + +```bash +docker tag photoalbum-java:latest photoalbumacr.azurecr.io/photoalbum-java:latest +``` + +3. **Push to ACR**: + +```bash +docker push photoalbumacr.azurecr.io/photoalbum-java:latest +``` + +> **📸 Screenshot Needed**: Screenshot showing Docker image push progress + +#### 4.6 Create Managed Identity + +The agent will: + +1. **Create User-Assigned Managed Identity**: + +```bash +az identity create \ + --resource-group photoalbum-rg \ + --name photoalbum-identity +``` + +2. **Assign Roles**: + - **AcrPull** role for pulling images from ACR + - **PostgreSQL contributor** role for database access + +3. **Configure PostgreSQL for Azure AD Authentication**: + +```bash +az postgres flexible-server ad-admin create \ + --resource-group photoalbum-rg \ + --server-name photoalbum-postgres \ + --object-id \ + --display-name photoalbum-identity +``` + +#### 4.7 Deploy to Azure Container Apps + +The agent will: + +1. **Create Container Apps Environment**: + +```bash +az containerapp env create \ + --name photoalbum-env \ + --resource-group photoalbum-rg \ + --location eastus +``` + +2. **Deploy the Application**: + +```bash +az containerapp create \ + --name photoalbum-app \ + --resource-group photoalbum-rg \ + --environment photoalbum-env \ + --image photoalbumacr.azurecr.io/photoalbum-java:latest \ + --registry-server photoalbumacr.azurecr.io \ + --registry-identity \ + --target-port 8080 \ + --ingress external \ + --env-vars \ + SPRING_DATASOURCE_URL=jdbc:postgresql://photoalbum-postgres.postgres.database.azure.com:5432/photoalbum?sslmode=require \ + AZURE_PASSWORDLESS_ENABLED=true \ + SPRING_DATASOURCE_USERNAME=photoalbum-identity \ + --user-assigned +``` + +3. **Configure Health Probes**: + - Liveness probe: `/actuator/health/liveness` + - Readiness probe: `/actuator/health/readiness` + +> **📸 Screenshot Needed**: Screenshot of Container App deployment progress + +4. The agent will display the application URL once deployment is complete + +#### 4.8 Verify Deployment + +1. The agent provides the public URL for your application: + +``` +https://photoalbum-app..eastus.azurecontainerapps.io +``` + +2. Open the URL in your browser +3. Test the application: + - Upload photos + - View gallery + - View photo details + - Delete photos + +> **📸 Screenshot Needed**: Screenshot of the deployed application running in Azure + +4. Verify the database connection: + - Azure AD authentication is being used (passwordless) + - Data persists across application restarts + +#### 4.9 Monitor Application + +The agent may set up: + +1. **Application Insights** for application monitoring +2. **Log Analytics** for container logs +3. **Metrics** for performance monitoring + +Access logs: + +```bash +az containerapp logs show \ + --name photoalbum-app \ + --resource-group photoalbum-rg \ + --follow +``` + +> **📸 Screenshot Needed**: Screenshot showing application logs in Azure Portal + +#### 4.10 Review Deployment Summary + +The agent generates a deployment summary in **progress.copilotmd**: + +- ✅ Resource group created +- ✅ Azure Container Registry provisioned +- ✅ Azure PostgreSQL Flexible Server created +- ✅ Database configured +- ✅ Managed Identity created and configured +- ✅ Docker image built and pushed +- ✅ Container App deployed +- ✅ Health probes configured +- ✅ Application accessible + +Click **Keep** to save all deployment scripts and configurations. + +## Clean Up + +After completing the workshop, clean up Azure resources to avoid charges: + +### Option 1: Delete Resource Group (Recommended) + +This deletes all resources in one command: + +```bash +az group delete --name photoalbum-rg --yes --no-wait +``` + +### Option 2: Delete Individual Resources + +If you want to keep some resources: + +1. **Delete Container App**: + +```bash +az containerapp delete \ + --name photoalbum-app \ + --resource-group photoalbum-rg \ + --yes +``` + +2. **Delete Container Apps Environment**: + +```bash +az containerapp env delete \ + --name photoalbum-env \ + --resource-group photoalbum-rg \ + --yes +``` + +3. **Delete PostgreSQL Server**: + +```bash +az postgres flexible-server delete \ + --resource-group photoalbum-rg \ + --name photoalbum-postgres \ + --yes +``` + +4. **Delete Container Registry**: + +```bash +az acr delete \ + --name photoalbumacr \ + --resource-group photoalbum-rg \ + --yes +``` + +5. **Delete Managed Identity**: + +```bash +az identity delete \ + --name photoalbum-identity \ + --resource-group photoalbum-rg +``` + +## Troubleshooting + +### Assessment Issues + +**Problem**: Assessment Report not generating + +**Solution**: +- Ensure GitHub Copilot app modernization extension is installed and activated +- Check that you're signed in to GitHub Copilot +- Verify `chat.extensionTools.enabled` is `true` in VS Code settings +- Reload VS Code window (`Ctrl+Shift+P` → "Reload Window") + +--- + +**Problem**: "No migration opportunities found" + +**Solution**: +- Check that you're on the `main` branch (Oracle version) +- Ensure `pom.xml` contains Oracle JDBC dependency +- Verify `application.properties` has Oracle JDBC URL + +### Migration Issues + +**Problem**: Build fails after migration + +**Solution**: +- Review error messages in Copilot Chat +- Allow the agent to attempt automatic fixes (up to 10 rounds) +- If still failing, check: + - JDK version (should be 21) + - Maven version (3.8+) + - Internet connection for dependency downloads + +--- + +**Problem**: Tests fail after migration + +**Solution**: +- Agent should automatically skip integration tests +- For unit test failures, agent will attempt fixes +- If manual intervention needed: + - Check test database configuration in `application-test.properties` + - Ensure H2 database dependency is present for tests + - Review test data compatibility with PostgreSQL + +--- + +**Problem**: Uncommitted changes conflict + +**Solution**: +- Before starting migration, commit or stash your changes: + +```bash +git stash +``` + +- Or configure the extension setting for handling uncommitted changes + +### Containerization Issues + +**Problem**: Docker build fails + +**Solution**: +- Ensure Docker Desktop is running +- Check that Maven build succeeds first: `mvn clean package` +- Review Dockerfile for syntax errors +- Agent will attempt automatic fixes + +--- + +**Problem**: Container won't start + +**Solution**: +- Check container logs: + +```bash +docker logs +``` + +- Verify environment variables are set correctly +- Ensure database is reachable from container + +### Deployment Issues + +**Problem**: Azure CLI not authenticated + +**Solution**: + +```bash +az login +az account set --subscription +``` + +--- + +**Problem**: Insufficient permissions in Azure + +**Solution**: +- Ensure your Azure account has **Contributor** or **Owner** role +- Check subscription permissions: + +```bash +az role assignment list --assignee +``` + +--- + +**Problem**: PostgreSQL connection fails from Container App + +**Solution**: +- Verify firewall rules allow Azure services +- Check managed identity has correct permissions: + +```bash +az postgres flexible-server ad-admin list \ + --resource-group photoalbum-rg \ + --server-name photoalbum-postgres +``` + +- Ensure environment variables are configured correctly + +--- + +**Problem**: Container App deployment timeout + +**Solution**: +- Check container logs in Azure Portal +- Verify health probe endpoints are responding: + - `/actuator/health/liveness` + - `/actuator/health/readiness` +- Ensure application starts within the timeout period (default: 240 seconds) +- Check application logs for startup errors + +--- + +**Problem**: "Error pulling image from ACR" + +**Solution**: +- Verify managed identity has **AcrPull** role: + +```bash +az role assignment list --assignee +``` + +- Ensure ACR login server is correct in Container App configuration +- Check that image was pushed successfully to ACR: + +```bash +az acr repository list --name photoalbumacr +``` + +### Application Issues + +**Problem**: Application returns 500 errors + +**Solution**: +- Check application logs: + +```bash +az containerapp logs show \ + --name photoalbum-app \ + --resource-group photoalbum-rg +``` + +- Verify database schema was created (check Hibernate DDL auto setting) +- Ensure managed identity authentication is working + +--- + +**Problem**: Photos upload but don't display + +**Solution**: +- Check BLOB/BYTEA column type in PostgreSQL +- Verify file size limits in application properties +- Review browser console for JavaScript errors + +## Additional Resources + +- [Spring Boot Documentation](https://spring.boot.io/docs) +- [Azure Database for PostgreSQL](https://learn.microsoft.com/azure/postgresql/) +- [Azure Container Apps](https://learn.microsoft.com/azure/container-apps/) +- [Managed Identity](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/) +- [GitHub Copilot for Java](https://docs.github.com/copilot) +- [Docker Documentation](https://docs.docker.com/) + +## Contributing + +When contributing to this project: + +- Follow Spring Boot best practices +- Maintain database compatibility +- Ensure UI/UX consistency +- Test both local and Azure deployment scenarios +- Update documentation for any architectural changes +- Add appropriate tests for new features + +## License + +This project is provided as-is for educational and demonstration purposes. + +--- + +**Congratulations!** 🎉 + +You have successfully completed the Photo Album Application Migration Workshop. You've learned how to: + +- ✅ Assess a Java application for cloud readiness +- ✅ Migrate from Oracle Database to Azure Database for PostgreSQL +- ✅ Implement passwordless authentication with Managed Identity +- ✅ Containerize a Spring Boot application +- ✅ Deploy to Azure Container Apps +- ✅ Monitor and troubleshoot cloud applications + +These skills are transferable to migrating and modernizing other Java applications to Azure! From ed5b102e5769fb3a33f445aa6e8162da2f36f328 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Wed, 11 Mar 2026 14:41:24 +0800 Subject: [PATCH 06/10] prepare doc --- .github/copilot-instructions.md | 2 - WORKSHOP.md | 963 ++---------------------- azure-setup.sh | 199 ----- doc-media/assessment-report.png | Bin 0 -> 81683 bytes doc-media/containerization-plan.png | Bin 0 -> 62864 bytes doc-media/containerization-run-task.png | Bin 0 -> 31484 bytes doc-media/deployment-progress.png | Bin 0 -> 70003 bytes doc-media/deployment-run-task.png | Bin 0 -> 57324 bytes doc-media/run-task-prompt.png | Bin 0 -> 24915 bytes doc-media/trigger-assessment.png | Bin 0 -> 50605 bytes 10 files changed, 73 insertions(+), 1091 deletions(-) delete mode 100644 .github/copilot-instructions.md delete mode 100644 azure-setup.sh create mode 100644 doc-media/assessment-report.png create mode 100644 doc-media/containerization-plan.png create mode 100644 doc-media/containerization-run-task.png create mode 100644 doc-media/deployment-progress.png create mode 100644 doc-media/deployment-run-task.png create mode 100644 doc-media/run-task-prompt.png create mode 100644 doc-media/trigger-assessment.png diff --git a/.github/copilot-instructions.md b/.github/copilot-instructions.md deleted file mode 100644 index f1747133..00000000 --- a/.github/copilot-instructions.md +++ /dev/null @@ -1,2 +0,0 @@ -If being asked to set up Azure infrastructure for this app, use the tool `run_command_in_terminal` to run script `azure-setup.sh` in the project root in WSL environment. -If being asked to deploy this app to Azure, use the tool `run_command_in_terminal` to run script `deploy-to-azure.sh` in the project root in WSL environment. \ No newline at end of file diff --git a/WORKSHOP.md b/WORKSHOP.md index 5934d20d..a4ef2d19 100644 --- a/WORKSHOP.md +++ b/WORKSHOP.md @@ -8,7 +8,7 @@ The migration will transform your application from using Oracle Database to a mo ## Table of Contents - [Overview](#overview) -- [Current Architecture](#current-architecture) +- [Running Locally (Pre-Migration)](#running-locally-pre-migration) - [Prerequisites](#prerequisites) - [Workshop Steps](#workshop-steps) - [Step 1: Assess Your Java Application](#step-1-assess-your-java-application) @@ -40,37 +40,49 @@ The Photo Album application is a Spring Boot web application that allows users t * Deployed to Azure Container Apps **Time Estimates:** -The complete workshop takes approximately **1.5 hours** to complete. Here's the breakdown for each major step: +The complete workshop takes approximately **1 hours** to complete. Here's the breakdown for each major step: - **Assess Your Java Application**: ~5 minutes -- **Migrate from Oracle to PostgreSQL**: ~30 minutes -- **Containerize the Application**: ~15 minutes -- **Deploy to Azure**: ~40 minutes +- **Migrate from Oracle to PostgreSQL**: ~20 minutes +- **Containerize the Application**: ~5 minutes +- **Deploy to Azure**: ~25 minutes -## Current Architecture +## Running Locally (Pre-Migration) -### Technology Stack +Before starting the migration, you can run the original Oracle-based application locally to understand how it works. -- **Framework**: Spring Boot 3.5.0 -- **Java Version**: 21 -- **Database**: Oracle Database 21c Express Edition (to be migrated to PostgreSQL) -- **Templating**: Thymeleaf -- **Build Tool**: Maven -- **Frontend**: Bootstrap 5.3.0, Vanilla JavaScript -- **Storage**: Database BLOBs for photo data +### Quick Start with Docker Compose -### Database Schema +1. **Clone the repository** (if not already done): + ```bash + git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git + cd PhotoAlbum-Java-Lite + ``` -The application uses the following database structure: +2. **Start the application**: + ```bash + docker-compose up --build -d + ``` -#### PHOTOS Table -- `ID` (VARCHAR(36), Primary Key, UUID Generated) -- `ORIGINAL_FILE_NAME` (VARCHAR(255), Not Null) -- `FILE_SIZE` (NUMBER/BIGINT, Not Null) -- `MIME_TYPE` (VARCHAR(50), Not Null) -- `UPLOADED_AT` (TIMESTAMP, Not Null) -- `WIDTH` (NUMBER/INTEGER, Nullable) -- `HEIGHT` (NUMBER/INTEGER, Nullable) -- `PHOTO_DATA` (BLOB/BYTEA, Not Null) + This will: + - Start Oracle Database 21c Express Edition container + - Build and start the Photo Album application container + - Automatically create the database schema + +3. **Wait for services to start** (~2-3 minutes for Oracle DB initialization on first run) + +4. **Access the application**: + - Open your browser to **http://localhost:8080** + - Upload, view, and manage photos to explore the features + +5. **Stop the application**: + ```bash + docker-compose down + ``` + + To remove data volumes as well: + ```bash + docker-compose down -v + ``` ## Prerequisites @@ -83,7 +95,7 @@ Before starting this workshop, ensure you have: - Download from [Microsoft OpenJDK](https://learn.microsoft.com/java/openjdk/download) - **Maven**: 3.8.0 or higher - Download from [Apache Maven](https://maven.apache.org/download.cgi) -- **Docker Desktop**: Latest version +- **Docker Desktop**: Latest version, required if you want to run locally - Download from [Docker](https://docs.docker.com/desktop/) - **Git**: For version control - Download from [Git](https://git-scm.com/) @@ -112,12 +124,9 @@ Before starting this workshop, ensure you have: ### Configuration - Ensure `chat.extensionTools.enabled` is set to `true` in VS Code settings -- If using Gradle, only Gradle wrapper version 5+ is supported +- In the Visual Studio Code settings, make sure this setting is enabled (it might be controlled by your organization) - Access to public Maven Central repository for Maven-based projects - -### Optional (for testing locally) - -- **Oracle Database 21c XE** or **PostgreSQL** (if you want to test locally before Azure deployment) +- Git-managed Java project using Maven ## Workshop Steps @@ -130,53 +139,33 @@ The first step is to assess the Photo Album application to identify migration op 1. Clone or open the Photo Album project in Visual Studio Code: ```bash -git clone -cd PhotoAlbum-Java +git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git +cd PhotoAlbum-Java-Lite code . ``` -> **📸 Screenshot Needed**: Screenshot of VS Code with the PhotoAlbum-Java project opened - #### 1.2 Install GitHub Copilot App Modernization Extension -1. Open the Extensions view in VS Code (`Ctrl+Shift+X` or `Cmd+Shift+X` on macOS) -2. Search for `GitHub Copilot app modernization` -3. Click **Install** -4. Restart VS Code if prompted - -> **📸 Screenshot Needed**: Screenshot of the GitHub Copilot app modernization extension installation page +In VS Code, open the Extensions view from the Activity Bar, search for the `GitHub Copilot app modernization` extension in the marketplace. Click the Install button for the extension. After installation completes, you should see a notification in the bottom-right corner of VS Code confirming success. #### 1.3 Run Assessment -1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane -2. In the **QUICKSTART** section, click **Start Assessment** to trigger the app assessment - -> **📸 Screenshot Needed**: Screenshot showing the GitHub Copilot app modernization extension pane with the "Start Assessment" button - -3. The Copilot Chat panel will open in **Agent Mode** -4. The agent will analyze your code and identify: - - Database technology (Oracle Database) - - Migration opportunities to Azure services - - Code quality issues - - Security vulnerabilities - - Framework and runtime compatibility +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. +1. In the **QUICKSTART** section, click **Start Assessment** to trigger the app assessment. -> **📸 Screenshot Needed**: Screenshot of Copilot Chat panel showing the assessment in progress + ![Trigger Assessment](doc-media/trigger-assessment.png) -5. Wait for the assessment to complete. This step could take **3-5 minutes** -6. Upon completion, an **Assessment Report** tab opens automatically - -> **📸 Screenshot Needed**: Screenshot of the Assessment Report showing Oracle Database migration opportunity +1. Wait for the assessment to be completed. This step could take several minutes. +1. Upon completion, an **Assessment Report** tab opens. This report provides a categorized view of cloud readiness issues and recommended solutions. Select the **Issues** tab to view proposed solutions and proceed with migration steps. #### 1.4 Review Assessment Report The Assessment Report provides: -- **Overview**: Summary of detected technologies and frameworks +- **Application Information**: Summary of detected technologies and frameworks - **Issues**: Categorized list of migration opportunities - **Database Migration**: Oracle Database → Azure Database for PostgreSQL - **Security**: Current password-based authentication - - **Cloud Readiness**: Recommendations for Azure deployment - **Recommended Solutions**: Predefined migration tasks for each issue Look for the following in your report: @@ -186,849 +175,43 @@ Look for the following in your report: - Recommendation: Migrate to Azure Database for PostgreSQL Flexible Server - Action: **Run Task** button available -> **📸 Screenshot Needed**: Screenshot highlighting the "Database Migration" section with the "Run Task" button - -2. **Authentication** - - Current: Password-based authentication - - Recommendation: Migrate to Managed Identity (passwordless) - -3. **Containerization** - - Recommendation: Containerize for cloud deployment + ![Assessment Report](doc-media/assessment-report.png) ### Step 2: Migrate from Oracle to PostgreSQL Now that you've assessed the application, let's begin the database migration from Oracle to Azure Database for PostgreSQL. -> **Note**: If you want to skip the assessment step, ensure you're on a branch where Oracle is still being used. The migration will handle the transition to PostgreSQL. - -#### 2.1 Start Migration Task - -1. In the **Assessment Report**, locate the **Database Migration (Oracle Database)** issue -2. Click the **Run Task** button next to **Migrate to Azure Database for PostgreSQL (Spring)** - -> **📸 Screenshot Needed**: Screenshot showing clicking the "Run Task" button for PostgreSQL migration - -3. The Copilot Chat panel opens in **Agent Mode** with a pre-populated migration prompt - -#### 2.2 Review Migration Plan - -1. The Copilot Agent will analyze the project and generate a **migration plan** -2. The plan includes: - - **Session ID**: Unique identifier for this migration session - - **Target Branch**: New Git branch for migration changes (e.g., `migration/oracle-to-postgresql-`) - - **Files to Change**: List of files that will be modified - - **Migration Guidelines**: Steps from the knowledge base - - **Build Environment**: JDK and Maven configuration - -3. Review the plan carefully. The plan will be saved to `.appmod/.migration/plan.md` - -> **📸 Screenshot Needed**: Screenshot of the migration plan.md file showing the migration strategy - -4. The agent will pause and ask you to review the plan -5. Type **"Continue"** in the chat to proceed with the migration - -#### 2.3 Version Control Setup - -The agent will automatically: - -1. Check the Git repository status -2. Handle any uncommitted changes (based on your extension settings) -3. Create a new branch for the migration (e.g., `migration/oracle-to-postgresql-20250310-143022`) -4. Update the progress tracking file - -> **📸 Screenshot Needed**: Screenshot showing the new Git branch created in VS Code - -#### 2.4 Code Migration - -The agent will now perform automatic code changes: - -1. **Update Dependencies** (`pom.xml`): - - Remove Oracle JDBC driver dependency - - Add PostgreSQL JDBC driver - - Add Azure Identity Extensions for managed identity support - -2. **Update Configuration** (`application.properties`): - - Change JDBC URL from Oracle format to PostgreSQL format - - Update JPA dialect from Oracle to PostgreSQL - - Add Azure passwordless connection support - -3. **Update Entity Classes**: - - Replace Oracle-specific data types (e.g., `VARCHAR2` → `VARCHAR`) - - Update BLOB handling for PostgreSQL (`BLOB` → `BYTEA`) - - Fix any Oracle-specific SQL or annotations - -4. **Update Test Configuration** (`application-test.properties`): - - Update test database configuration - -> **📸 Screenshot Needed**: Screenshot showing file changes in VS Code's Source Control view - -The agent will: -- Click **Allow** for any tool call permission requests -- Automatically commit changes with descriptive commit messages -- Update progress in `.appmod/.migration/progress.md` - -#### 2.5 Validation and Fix Loop - -After code migration, the agent automatically runs a **validation and fix iteration loop**: - -##### Stage 1: Build Validation - -1. The agent uses Maven to build the project -2. If build errors occur: - - Agent analyzes each error - - Implements fixes automatically - - Commits fixes with descriptive messages - - Rebuilds the project -3. This loop continues until the build succeeds or reaches maximum 10 attempts - -> **📸 Screenshot Needed**: Screenshot of build validation progress in Copilot Chat - -##### Stage 2: CVE Validation - -1. Agent scans all dependencies for known vulnerabilities -2. If CVEs are detected: - - Agent recommends updated dependency versions - - Applies fixes automatically - - Commits the CVE fixes -3. Proceeds to next stage - -##### Stage 3: Consistency Validation - -1. Agent analyzes Git diffs to identify functional changes -2. Categorizes issues by severity: - - **Critical**: Must be fixed (e.g., behavior changes) - - **Major**: Should be fixed (e.g., missing validations) - - **Minor**: Documented but not auto-fixed -3. Automatically fixes critical and major issues -4. Documents minor issues for manual review - -> **📸 Screenshot Needed**: Screenshot showing consistency validation results - -##### Stage 4: Test Validation - -1. Agent runs unit tests using Maven -2. If test failures occur: - - Agent identifies integration tests vs unit tests - - Skips integration tests that require external resources - - Fixes unit test failures automatically - - Re-runs tests to verify fixes -3. Continues until all unit tests pass or reaches maximum 10 attempts - -##### Stage 5: Completeness Validation - -1. Agent searches the entire codebase for any remaining Oracle references -2. Checks: - - Configuration files - - Documentation - - Comments - - Unused code -3. Fixes any missed migration items -4. Commits completeness fixes - -> **📸 Screenshot Needed**: Screenshot of completeness validation discovering missed Oracle references - -##### Stage 6: Final Build Validation - -1. Agent performs a final build to ensure all fixes work together -2. If successful, proceeds to summary generation -3. If any issues remain, agent attempts up to 5 more fix rounds - -#### 2.6 Review Migration Summary - -1. After all validation stages complete, the agent generates a **summary.md** file -2. The summary includes: - - Migration session details - - Files modified - - Build status - - Test status - - CVE fixes applied - - Consistency issues resolved - - Completeness validation results - - Git commit history - -> **📸 Screenshot Needed**: Screenshot of the summary.md file showing successful migration - -3. Review the summary to understand all changes made -4. Click **Keep** in the Copilot Chat to apply all changes - -#### 2.7 Test Locally (Optional) - -If you want to test the migrated application locally before deploying to Azure: - -1. Start a local PostgreSQL database: - -```bash -docker run --name postgres-test -e POSTGRES_USER=photoalbum \ - -e POSTGRES_PASSWORD=photoalbum -e POSTGRES_DB=photoalbum \ - -p 5432:5432 -d postgres:latest -``` - -2. Build and run the application: - -```bash -mvn clean package -java -jar target/photo-album-1.0.0.jar -``` - -3. Open your browser to `http://localhost:8080` -4. Test photo upload, viewing, and deletion functionality - -### Step 3: Containerize the Application - -Now that you've successfully migrated to PostgreSQL, the next step is to prepare the application for cloud deployment by containerizing it. - -> **Note**: If you encountered issues in Step 2, you can checkout a branch where migration is complete and proceed from here. - -#### 3.1 Start Containerization Task - -1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane -2. In the **TASKS** section, expand **Common Tasks** > **Containerize Tasks** -3. Click the **Run** button for **Containerize Application** - -> **📸 Screenshot Needed**: Screenshot showing the Containerize Tasks section with the Run button - -4. The Copilot Chat panel opens with a pre-populated containerization prompt - -#### 3.2 Review Containerization Plan - -1. The agent analyzes the workspace and creates a **containerization-plan.copilotmd** -2. The plan includes: - - **Container Strategy**: Multi-stage Docker build for smaller images - - **Base Image**: Eclipse Temurin JRE (lightweight Java runtime) - - **Exposed Ports**: Port 8080 for the web application - - **Health Checks**: Spring Boot Actuator endpoints - - **Build Steps**: Maven build, Docker image creation - -> **📸 Screenshot Needed**: Screenshot of the containerization plan showing the Docker strategy - -3. Click **Continue** or **Allow** when prompted to proceed - -#### 3.3 Dockerfile Generation - -The agent will: - -1. Create a `Dockerfile` in the project root -2. Use a multi-stage build: - - **Stage 1**: Maven build stage - - **Stage 2**: Lightweight runtime stage with JRE - -Example Dockerfile structure: - -```dockerfile -# Stage 1: Build stage -FROM eclipse-temurin:21-jdk-alpine AS builder -WORKDIR /app -COPY pom.xml . -COPY src ./src -RUN mvn clean package -DskipTests - -# Stage 2: Runtime stage -FROM eclipse-temurin:21-jre-alpine -WORKDIR /app -COPY --from=builder /app/target/*.jar app.jar -EXPOSE 8080 -ENTRYPOINT ["java", "-jar", "app.jar"] -``` - -> **📸 Screenshot Needed**: Screenshot of the generated Dockerfile - -3. The agent may also create: - - `.dockerignore` file (to exclude unnecessary files from Docker context) - - Docker Compose file for local testing (optional) - -#### 3.4 Build Docker Image - -The agent will automatically: - -1. Build the Docker image: - -```bash -docker build -t photoalbum-java:latest . -``` - -2. If build errors occur, the agent will: - - Analyze the error - - Fix the Dockerfile or configuration - - Rebuild the image - -> **📸 Screenshot Needed**: Screenshot showing successful Docker image build - -3. Verify the image is created: - -```bash -docker images | grep photoalbum-java -``` - -#### 3.5 Test Container Locally (Optional) - -Before deploying to Azure, you can test the container locally: - -1. Run the container: - -```bash -docker run -p 8080:8080 \ - -e POSTGRES_USER=photoalbum \ - -e POSTGRES_PASSWORD=photoalbum \ - -e SPRING_DATASOURCE_URL=jdbc:postgresql://host.docker.internal:5432/photoalbum \ - photoalbum-java:latest -``` - -2. Access the application at `http://localhost:8080` -3. Verify all functionality works in the containerized environment - -#### 3.6 Review and Keep Changes - -1. The agent commits the containerization changes -2. Review the proposed code changes in VS Code -3. Click **Keep** to apply the Dockerfile and related files - -> **📸 Screenshot Needed**: Screenshot of Git commits showing containerization changes - -### Step 4: Deploy to Azure - -At this point, you have successfully migrated the application to PostgreSQL and containerized it. Now, you can deploy it to Azure. - -#### 4.1 Prerequisites for Azure Deployment - -Ensure you have: - -- Azure CLI installed and logged in: - -```bash -az login -az account set --subscription -``` - -- Docker CLI logged in to Azure Container Registry (will be set up by the agent) - -#### 4.2 Start Deployment Task - -1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane -2. In the **TASKS** section, expand **Common Tasks** > **Deployment Tasks** -3. Click the **Run** button for **Provision Infrastructure and Deploy to Azure** - -> **📸 Screenshot Needed**: Screenshot showing the Deployment Tasks section - -4. A pre-populated prompt appears in the Copilot Chat panel -5. **Optional**: Edit the prompt to specify: - - **Hosting Service**: Azure Container Apps (default) or Azure Kubernetes Service (AKS) - - **Resource Naming**: Custom resource group or naming convention - -Example prompt modification for AKS: - -``` -Deploy this Spring Boot application to Azure. -Hosting service: AKS -``` - -> **📸 Screenshot Needed**: Screenshot of the deployment prompt in Copilot Chat - -6. Press Enter or click **Continue** to proceed - -#### 4.3 Review Deployment Plan - -The agent creates a comprehensive deployment plan in **plan.copilotmd**: - -1. **Azure Resources Architecture**: - - Azure Container Registry (ACR) for Docker images - - Azure Database for PostgreSQL Flexible Server - - Azure Container Apps (or AKS) - - Managed Identity for passwordless authentication - - Virtual Network for secure communication - -2. **Resource Configuration**: - - Resource Group - - Location/Region - - SKU and pricing tiers - - Network configuration - - Security settings - -3. **Execution Steps**: - - Create resource group - - Provision PostgreSQL server - - Create container registry - - Build and push Docker image - - Configure managed identity - - Deploy application - - Configure health probes - -> **📸 Screenshot Needed**: Screenshot showing the deployment plan architecture diagram (if generated) - -4. Review the plan carefully -5. Click **Keep** to save the plan -6. Type **"Execute the plan"** in the Copilot Chat to start deployment - -#### 4.4 Azure Resource Provisioning - -The agent will: - -1. **Create Resource Group**: - -```bash -az group create --name photoalbum-rg --location eastus -``` - -2. **Create Azure Container Registry**: - -```bash -az acr create --resource-group photoalbum-rg \ - --name photoalbumacr --sku Basic -``` - -3. **Create Azure PostgreSQL Flexible Server**: - -```bash -az postgres flexible-server create \ - --resource-group photoalbum-rg \ - --name photoalbum-postgres \ - --location eastus \ - --admin-user azureuser \ - --admin-password \ - --sku-name Standard_B1ms \ - --version 16 -``` - -4. **Create Database**: - -```bash -az postgres flexible-server db create \ - --resource-group photoalbum-rg \ - --server-name photoalbum-postgres \ - --database-name photoalbum -``` - -5. **Configure Firewall Rules**: - -```bash -az postgres flexible-server firewall-rule create \ - --resource-group photoalbum-rg \ - --name photoalbum-postgres \ - --rule-name AllowAzureServices \ - --start-ip-address 0.0.0.0 \ - --end-ip-address 0.0.0.0 -``` - -> **📸 Screenshot Needed**: Screenshot showing Azure resources being created in Copilot Chat - -6. Click **Allow** or **Continue** when the agent requests permission to run these commands - -#### 4.5 Build and Push Docker Image - -The agent will: - -1. **Login to ACR**: - -```bash -az acr login --name photoalbumacr -``` - -2. **Tag the image**: - -```bash -docker tag photoalbum-java:latest photoalbumacr.azurecr.io/photoalbum-java:latest -``` - -3. **Push to ACR**: - -```bash -docker push photoalbumacr.azurecr.io/photoalbum-java:latest -``` - -> **📸 Screenshot Needed**: Screenshot showing Docker image push progress - -#### 4.6 Create Managed Identity - -The agent will: - -1. **Create User-Assigned Managed Identity**: - -```bash -az identity create \ - --resource-group photoalbum-rg \ - --name photoalbum-identity -``` - -2. **Assign Roles**: - - **AcrPull** role for pulling images from ACR - - **PostgreSQL contributor** role for database access - -3. **Configure PostgreSQL for Azure AD Authentication**: - -```bash -az postgres flexible-server ad-admin create \ - --resource-group photoalbum-rg \ - --server-name photoalbum-postgres \ - --object-id \ - --display-name photoalbum-identity -``` - -#### 4.7 Deploy to Azure Container Apps - -The agent will: - -1. **Create Container Apps Environment**: - -```bash -az containerapp env create \ - --name photoalbum-env \ - --resource-group photoalbum-rg \ - --location eastus -``` - -2. **Deploy the Application**: - -```bash -az containerapp create \ - --name photoalbum-app \ - --resource-group photoalbum-rg \ - --environment photoalbum-env \ - --image photoalbumacr.azurecr.io/photoalbum-java:latest \ - --registry-server photoalbumacr.azurecr.io \ - --registry-identity \ - --target-port 8080 \ - --ingress external \ - --env-vars \ - SPRING_DATASOURCE_URL=jdbc:postgresql://photoalbum-postgres.postgres.database.azure.com:5432/photoalbum?sslmode=require \ - AZURE_PASSWORDLESS_ENABLED=true \ - SPRING_DATASOURCE_USERNAME=photoalbum-identity \ - --user-assigned -``` - -3. **Configure Health Probes**: - - Liveness probe: `/actuator/health/liveness` - - Readiness probe: `/actuator/health/readiness` - -> **📸 Screenshot Needed**: Screenshot of Container App deployment progress - -4. The agent will display the application URL once deployment is complete - -#### 4.8 Verify Deployment - -1. The agent provides the public URL for your application: - -``` -https://photoalbum-app..eastus.azurecontainerapps.io -``` - -2. Open the URL in your browser -3. Test the application: - - Upload photos - - View gallery - - View photo details - - Delete photos - -> **📸 Screenshot Needed**: Screenshot of the deployed application running in Azure - -4. Verify the database connection: - - Azure AD authentication is being used (passwordless) - - Data persists across application restarts - -#### 4.9 Monitor Application - -The agent may set up: - -1. **Application Insights** for application monitoring -2. **Log Analytics** for container logs -3. **Metrics** for performance monitoring - -Access logs: - -```bash -az containerapp logs show \ - --name photoalbum-app \ - --resource-group photoalbum-rg \ - --follow -``` - -> **📸 Screenshot Needed**: Screenshot showing application logs in Azure Portal - -#### 4.10 Review Deployment Summary - -The agent generates a deployment summary in **progress.copilotmd**: - -- ✅ Resource group created -- ✅ Azure Container Registry provisioned -- ✅ Azure PostgreSQL Flexible Server created -- ✅ Database configured -- ✅ Managed Identity created and configured -- ✅ Docker image built and pushed -- ✅ Container App deployed -- ✅ Health probes configured -- ✅ Application accessible - -Click **Keep** to save all deployment scripts and configurations. - -## Clean Up - -After completing the workshop, clean up Azure resources to avoid charges: - -### Option 1: Delete Resource Group (Recommended) - -This deletes all resources in one command: - -```bash -az group delete --name photoalbum-rg --yes --no-wait -``` - -### Option 2: Delete Individual Resources - -If you want to keep some resources: - -1. **Delete Container App**: - -```bash -az containerapp delete \ - --name photoalbum-app \ - --resource-group photoalbum-rg \ - --yes -``` - -2. **Delete Container Apps Environment**: - -```bash -az containerapp env delete \ - --name photoalbum-env \ - --resource-group photoalbum-rg \ - --yes -``` - -3. **Delete PostgreSQL Server**: - -```bash -az postgres flexible-server delete \ - --resource-group photoalbum-rg \ - --name photoalbum-postgres \ - --yes -``` - -4. **Delete Container Registry**: - -```bash -az acr delete \ - --name photoalbumacr \ - --resource-group photoalbum-rg \ - --yes -``` - -5. **Delete Managed Identity**: - -```bash -az identity delete \ - --name photoalbum-identity \ - --resource-group photoalbum-rg -``` - -## Troubleshooting - -### Assessment Issues - -**Problem**: Assessment Report not generating - -**Solution**: -- Ensure GitHub Copilot app modernization extension is installed and activated -- Check that you're signed in to GitHub Copilot -- Verify `chat.extensionTools.enabled` is `true` in VS Code settings -- Reload VS Code window (`Ctrl+Shift+P` → "Reload Window") - ---- - -**Problem**: "No migration opportunities found" - -**Solution**: -- Check that you're on the `main` branch (Oracle version) -- Ensure `pom.xml` contains Oracle JDBC dependency -- Verify `application.properties` has Oracle JDBC URL - -### Migration Issues - -**Problem**: Build fails after migration - -**Solution**: -- Review error messages in Copilot Chat -- Allow the agent to attempt automatic fixes (up to 10 rounds) -- If still failing, check: - - JDK version (should be 21) - - Maven version (3.8+) - - Internet connection for dependency downloads - ---- - -**Problem**: Tests fail after migration - -**Solution**: -- Agent should automatically skip integration tests -- For unit test failures, agent will attempt fixes -- If manual intervention needed: - - Check test database configuration in `application-test.properties` - - Ensure H2 database dependency is present for tests - - Review test data compatibility with PostgreSQL - ---- - -**Problem**: Uncommitted changes conflict - -**Solution**: -- Before starting migration, commit or stash your changes: - -```bash -git stash -``` - -- Or configure the extension setting for handling uncommitted changes - -### Containerization Issues - -**Problem**: Docker build fails - -**Solution**: -- Ensure Docker Desktop is running -- Check that Maven build succeeds first: `mvn clean package` -- Review Dockerfile for syntax errors -- Agent will attempt automatic fixes - ---- - -**Problem**: Container won't start - -**Solution**: -- Check container logs: - -```bash -docker logs -``` - -- Verify environment variables are set correctly -- Ensure database is reachable from container - -### Deployment Issues - -**Problem**: Azure CLI not authenticated - -**Solution**: - -```bash -az login -az account set --subscription -``` - ---- - -**Problem**: Insufficient permissions in Azure - -**Solution**: -- Ensure your Azure account has **Contributor** or **Owner** role -- Check subscription permissions: - -```bash -az role assignment list --assignee -``` - ---- - -**Problem**: PostgreSQL connection fails from Container App - -**Solution**: -- Verify firewall rules allow Azure services -- Check managed identity has correct permissions: - -```bash -az postgres flexible-server ad-admin list \ - --resource-group photoalbum-rg \ - --server-name photoalbum-postgres -``` - -- Ensure environment variables are configured correctly - ---- - -**Problem**: Container App deployment timeout - -**Solution**: -- Check container logs in Azure Portal -- Verify health probe endpoints are responding: - - `/actuator/health/liveness` - - `/actuator/health/readiness` -- Ensure application starts within the timeout period (default: 240 seconds) -- Check application logs for startup errors - ---- - -**Problem**: "Error pulling image from ACR" - -**Solution**: -- Verify managed identity has **AcrPull** role: - -```bash -az role assignment list --assignee -``` - -- Ensure ACR login server is correct in Container App configuration -- Check that image was pushed successfully to ACR: - -```bash -az acr repository list --name photoalbumacr -``` - -### Application Issues - -**Problem**: Application returns 500 errors - -**Solution**: -- Check application logs: - -```bash -az containerapp logs show \ - --name photoalbum-app \ - --resource-group photoalbum-rg -``` - -- Verify database schema was created (check Hibernate DDL auto setting) -- Ensure managed identity authentication is working - ---- - -**Problem**: Photos upload but don't display - -**Solution**: -- Check BLOB/BYTEA column type in PostgreSQL -- Verify file size limits in application properties -- Review browser console for JavaScript errors - -## Additional Resources +1. In the **Assessment Report**, locate the **Database Migration (Oracle)** issue +1. Click the **Run Task** button next to **Migrate to Azure Database for PostgreSQL (Spring)** -- [Spring Boot Documentation](https://spring.boot.io/docs) -- [Azure Database for PostgreSQL](https://learn.microsoft.com/azure/postgresql/) -- [Azure Container Apps](https://learn.microsoft.com/azure/container-apps/) -- [Managed Identity](https://learn.microsoft.com/azure/active-directory/managed-identities-azure-resources/) -- [GitHub Copilot for Java](https://docs.github.com/copilot) -- [Docker Documentation](https://docs.docker.com/) +1. The Copilot Chat panel opens in **Agent Mode** with a pre-populated migration prompt -## Contributing + ![Run Task Prompt](doc-media/run-task-prompt.png) -When contributing to this project: +1. The Copilot Agent will analyze the project, generate and open **plan.md** and **progress.md**, then automatically proceed with the migration process. +1. The agent checks the version control system status and checks out a new branch for migration, then performs the code changes. Click **Allow** for any tool call requests from the agent. +1. When the code migration is complete, the agent will automatically run a **validation and fix iteration loop** which includes: + - **CVE Validation**: Detects Common Vulnerabilities and Exposures in current dependencies and fixes them. + - **Build Validation**: Attempts to resolve any build errors. + - **Consistency Validation**: Analyzes the code for functional consistency. + - **Test Validation**: Runs unit tests and automatically fixes any failures. + - **Completeness Validation**: Catches migration items missed in the initial code migration and fixes them. +1. After all validations complete, the agent generates a **summary.md** as the final step. +1. Review the proposed code changes and click **Keep** to apply them. -- Follow Spring Boot best practices -- Maintain database compatibility -- Ensure UI/UX consistency -- Test both local and Azure deployment scenarios -- Update documentation for any architectural changes -- Add appropriate tests for new features +### Step 3: Deploy to Azure -## License +At this point, you have successfully migrated the application to PostgreSQL. Now, you can deploy it to Azure. -This project is provided as-is for educational and demonstration purposes. +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. In the **TASKS** section, expand **Common Tasks** > **Deployment Tasks**. Click the run button for **Provision Infrastructure and Deploy to Azure**. ---- + ![Run Deployment task](doc-media/deployment-run-task.png) +1. A predefined prompt will be populated in the Copilot Chat panel with Agent Mode. -**Congratulations!** 🎉 +1. Click ****Continue**/**Allow** if pop-up notifications to let Copilot Agent analyze the project and create a deployment plan in **plan.copilotmd** with Azure resources architecture, recommended Azure resources for project and security configurations, and execution steps for deployment. -You have successfully completed the Photo Album Application Migration Workshop. You've learned how to: +1. View the architecture diagram, resource configurations, and execution steps in the plan. Click **Keep** to save the plan and type in **Execute the plan** to start the deployment. -- ✅ Assess a Java application for cloud readiness -- ✅ Migrate from Oracle Database to Azure Database for PostgreSQL -- ✅ Implement passwordless authentication with Managed Identity -- ✅ Containerize a Spring Boot application -- ✅ Deploy to Azure Container Apps -- ✅ Monitor and troubleshoot cloud applications +1. When prompted, click **Continue**/**Allow** in chat notifications or type **y**/**yes** in terminal as Copilot Agent follows the plan and leverages agent tools to create and run provisioning and deployment scripts, fix potential errors, and finish the deployment. You can also check the deployment status in **progress.copilotmd**. **DO NOT interrupt** when provisioning or deployment scripts are running. -These skills are transferable to migrating and modernizing other Java applications to Azure! + ![Deployment progress](doc-media/deployment-progress.png) diff --git a/azure-setup.sh b/azure-setup.sh deleted file mode 100644 index b469db5b..00000000 --- a/azure-setup.sh +++ /dev/null @@ -1,199 +0,0 @@ -#!/bin/bash - -set -e - -# Colors for output -RED='\033[0;31m' -GREEN='\033[0;32m' -YELLOW='\033[1;33m' -NC='\033[0m' # No Color - -echo_info() { - echo -e "${GREEN}[INFO]${NC} $1" -} - -echo_warning() { - echo -e "${YELLOW}[WARNING]${NC} $1" -} - -echo_error() { - echo -e "${RED}[ERROR]${NC} $1" -} - -echo_info "=== Azure Photo Album Resources Setup ===" - -# Variables -RANDOM_SUFFIX=$(openssl rand -hex 3) -RESOURCE_GROUP="photo-album-resources-${RANDOM_SUFFIX}" -LOCATION="Central US" -ACR_NAME="photoalbumacr$RANDOM" -AKS_NODE_VM_SIZE="Standard_D8ds_v5" -POSTGRES_SERVER_NAME="photoalbum-postgres-$(date +%s)" -POSTGRES_ADMIN_USER="photoalbum_admin" -POSTGRES_ADMIN_PASSWORD="P@ssw0rd123!" -POSTGRES_DATABASE_NAME="photoalbum" -POSTGRES_APP_USER="photoalbum" -POSTGRES_APP_PASSWORD="photoalbum" - -echo_info "Using default subscription..." -az account show --query "{Name:name, SubscriptionId:id}" -o table - -# Create Resource Group -echo_info "Creating resource group: $RESOURCE_GROUP" -az group create \ - --name $RESOURCE_GROUP \ - --location $LOCATION - -# Create PostgreSQL Flexible Server -echo_info "Creating PostgreSQL server: $POSTGRES_SERVER_NAME" -az postgres flexible-server create \ - --resource-group "$RESOURCE_GROUP" \ - --name "$POSTGRES_SERVER_NAME" \ - --location "$LOCATION" \ - --admin-user "$POSTGRES_ADMIN_USER" \ - --admin-password "$POSTGRES_ADMIN_PASSWORD" \ - --version "15" \ - --sku-name "Standard_D2ds_v4" \ - --storage-size "32" \ - --backup-retention "7" \ - --public-access "0.0.0.0" \ - --output none - -echo_info "PostgreSQL server created successfully!" - -# Create application database -echo_info "Creating database: $POSTGRES_DATABASE_NAME" -az postgres flexible-server db create \ - --resource-group "$RESOURCE_GROUP" \ - --server-name "$POSTGRES_SERVER_NAME" \ - --database-name "$POSTGRES_DATABASE_NAME" \ - --output none - -# Configure firewall for Azure services -echo_info "Configuring firewall rules..." -az postgres flexible-server firewall-rule create \ - --resource-group "$RESOURCE_GROUP" \ - --name "$POSTGRES_SERVER_NAME" \ - --rule-name "AllowAzureServices" \ - --start-ip-address "0.0.0.0" \ - --end-ip-address "0.0.0.0" \ - --output none - -# Add current IP to firewall -CURRENT_IP=$(curl -s https://api.ipify.org) -if [ -n "$CURRENT_IP" ]; then - echo_info "Adding your current IP ($CURRENT_IP) to firewall..." - az postgres flexible-server firewall-rule create \ - --resource-group "$RESOURCE_GROUP" \ - --name "$POSTGRES_SERVER_NAME" \ - --rule-name "AllowCurrentIP" \ - --start-ip-address "$CURRENT_IP" \ - --end-ip-address "$CURRENT_IP" \ - --output none -fi - -# Get server FQDN -echo_info "Getting server connection details..." -SERVER_FQDN=$(az postgres flexible-server show \ - --resource-group "$RESOURCE_GROUP" \ - --name "$POSTGRES_SERVER_NAME" \ - --query "fullyQualifiedDomainName" \ - --output tsv) - -# Wait a moment for server to be fully ready -echo_info "Waiting for server to be fully ready..." -sleep 30 - -# Setup application user and tables -echo_info "Setting up database user and tables..." - -# Create application user using the more reliable execute command -echo_info "Creating application user..." -az postgres flexible-server execute \ - --name "$POSTGRES_SERVER_NAME" \ - --admin-user "$POSTGRES_ADMIN_USER" \ - --admin-password "$POSTGRES_ADMIN_PASSWORD" \ - --database-name "postgres" \ - --querytext "CREATE USER photoalbum WITH PASSWORD 'photoalbum';" || echo_warning "User may already exist, continuing..." - -# Grant database connection privileges -echo_info "Granting database connection privileges..." -az postgres flexible-server execute \ - --name "$POSTGRES_SERVER_NAME" \ - --admin-user "$POSTGRES_ADMIN_USER" \ - --admin-password "$POSTGRES_ADMIN_PASSWORD" \ - --database-name "postgres" \ - --querytext "GRANT CONNECT ON DATABASE photoalbum TO photoalbum;" || echo_warning "Grant may have failed, continuing..." - -# Grant schema privileges on the photoalbum database -echo_info "Granting schema privileges..." -az postgres flexible-server execute \ - --name "$POSTGRES_SERVER_NAME" \ - --admin-user "$POSTGRES_ADMIN_USER" \ - --admin-password "$POSTGRES_ADMIN_PASSWORD" \ - --database-name "photoalbum" \ - --querytext "GRANT ALL PRIVILEGES ON SCHEMA public TO photoalbum;" || echo_warning "Schema privileges may have failed, continuing..." - -# Grant privileges on future objects (so Hibernate can create and manage tables) -echo_info "Setting up future object privileges for Hibernate..." -az postgres flexible-server execute \ - --name "$POSTGRES_SERVER_NAME" \ - --admin-user "$POSTGRES_ADMIN_USER" \ - --admin-password "$POSTGRES_ADMIN_PASSWORD" \ - --database-name "photoalbum" \ - --querytext "ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO photoalbum;" || echo_warning "Default privileges may have failed, continuing..." - -echo_info "Database user and schema setup completed! Hibernate will create and manage tables." - -# Store the datasource URL for later use -DATASOURCE_URL="jdbc:postgresql://$SERVER_FQDN:5432/$POSTGRES_DATABASE_NAME" -echo_info "Datasource URL: $DATASOURCE_URL" - -# Create Azure Container Registry -echo_info "Creating Azure Container Registry: $ACR_NAME" -az acr create \ - --name $ACR_NAME \ - --resource-group $RESOURCE_GROUP \ - --location $LOCATION \ - --sku Basic \ - --admin-enabled true - -# Create Azure Kubernetes Service (AKS) Cluster -echo_info "Creating AKS Cluster: ${RESOURCE_GROUP}-aks" -az aks create \ - --resource-group $RESOURCE_GROUP \ - --name "$RESOURCE_GROUP-aks" \ - --node-count 2 \ - --generate-ssh-keys \ - --location $LOCATION \ - --node-vm-size $AKS_NODE_VM_SIZE - -# Output connection information -echo "" -echo "================================================================" -echo "Setup Complete!" -echo "================================================================" -echo "Server FQDN: $SERVER_FQDN" -echo "Database: $POSTGRES_DATABASE_NAME" -echo "Application User: $POSTGRES_APP_USER" -echo "Resource Group: $RESOURCE_GROUP_NAME" -echo "" -echo "To connect your application to Azure PostgreSQL:" -echo "" -echo "1. Update your application.properties file:" -echo " spring.datasource.url=jdbc:postgresql://$SERVER_FQDN:5432/$POSTGRES_DATABASE_NAME" -echo "" -echo "2. Keep your existing username and password:" -echo " spring.datasource.username=$POSTGRES_APP_USER" -echo " spring.datasource.password=$POSTGRES_APP_PASSWORD" -echo "" -echo "3. Run your application normally:" -echo " mvn spring-boot:run" -echo " or" -echo " java -jar target/photo-album-*.jar" -echo "" -echo "Your existing application.properties configuration will work with Azure!" -echo "================================================================" - -echo_warning "Please save these credentials securely!" -echo_warning "Consider using Azure Key Vault for production deployments." \ No newline at end of file diff --git a/doc-media/assessment-report.png b/doc-media/assessment-report.png new file mode 100644 index 0000000000000000000000000000000000000000..be0dfbcb950b5af64acd5433ff3b509ce41402a8 GIT binary patch literal 81683 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 z z>*S|ny2?S8(3oxi3lADEm*z^1L;c@+zKJuQ9>zo_QmS_*BO7bMG}~H27tsm$3F&

A`#35r8h-56Qbte_(}QMXE7vb7Dx1 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 literal 0 HcmV?d00001 diff --git a/doc-media/containerization-plan.png b/doc-media/containerization-plan.png new file mode 100644 index 0000000000000000000000000000000000000000..03d72026078e7464925cb7064b0a5be307d55f07 GIT binary patch literal 62864 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 `rSKmqvn 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

ZxVFZKyitQB#q_19fD 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 NZ`-*wT0!r^{{w&CB&q-a literal 0 HcmV?d00001 diff --git a/doc-media/deployment-run-task.png b/doc-media/deployment-run-task.png new file mode 100644 index 0000000000000000000000000000000000000000..cd5309780c67999dcc2726a4999cadf4eefdb512 GIT binary patch literal 57324 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 Idlo_e0v_*WyZ`_I literal 0 HcmV?d00001 diff --git a/doc-media/run-task-prompt.png b/doc-media/run-task-prompt.png new file mode 100644 index 0000000000000000000000000000000000000000..74c27a2f15aab3cdc3c0aebcae48628162c4f80c GIT binary patch literal 24915 zcmb@tbx<5p+xCeC*8m9++}+)s;O_43!993zcMndG;O;iKyZhiWxa{P4-}l?Ct=+1v z`u30JbPq$H(|v?VF{|-o;8NfLNgwe6IxQLpk!TE-d zmfBJ4<68|gJbYO;J_ZydEo@o*Pj#8^l^XW)O&S|B1b()15CGTsu`Co~y5dXh%6Vbe|u&^;;5Z7nZZw*bL zo!J9HoVENI!3O=Xrf=SVLcvu!bF|zk3s(Cv?%6yqO&qXho+>f?5QA0z$|N#I@l}WE zVMis)yXrq}(6ZWkZGa&@BpS}y3wz|R?xWkA#;=8DTC|BX?z+~JUR*h+KJ9T&*dHcb!tpXc`; zHP2sJ4u6hf)MV&tsTP?p=H&L6Nm*>F#3Drmzm46d#nr{|Hl%93HpGN^H>5&FgP(0t z)i@N+djDRQWjyYy+;NfrRClg6c-m+kk&$a&nmpqN44m=>-yy{(S~J?OU!G*DlavA)+=`yjjkR z`R@+LKNzOJ|mbHcWb*f(5Iq$pkYtXJWRxMAocW%_wPt+lMZ=TodN}9QG}D zXWqmi=*`$MNRO?CDrgsfZCyq=nrQMW3kH|NGbvHRkN{|3Wg#dWsO-~r`icc{7+aL) zeisy{ZE|CXMy!b_?j_lN7T0f)X;u2F^P;pxpW}`g^yERErB4z6Sv11oSUTE8{%4tN zT8^QJ)avT?>nBZ+5s8Bj3PW`RXnPbqf*q&?B9*I^(TfRZT^VNef1T67*{d?bw zNjL|Yde&=Bf&kZj6SRu0kd}qfC-86dU0dN;0F4NR-slHBv$R44WFcZM{^04cw0^~* ztXUL5J^F;+$HF5Nf?jCr{kcf*zvs%X1{ruJG#8OM{=I2c+g$e35IC$D^WjQKnd%(a zlmX%JRiAk0nqShDSNUGZ-^>>|NTl$2?zO6EbY&G2k_{|4Bc<{n6pBwBobT)m68-%V zkm4PE90`z1WqgkhZ~js-9HFpb(Hjr$u~txUSznEp=e5G@H@Sf3_ny-zp?!i@CIs+U zarrrpGUnwrfm*Rp zQk~y*1yS?5#bB2RL?LM_58M4L@KtBN-%*I6SmO9Jlcho`B5U>!k+^!Ja9OI-+}466 z(CRO8MaXgCBHIFfjZKlXz`ucNUk+YP#Lx^bPBQ_An;%|Z{DLI~Mq=6Qe7u-eBD+l% zYM>!UHeX3<*b*NsrOK(kOaj*W`-y-EZwobAf;uZx&4s|XHSN18Ny)eS=J7c7xK2b` zHtlB}jACapuKED9hctYS5Jw4 zXr0+*L{`ZOY{9xFjyl|k3b%2d4sqzOKVw9&74?;4-7 zIPZ|JL?~32b9h}NH3ur&p8m~Nh>#E{RMY310Fql?=<3bh0fp@0eT?^1SzAkLfu7B& zS?aQiMxF3|Z6+thvS%NuvO|YrUR$~~kJIUI(SVL1G3nep^ateAn#?9PZ9A_E0h#$= zNV~2Fesf&DeUnLV`>Yo0^XKPxtM0>SdCx@iyFRVa3w zxw4(gvNvq9e5q^kQ@wFQJMpb@HontCipIcsa;SCQuCn^nK zYlh}%)QM>(mjr?&A&6rg-YXTP1$uc_s5_f12USD08aU)yWP!vgA0 zPiaMm-lJgx0@;3lTp}>86HKKmfwWyCfgP92cQYcJYtA9|hDU$*427H;UZF^o#jfgU z&D4LtZJk#wms7dukqZ`Uchp-8Ii8Q~)YrI5&*l8y^kD9X)84X)b$E+EYQmahV$2+g z3bpfcBsvuuvshbdecdx+Ilyx?5rZ=Vsi$Pn>$m2~s}st#R-&!s`HlXH`(d}1B%67G z>`>4vj_L#r9No+vI@Rsk>lbJ}d(>pX_B*FX!*{SfyvBR={{bhGd;egsD*ffsPHGdQ=%(ta9-9K_h-22O4|7(ZE1J0zIdi3XV z%PH`LsqvF-qAc6|d9dKYCin6?UgaxM*p{_p9=Aqk0AKf3KG~lZ?7*9K zJ$K)nvDg~<;n}-|KW>A*Z=>CwZnExp1hOF1)!ZZ*qZ!B&}zncN5$ivzj1!;e)+q;tUmnd zFx-a!XTQ~YV``1!z3F!~@>O9W_84_Fb$l|eJ(zcCGTePwm=@K>555W;MrLA)ND?5E z9e0nAppc~LG)ze}LTQanLvh7r_qJyYl?Qno#k!u}qx}>i zFbMNx%c+eb{`i`#uI-S^^7=Y&>E`?dHkwc*oqb)27VJS{DF>hKOVtAsXNm5e0hY+u zB&l$}BX=2?t|zPQ?!q)+H=j%|;AeM@K;Xn)N)Q0^#J;w zdR4_ujY6CAN?Y?`O9aj#;a1mZ$d*=m$dDH$>YJU}C~I!>oI!>mE@#ipCp3W9%z&l# z8K*ADIKF`1vVud$OX|xVv96=JKdtOdkS)!5rht228UKmU`Gahj!$NnFS%`9DC~IPO>#f0 z$D3Cxk7nMF(@)A?hBsHXxB&SJVeAFr6O3E=OBji-1zlw$cMoXuQpiURhQyb){vXCP z2MoE$-F$%~#6&;!bhvf&M!9%E2(#g^G?7e zaT_zgmE#YGT7Qtug`nI8W6h{!U`{6(AXV7k;Dn1C_ zM6S%-NLBH0=={|y0Of$eFS3I!zWqX}sqyiSr%NDRQDQpovHSr0Q`z^eNmn9uC7Zzf zf?!<#QZ&e+Ti-1I=vQ9NiYY@U(g@&koJV->J_wDr%mMm%>?#4giY&x~+;|QQ-sNh) zimRtA!#bV^NeRK8@eQ1QETVtglWM6!lIMuQ`kF)9Ss;X21Xq!EsB}8Wi_Ay}Gc6vv z!wR`0LN5M@j>jI~UU(^dimEiCJI40(7x;PgyZJ}RbDNT1Vd{7lX2Z|``kFs<8RM~t(*`2yQ1{J%bSBdl6qt4IPX9p>(dNXP28dsI zHJH3N3wzJO0j}AXj`VJulptAz0Z#DE@ZD@2c+7a9B z>iOGX8f(`h6xyKGdTl7sM(cde)fxz4j(TeE%>D6MoTFgvQOHaq=tCgtu^%%jvfBry z&V%ZD&X96Py(OFsTe8PQkjcY_6;*lXMwN0rqBIGSb1*~E^Tm%KhEOcyaXc@b(}KLt zBaWDJ$H4#o7Dp$Ru<-5<1aJ0EX^s2kQMQU6~*Yje`rGf*(Q!~DJ}S$9kiEc{!Ye*E3o;)p98#zujXW*R3?v(KDeK) zQ5VIYz3Tmni7YwbNT@%!#4o=kApzBlKbsFfY-M371WXCTW->OK=e=dVHuHa3APA(hKY@GYkcs}f(UqVO6e=$!S zE#|SHZ4R%|mHah&X7aLoX3F?@`PeN^V05~``l!v4t2)YwLza8&m(%$0=Z};Bpop8u z0c_62aW;N0g zZa=LMtUWgiiKEMW%OJX_Gq_}fdps4wvj$E7-44~J&s$@eT75ER&k=NFsbkBOevwh! zhwk1zSMNS}Q&-KH4yAfmIQUXW=0qN#%bM|Y==TbD&@xXnNv2w^226xh9_8nJOB?^C zYQsc!soeBYcQT6Xh!*|)IWv9)ctG%SRJW3({o)A^ZM8%60rVtj;E)iCdOB`dk!*eSC<=VOeK>E|qO_O>S~XdJ*-5Ie=?%t^mM}ngSuxZG5=z zbV|wbD(!pB1*3}s4S&>?ws^gpM@Xt70FcDwX}?#F3rp8Vl2+R~-{{MTeCqJG@nx7NR&RcxpB~=L|HP~uqC%pPCt9U^wR?| zsYF7XYt1`$yKAP`h+k46=pcfS_AR?JRPvyutQ+%+@S2?MvtPc%Z~;9P+vj#=e}MaC z{s8={Vd*MO+*@S89l~zMj;I12&qPUYBL_Q_K@dp=$b-yCt0kvI=;h}A_gnyt#Q0PdjoDH;~ho@$1r4jI!_Y^3(weQeL44BA*6aAij;GX zwbm(1(_1A5|Ic)xhv6?AwusFnqx>I%OisB3aD0qoQXg)=Z1iy0eE1P6Tw4r}JI8U$ zH*GiEa)0%heIbWkJqtK`VzvE6JA%Xh>%7%;~GJg#JtA z2FMMN!o^PA<08|OHKGJcsT3Q0XVP}A#rPR^(~+}xlw2kb*DHdYfDw2NQ#zhw5~g5e zhOSgdHsyN@QMQm^2w8n?YJVHYYf5i=+4ewf{cpgzSZw_1GS)tx^yW399xo-Fj{V-} zAn^N0sgF0xxaOFAusG1;Gg)}~aE9j)CMFEdFKV?KN6TBtp;b{tR`*)hxvY*iz->pH z*{5(I#NF}480|=Y4}A4C=Jzvqh)??`)R3?PTe1<}_{`Iqqu~|h$DNakD8*D(Fnx(C zXGC9#=>-urx77?1yw#R|w7zDSb~HfZ$cQGs>9IwSa;iXMDI583$3&ChSdFibfBnRv z(B+j@L$8Rb*b(f4{>A*VEd2>R?{g8Jd+K_J4sm7+xzAA=5wssY^mVVeq$iZb+1oaR zC4qq5mwgvRrxP%hwh&FN6;Gkz%Xb{REK2s>Mq2kKa2*)K8U&lPM9+w)Q`%UyF9es2AFj~Kne7*9L|98gCtf2Y?v13eD;c`mDWlu}^Nk3)0dlr{_$ zUnbRQIZB}Af`n^qxn*N8u4Z_VVe^GH1+}u1zrco4OYd{qOn0_NXukhVwO@OP*Hj4; zVN0(q<8G+1tV?aX)q{e4=Jim(1KL283AOx6nJQlOZz5D3(#$0KJ5G=VzW7l`MDABk zIK6$aCXIUqQnlfWK73p3ygc`QqABV?oW8Tn&p8dxXhm+UiJj82n2hcx5Lo$^b^}N} zuv^KIXw2z9Q*w<-yt+6&+J{ceStYaK(S&n~)_1>O033}6dD{CB6LOl8j0WK`Ci@QX zF$oUZ+6oG5+H9;&&$+nMwKo1N1ITH-dci5a{X3p?XOWehuMA7NyN%`$@~Nlp9#G#a zDjoA0%kR+X44%^m9Z#39y=(ZDdch{Y>(dpe;pHtB8ywDt^V{97C}ch(;5+h`2RbX{ z*93n{Bq$+VvKRc|n&V7&`~AeeX7CX|Y$$sK3dkmHpB7H4AwocaJm0WwKq8p9eel^? zRGHwb@f+U@SQ-72v+2BqP~2MesHE8Gfj-5*=>wU})`2SYs?L(@%w|5qfOAWcj3j~?!uxfg))dFK=HD*cR6NYVj0xWwx%P7as=V~+P?m3 zDIXjzziqin7(-+XG_?XnlC=13q7O0ZOe87te^<-@#(-8G-+0wuVl5 zd*L<)&2__7xF^{`z5*nd95nk1{9Y#~Kx__SfcD`_X_p;KQDmolVF_J{7e&ZGew4 zeH?}7js>^kDwWUU+t>&324xS7FC01$66fxBnpRU0D7$WD=4P_62Kve}(0qCaS4uBL zBFW%H&;=-*#oFs|t7r+Us53B6tys3&ZxMymAON13d<|l+fv}S+Yr_!ibF(>_(2XKH zkI?MLDOm;j^3;xFKD*|w{q;vMtzI%0qx(G4dMCv#fy4)y7G-JW(0z`#Ha-DbP8 zBTdh)+Xz`XBayhTist%zp>${A#kAL@uE#jK?JKxhC`G9F1M$=HzNl&<>6cRUd}X$Y zR3#FtoPtKK=M7lL!SP~Z`|`))I;xx;#-_#TS+&W(WM2dZhK9rEi1yrVCI9#$bF<3f z4>3UWB+?uHj$+<-hDTM32D;@Gbsjb z%Mw6>lBXt z+7DtGJcoXD2;<%KxTJ*A$=a!#bqiexje4n{-g^8P+;(5v@(hhNl`GTerCi>DcX_{gwP z*UB58g%u!2K_K&@^2u~KEG8I2!Ne$SG~k!-WJ6xn%?+q#ttDJqank29=d)ODrC^?) zM@EYv&8O}2btF7A1uho=kdSb3QM*-XEb+o9+)GDW#FoaUj0#D814;k7#X>2&8l7@` zAgsfG_fE9Fu2?Tu2xVUWS~fChtPZ~Iq#0X$O4 zHR*eT)B$FcY`|0YdLL{Aj_vKD;u47JeI}F~t}nFj!P7J;SQwB2Qfv32XCV|GrSeTJ z_Kvq=+>eTzvu+?n%-)W|F0XpsgF~IlK$QtRQDA%0-6WTKvv4>?xOaFAQT6=H(S>x1 z6etAU8N^GlqH$!1(q{ir>q$2?aBGmbCr}_UZ21j!8HOUPBj)#t-yC=&9Jx=8qUJlP z0eY7_330w0_8|~d;yEnYC*+tnaa{~kAm)KDdz`=Uz`No6%TNyqHGJh7E;5Gwqv$mx zIydmk^reoJPWdy<6aOb&&Ukx>kK`BL#0okj8Vw@HOztHknAhahKkk5q&Y5}gMPp_J znqFb(6`}yq3}EGydB@-;<0sQa(%~3m2+0@oM2(7iPOap~+hpwQMjluk8)k^d%$s}I zjmi!)6UT0q;EUiX9&?VfMYmHB=BFO(SwXs@ttrX)&$C~do$e}qW4AEIg596tTq

q{F^Ofm%4hufK47`tuJ?KsbyuGsgO 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,a(gbe!=?VZacY`K!uh+GLFsQ4~oTm^-j0EK~r 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 Zn%ono{@gz!!i0YgAJjgOw%_#Xe*o2u$Zr4u literal 0 HcmV?d00001 From fce06ca9dd983c8497ffc93ff9b671ed073b879a Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Wed, 11 Mar 2026 14:41:24 +0800 Subject: [PATCH 07/10] prepare doc --- WORKSHOP.md | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/WORKSHOP.md b/WORKSHOP.md index a4ef2d19..7fb0bcd2 100644 --- a/WORKSHOP.md +++ b/WORKSHOP.md @@ -1,9 +1,9 @@ # Photo Album Application - Migration Workshop -This document serves as a comprehensive workshop guide that will walk you through the process of migrating a Java application to Azure using GitHub Copilot app modernization. The workshop covers assessment, database migration from Oracle to PostgreSQL, containerization, and deployment to Azure. +This document serves as a comprehensive workshop guide that will walk you through the process of migrating a Java application to Azure using GitHub Copilot app modernization. The workshop covers assessment, database migration from Oracle to PostgreSQL, and deployment to Azure. **What the Migration Process Will Do:** -The migration will transform your application from using Oracle Database to a modern Azure-native solution. This includes migrating from Oracle Database to Azure Database for PostgreSQL Flexible Server with managed identity authentication, containerizing the application, and deploying it to Azure with proper monitoring and health checks. +The migration will transform your application from using Oracle Database to a modern Azure-native solution. This includes migrating from Oracle Database to Azure Database for PostgreSQL Flexible Server with managed identity authentication, and deploying it to Azure with proper monitoring and health checks. ## Table of Contents @@ -13,10 +13,7 @@ The migration will transform your application from using Oracle Database to a mo - [Workshop Steps](#workshop-steps) - [Step 1: Assess Your Java Application](#step-1-assess-your-java-application) - [Step 2: Migrate from Oracle to PostgreSQL](#step-2-migrate-from-oracle-to-postgresql) - - [Step 3: Containerize the Application](#step-3-containerize-the-application) - - [Step 4: Deploy to Azure](#step-4-deploy-to-azure) -- [Clean Up](#clean-up) -- [Troubleshooting](#troubleshooting) + - [Step 3: Deploy to Azure](#step-3-deploy-to-azure) ## Overview @@ -36,14 +33,12 @@ The Photo Album application is a Spring Boot web application that allows users t **After Migration:** * Azure Database for PostgreSQL Flexible Server * Managed Identity passwordless authentication -* Containerized application * Deployed to Azure Container Apps **Time Estimates:** The complete workshop takes approximately **1 hours** to complete. Here's the breakdown for each major step: - **Assess Your Java Application**: ~5 minutes - **Migrate from Oracle to PostgreSQL**: ~20 minutes -- **Containerize the Application**: ~5 minutes - **Deploy to Azure**: ~25 minutes ## Running Locally (Pre-Migration) From 62c31529ecd83e90a8c1fad8f234a35fa18e2974 Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Wed, 11 Mar 2026 14:48:51 +0800 Subject: [PATCH 08/10] Replace README with workshop guide --- README.md | 351 ++++++++++++++++++++++++---------------------------- WORKSHOP.md | 212 ------------------------------- 2 files changed, 160 insertions(+), 403 deletions(-) delete mode 100644 WORKSHOP.md diff --git a/README.md b/README.md index c664fbbb..7fb0bcd2 100644 --- a/README.md +++ b/README.md @@ -1,243 +1,212 @@ -# Photo Album Application - Java Spring Boot with Oracle DB +# Photo Album Application - Migration Workshop -A photo gallery application built with Spring Boot and Oracle Database, featuring drag-and-drop upload, responsive gallery view, and full-size photo details with navigation. +This document serves as a comprehensive workshop guide that will walk you through the process of migrating a Java application to Azure using GitHub Copilot app modernization. The workshop covers assessment, database migration from Oracle to PostgreSQL, and deployment to Azure. -## Features +**What the Migration Process Will Do:** +The migration will transform your application from using Oracle Database to a modern Azure-native solution. This includes migrating from Oracle Database to Azure Database for PostgreSQL Flexible Server with managed identity authentication, and deploying it to Azure with proper monitoring and health checks. -- 📤 **Photo Upload**: Drag-and-drop or click to upload multiple photos -- 🖼️ **Gallery View**: Responsive grid layout for browsing uploaded photos -- 🔍 **Photo Detail View**: Click any photo to view full-size with metadata and navigation -- 📊 **Metadata Display**: View file size, dimensions, aspect ratio, and upload timestamp -- ⬅️➡️ **Photo Navigation**: Previous/Next buttons to browse through photos -- ✅ **Validation**: File type and size validation (JPEG, PNG, GIF, WebP; max 10MB) -- 🗄️ **Database Storage**: Photo data stored as BLOBs in Oracle Database -- 🗑️ **Delete Photos**: Remove photos from both gallery and detail views -- 🎨 **Modern UI**: Clean, responsive design with Bootstrap 5 +## Table of Contents -## Technology Stack +- [Overview](#overview) +- [Running Locally (Pre-Migration)](#running-locally-pre-migration) +- [Prerequisites](#prerequisites) +- [Workshop Steps](#workshop-steps) + - [Step 1: Assess Your Java Application](#step-1-assess-your-java-application) + - [Step 2: Migrate from Oracle to PostgreSQL](#step-2-migrate-from-oracle-to-postgresql) + - [Step 3: Deploy to Azure](#step-3-deploy-to-azure) -- **Framework**: Spring Boot 2.7.18 (Java 8) -- **Database**: Oracle Database 21c Express Edition -- **Templating**: Thymeleaf -- **Build Tool**: Maven -- **Frontend**: Bootstrap 5.3.0, Vanilla JavaScript -- **Containerization**: Docker & Docker Compose +## Overview -## Prerequisites +The Photo Album application is a Spring Boot web application that allows users to: +- Upload photos via drag-and-drop or file selection +- View photos in a responsive gallery +- View photo details with metadata +- Navigate between photos +- Delete photos + +**Original State (Before Migration):** +* Oracle Database 21c Express Edition for photo storage +* Photos stored as BLOBs in Oracle Database +* Password-based authentication +* Running in Docker containers locally + +**After Migration:** +* Azure Database for PostgreSQL Flexible Server +* Managed Identity passwordless authentication +* Deployed to Azure Container Apps -- Docker Desktop installed and running -- Docker Compose (included with Docker Desktop) -- Minimum 4GB RAM available for Oracle DB container +**Time Estimates:** +The complete workshop takes approximately **1 hours** to complete. Here's the breakdown for each major step: +- **Assess Your Java Application**: ~5 minutes +- **Migrate from Oracle to PostgreSQL**: ~20 minutes +- **Deploy to Azure**: ~25 minutes -## Quick Start +## Running Locally (Pre-Migration) -1. **Clone the repository**: +Before starting the migration, you can run the original Oracle-based application locally to understand how it works. + +### Quick Start with Docker Compose + +1. **Clone the repository** (if not already done): ```bash - git clone https://github.com/Azure-Samples/PhotoAlbum-Java.git - cd PhotoAlbum-Java + git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git + cd PhotoAlbum-Java-Lite ``` 2. **Start the application**: ```bash - # Use docker-compose directly docker-compose up --build -d ``` This will: - Start Oracle Database 21c Express Edition container - - Build the Java Spring Boot application - - Start the Photo Album application container - - Automatically create the database schema using JPA/Hibernate + - Build and start the Photo Album application container + - Automatically create the database schema -3. **Wait for services to start**: - - Oracle DB takes 2-3 minutes to initialize on first run - - Application will start once Oracle is healthy +3. **Wait for services to start** (~2-3 minutes for Oracle DB initialization on first run) 4. **Access the application**: - - Open your browser and navigate to: **http://localhost:8080** - - The application should be running and ready to use - -## Services - -## Oracle Database -- **Image**: `container-registry.oracle.com/database/express:21.3.0-xe` -- **Ports**: - - `1521` (database) - mapped to host port 1521 - - `5500` (Enterprise Manager) - mapped to host port 5500 -- **Database**: `XE` (Express Edition) -- **Schema**: `photoalbum` -- **Username/Password**: `photoalbum/photoalbum` - -## Photo Album Java Application -- **Port**: `8080` (mapped to host port 8080) -- **Framework**: Spring Boot 2.7.18 -- **Java Version**: 8 -- **Database**: Connects to Oracle container -- **Photo Storage**: All photos stored as BLOBs in database (no file system storage) -- **UUID System**: Each photo gets a globally unique identifier for cache-busting - -## Database Setup - -The application uses Spring Data JPA with Hibernate for automatic schema management: - -1. **Automatic Schema Creation**: Hibernate automatically creates tables and indexes -2. **User Creation**: Oracle init scripts create the `photoalbum` user -3. **No Manual Setup Required**: Everything is handled automatically - -### Database Schema - -The application creates the following table structure in Oracle: - -#### PHOTOS Table -- `ID` (VARCHAR2(36), Primary Key, UUID Generated) -- `ORIGINAL_FILE_NAME` (VARCHAR2(255), Not Null) -- `FILE_SIZE` (NUMBER, Not Null) -- `MIME_TYPE` (VARCHAR2(50), Not Null) -- `UPLOADED_AT` (TIMESTAMP, Not Null, Default SYSTIMESTAMP) -- `WIDTH` (NUMBER, Nullable) -- `HEIGHT` (NUMBER, Nullable) -- `PHOTO_DATA` (BLOB, Not Null) - -#### Indexes -- `IDX_PHOTOS_UPLOADED_AT` (Index on UPLOADED_AT for chronological queries) - -#### UUID Generation -- **Java**: `UUID.randomUUID().toString()` generates unique identifiers -- **Benefits**: Eliminates browser caching issues, globally unique across databases -- **Format**: Standard UUID format (36 characters with hyphens) - -## Storage Architecture - -### Database BLOB Storage (Current Implementation) -- **Photos**: Stored as BLOB data directly in the database -- **Benefits**: - - No file system dependencies - - ACID compliance for photo operations - - Simplified backup and migration - - Perfect for containerized deployments -- **Trade-offs**: Database size increases, but suitable for moderate photo volumes - -## Development - -### Running Locally (without Docker) - -1. **Install Oracle Database** (or use Oracle XE) -2. **Create database user**: - ```sql - CREATE USER photoalbum IDENTIFIED BY photoalbum; - GRANT CONNECT, RESOURCE, DBA TO photoalbum; - ``` -3. **Update application.properties**: - ```properties - spring.datasource.url=jdbc:oracle:thin:@localhost:1521:XE - spring.datasource.username=photoalbum - spring.datasource.password=photoalbum - spring.jpa.hibernate.ddl-auto=create + - Open your browser to **http://localhost:8080** + - Upload, view, and manage photos to explore the features + +5. **Stop the application**: + ```bash + docker-compose down ``` -4. **Run the application**: + + To remove data volumes as well: ```bash - mvn spring-boot:run + docker-compose down -v ``` -### Building from Source +## Prerequisites -```bash -# Build the JAR file -mvn clean package +Before starting this workshop, ensure you have: -# Run the JAR file -java -jar target/photo-album-1.0.0.jar -``` +### Required Software -## Troubleshooting +- **Operating System**: Windows, macOS, or Linux +- **Java Development Kit (JDK)**: JDK 21 or higher + - Download from [Microsoft OpenJDK](https://learn.microsoft.com/java/openjdk/download) +- **Maven**: 3.8.0 or higher + - Download from [Apache Maven](https://maven.apache.org/download.cgi) +- **Docker Desktop**: Latest version, required if you want to run locally + - Download from [Docker](https://docs.docker.com/desktop/) +- **Git**: For version control + - Download from [Git](https://git-scm.com/) -### Oracle Database Issues +### IDE and Extensions -1. **Oracle container won't start**: - ```bash - # Check container logs - docker-compose logs oracle-db - - # Increase Docker memory allocation to at least 4GB - ``` +- **Visual Studio Code**: Version 1.101 or later + - Download from [Visual Studio Code](https://code.visualstudio.com/) +- **GitHub Copilot**: Must be enabled in your GitHub account + - [GitHub Copilot subscription](https://github.com/features/copilot) (Pro, Pro+, Business, or Enterprise) +- **VS Code Extensions** (Required): + 1. **GitHub Copilot** extension + - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) + - Sign in to your GitHub account within VS Code + 2. **GitHub Copilot app modernization** extension + - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=vscjava.migrate-java-to-azure) + - Restart VS Code after installation -2. **Database connection errors**: - ```bash - # Verify Oracle is ready - docker exec -it photoalbum-oracle sqlplus photoalbum/photoalbum@//localhost:1521/XE - ``` +### Azure Requirements -3. **Permission errors**: - ```bash - # Check Oracle init scripts ran - docker-compose logs oracle-db | grep "setup" - ``` +- **Azure Account**: Active Azure subscription + - [Create a free account](https://azure.microsoft.com/free/) if you don't have one +- **Azure CLI**: Latest version + - Download from [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) -### Application Issues +### Configuration -1. **View application logs**: - ```bash - docker-compose logs photoalbum-java-app - ``` +- Ensure `chat.extensionTools.enabled` is set to `true` in VS Code settings +- In the Visual Studio Code settings, make sure this setting is enabled (it might be controlled by your organization) +- Access to public Maven Central repository for Maven-based projects +- Git-managed Java project using Maven -2. **Rebuild application**: - ```bash - docker-compose up --build - ``` +## Workshop Steps -3. **Reset database (nuclear option)**: - ```bash - docker-compose down -v - docker-compose up --build - ``` +### Step 1: Assess Your Java Application -## Stopping the Application +The first step is to assess the Photo Album application to identify migration opportunities and potential issues. -```bash -# Stop services -docker-compose down +#### 1.1 Open the Project + +1. Clone or open the Photo Album project in Visual Studio Code: -# Stop and remove all data (including database) -docker-compose down -v +```bash +git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git +cd PhotoAlbum-Java-Lite +code . ``` -## Enterprise Manager (Optional) +#### 1.2 Install GitHub Copilot App Modernization Extension -Oracle Enterprise Manager is available at `http://localhost:5500/em` for database administration: -- **Username**: `system` -- **Password**: `photoalbum` -- **Container**: `XE` +In VS Code, open the Extensions view from the Activity Bar, search for the `GitHub Copilot app modernization` extension in the marketplace. Click the Install button for the extension. After installation completes, you should see a notification in the bottom-right corner of VS Code confirming success. -## Performance Notes +#### 1.3 Run Assessment -- Oracle XE has limitations (max 2 CPU threads, 2GB RAM, 12GB storage) -- BLOB storage in database impacts performance at scale -- Suitable for development and small-scale deployments +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. +1. In the **QUICKSTART** section, click **Start Assessment** to trigger the app assessment. -## Project Structure + ![Trigger Assessment](doc-media/trigger-assessment.png) -``` -PhotoAlbum/ -├── src/ # Java source code -├── oracle-init/ # Oracle initialization scripts -├── docker-compose.yml # Oracle + Application services -├── Dockerfile # Application container build -├── pom.xml # Maven dependencies and build config -└── README.md # Project documentation -``` +1. Wait for the assessment to be completed. This step could take several minutes. +1. Upon completion, an **Assessment Report** tab opens. This report provides a categorized view of cloud readiness issues and recommended solutions. Select the **Issues** tab to view proposed solutions and proceed with migration steps. + +#### 1.4 Review Assessment Report + +The Assessment Report provides: + +- **Application Information**: Summary of detected technologies and frameworks +- **Issues**: Categorized list of migration opportunities + - **Database Migration**: Oracle Database → Azure Database for PostgreSQL + - **Security**: Current password-based authentication +- **Recommended Solutions**: Predefined migration tasks for each issue + +Look for the following in your report: + +1. **Database Migration (Oracle Database)** + - Detected: Oracle Database 21c + - Recommendation: Migrate to Azure Database for PostgreSQL Flexible Server + - Action: **Run Task** button available + + ![Assessment Report](doc-media/assessment-report.png) + +### Step 2: Migrate from Oracle to PostgreSQL + +Now that you've assessed the application, let's begin the database migration from Oracle to Azure Database for PostgreSQL. + +1. In the **Assessment Report**, locate the **Database Migration (Oracle)** issue +1. Click the **Run Task** button next to **Migrate to Azure Database for PostgreSQL (Spring)** + +1. The Copilot Chat panel opens in **Agent Mode** with a pre-populated migration prompt + + ![Run Task Prompt](doc-media/run-task-prompt.png) + +1. The Copilot Agent will analyze the project, generate and open **plan.md** and **progress.md**, then automatically proceed with the migration process. +1. The agent checks the version control system status and checks out a new branch for migration, then performs the code changes. Click **Allow** for any tool call requests from the agent. +1. When the code migration is complete, the agent will automatically run a **validation and fix iteration loop** which includes: + - **CVE Validation**: Detects Common Vulnerabilities and Exposures in current dependencies and fixes them. + - **Build Validation**: Attempts to resolve any build errors. + - **Consistency Validation**: Analyzes the code for functional consistency. + - **Test Validation**: Runs unit tests and automatically fixes any failures. + - **Completeness Validation**: Catches migration items missed in the initial code migration and fixes them. +1. After all validations complete, the agent generates a **summary.md** as the final step. +1. Review the proposed code changes and click **Keep** to apply them. + +### Step 3: Deploy to Azure + +At this point, you have successfully migrated the application to PostgreSQL. Now, you can deploy it to Azure. + +1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. In the **TASKS** section, expand **Common Tasks** > **Deployment Tasks**. Click the run button for **Provision Infrastructure and Deploy to Azure**. -## Contributing + ![Run Deployment task](doc-media/deployment-run-task.png) +1. A predefined prompt will be populated in the Copilot Chat panel with Agent Mode. -When contributing to this project: +1. Click ****Continue**/**Allow** if pop-up notifications to let Copilot Agent analyze the project and create a deployment plan in **plan.copilotmd** with Azure resources architecture, recommended Azure resources for project and security configurations, and execution steps for deployment. -- Follow Spring Boot best practices -- Maintain database compatibility -- Ensure UI/UX consistency -- Test both local Docker and Azure deployment scenarios -- Update documentation for any architectural changes -- Preserve UUID system integrity -- Add appropriate tests for new features +1. View the architecture diagram, resource configurations, and execution steps in the plan. Click **Keep** to save the plan and type in **Execute the plan** to start the deployment. -## License +1. When prompted, click **Continue**/**Allow** in chat notifications or type **y**/**yes** in terminal as Copilot Agent follows the plan and leverages agent tools to create and run provisioning and deployment scripts, fix potential errors, and finish the deployment. You can also check the deployment status in **progress.copilotmd**. **DO NOT interrupt** when provisioning or deployment scripts are running. -This project is provided as-is for educational and demonstration purposes. \ No newline at end of file + ![Deployment progress](doc-media/deployment-progress.png) diff --git a/WORKSHOP.md b/WORKSHOP.md deleted file mode 100644 index 7fb0bcd2..00000000 --- a/WORKSHOP.md +++ /dev/null @@ -1,212 +0,0 @@ -# Photo Album Application - Migration Workshop - -This document serves as a comprehensive workshop guide that will walk you through the process of migrating a Java application to Azure using GitHub Copilot app modernization. The workshop covers assessment, database migration from Oracle to PostgreSQL, and deployment to Azure. - -**What the Migration Process Will Do:** -The migration will transform your application from using Oracle Database to a modern Azure-native solution. This includes migrating from Oracle Database to Azure Database for PostgreSQL Flexible Server with managed identity authentication, and deploying it to Azure with proper monitoring and health checks. - -## Table of Contents - -- [Overview](#overview) -- [Running Locally (Pre-Migration)](#running-locally-pre-migration) -- [Prerequisites](#prerequisites) -- [Workshop Steps](#workshop-steps) - - [Step 1: Assess Your Java Application](#step-1-assess-your-java-application) - - [Step 2: Migrate from Oracle to PostgreSQL](#step-2-migrate-from-oracle-to-postgresql) - - [Step 3: Deploy to Azure](#step-3-deploy-to-azure) - -## Overview - -The Photo Album application is a Spring Boot web application that allows users to: -- Upload photos via drag-and-drop or file selection -- View photos in a responsive gallery -- View photo details with metadata -- Navigate between photos -- Delete photos - -**Original State (Before Migration):** -* Oracle Database 21c Express Edition for photo storage -* Photos stored as BLOBs in Oracle Database -* Password-based authentication -* Running in Docker containers locally - -**After Migration:** -* Azure Database for PostgreSQL Flexible Server -* Managed Identity passwordless authentication -* Deployed to Azure Container Apps - -**Time Estimates:** -The complete workshop takes approximately **1 hours** to complete. Here's the breakdown for each major step: -- **Assess Your Java Application**: ~5 minutes -- **Migrate from Oracle to PostgreSQL**: ~20 minutes -- **Deploy to Azure**: ~25 minutes - -## Running Locally (Pre-Migration) - -Before starting the migration, you can run the original Oracle-based application locally to understand how it works. - -### Quick Start with Docker Compose - -1. **Clone the repository** (if not already done): - ```bash - git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git - cd PhotoAlbum-Java-Lite - ``` - -2. **Start the application**: - ```bash - docker-compose up --build -d - ``` - - This will: - - Start Oracle Database 21c Express Edition container - - Build and start the Photo Album application container - - Automatically create the database schema - -3. **Wait for services to start** (~2-3 minutes for Oracle DB initialization on first run) - -4. **Access the application**: - - Open your browser to **http://localhost:8080** - - Upload, view, and manage photos to explore the features - -5. **Stop the application**: - ```bash - docker-compose down - ``` - - To remove data volumes as well: - ```bash - docker-compose down -v - ``` - -## Prerequisites - -Before starting this workshop, ensure you have: - -### Required Software - -- **Operating System**: Windows, macOS, or Linux -- **Java Development Kit (JDK)**: JDK 21 or higher - - Download from [Microsoft OpenJDK](https://learn.microsoft.com/java/openjdk/download) -- **Maven**: 3.8.0 or higher - - Download from [Apache Maven](https://maven.apache.org/download.cgi) -- **Docker Desktop**: Latest version, required if you want to run locally - - Download from [Docker](https://docs.docker.com/desktop/) -- **Git**: For version control - - Download from [Git](https://git-scm.com/) - -### IDE and Extensions - -- **Visual Studio Code**: Version 1.101 or later - - Download from [Visual Studio Code](https://code.visualstudio.com/) -- **GitHub Copilot**: Must be enabled in your GitHub account - - [GitHub Copilot subscription](https://github.com/features/copilot) (Pro, Pro+, Business, or Enterprise) -- **VS Code Extensions** (Required): - 1. **GitHub Copilot** extension - - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=GitHub.copilot) - - Sign in to your GitHub account within VS Code - 2. **GitHub Copilot app modernization** extension - - Install from [VS Code Marketplace](https://marketplace.visualstudio.com/items?itemName=vscjava.migrate-java-to-azure) - - Restart VS Code after installation - -### Azure Requirements - -- **Azure Account**: Active Azure subscription - - [Create a free account](https://azure.microsoft.com/free/) if you don't have one -- **Azure CLI**: Latest version - - Download from [Azure CLI](https://docs.microsoft.com/cli/azure/install-azure-cli) - -### Configuration - -- Ensure `chat.extensionTools.enabled` is set to `true` in VS Code settings -- In the Visual Studio Code settings, make sure this setting is enabled (it might be controlled by your organization) -- Access to public Maven Central repository for Maven-based projects -- Git-managed Java project using Maven - -## Workshop Steps - -### Step 1: Assess Your Java Application - -The first step is to assess the Photo Album application to identify migration opportunities and potential issues. - -#### 1.1 Open the Project - -1. Clone or open the Photo Album project in Visual Studio Code: - -```bash -git clone https://github.com/Azure-Samples/PhotoAlbum-Java-Lite.git -cd PhotoAlbum-Java-Lite -code . -``` - -#### 1.2 Install GitHub Copilot App Modernization Extension - -In VS Code, open the Extensions view from the Activity Bar, search for the `GitHub Copilot app modernization` extension in the marketplace. Click the Install button for the extension. After installation completes, you should see a notification in the bottom-right corner of VS Code confirming success. - -#### 1.3 Run Assessment - -1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. -1. In the **QUICKSTART** section, click **Start Assessment** to trigger the app assessment. - - ![Trigger Assessment](doc-media/trigger-assessment.png) - -1. Wait for the assessment to be completed. This step could take several minutes. -1. Upon completion, an **Assessment Report** tab opens. This report provides a categorized view of cloud readiness issues and recommended solutions. Select the **Issues** tab to view proposed solutions and proceed with migration steps. - -#### 1.4 Review Assessment Report - -The Assessment Report provides: - -- **Application Information**: Summary of detected technologies and frameworks -- **Issues**: Categorized list of migration opportunities - - **Database Migration**: Oracle Database → Azure Database for PostgreSQL - - **Security**: Current password-based authentication -- **Recommended Solutions**: Predefined migration tasks for each issue - -Look for the following in your report: - -1. **Database Migration (Oracle Database)** - - Detected: Oracle Database 21c - - Recommendation: Migrate to Azure Database for PostgreSQL Flexible Server - - Action: **Run Task** button available - - ![Assessment Report](doc-media/assessment-report.png) - -### Step 2: Migrate from Oracle to PostgreSQL - -Now that you've assessed the application, let's begin the database migration from Oracle to Azure Database for PostgreSQL. - -1. In the **Assessment Report**, locate the **Database Migration (Oracle)** issue -1. Click the **Run Task** button next to **Migrate to Azure Database for PostgreSQL (Spring)** - -1. The Copilot Chat panel opens in **Agent Mode** with a pre-populated migration prompt - - ![Run Task Prompt](doc-media/run-task-prompt.png) - -1. The Copilot Agent will analyze the project, generate and open **plan.md** and **progress.md**, then automatically proceed with the migration process. -1. The agent checks the version control system status and checks out a new branch for migration, then performs the code changes. Click **Allow** for any tool call requests from the agent. -1. When the code migration is complete, the agent will automatically run a **validation and fix iteration loop** which includes: - - **CVE Validation**: Detects Common Vulnerabilities and Exposures in current dependencies and fixes them. - - **Build Validation**: Attempts to resolve any build errors. - - **Consistency Validation**: Analyzes the code for functional consistency. - - **Test Validation**: Runs unit tests and automatically fixes any failures. - - **Completeness Validation**: Catches migration items missed in the initial code migration and fixes them. -1. After all validations complete, the agent generates a **summary.md** as the final step. -1. Review the proposed code changes and click **Keep** to apply them. - -### Step 3: Deploy to Azure - -At this point, you have successfully migrated the application to PostgreSQL. Now, you can deploy it to Azure. - -1. In the Activity sidebar, open the **GitHub Copilot app modernization** extension pane. In the **TASKS** section, expand **Common Tasks** > **Deployment Tasks**. Click the run button for **Provision Infrastructure and Deploy to Azure**. - - ![Run Deployment task](doc-media/deployment-run-task.png) -1. A predefined prompt will be populated in the Copilot Chat panel with Agent Mode. - -1. Click ****Continue**/**Allow** if pop-up notifications to let Copilot Agent analyze the project and create a deployment plan in **plan.copilotmd** with Azure resources architecture, recommended Azure resources for project and security configurations, and execution steps for deployment. - -1. View the architecture diagram, resource configurations, and execution steps in the plan. Click **Keep** to save the plan and type in **Execute the plan** to start the deployment. - -1. When prompted, click **Continue**/**Allow** in chat notifications or type **y**/**yes** in terminal as Copilot Agent follows the plan and leverages agent tools to create and run provisioning and deployment scripts, fix potential errors, and finish the deployment. You can also check the deployment status in **progress.copilotmd**. **DO NOT interrupt** when provisioning or deployment scripts are running. - - ![Deployment progress](doc-media/deployment-progress.png) From 92942379c906225d39fd75b5311d7c98e5c37edf Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Wed, 11 Mar 2026 16:08:19 +0800 Subject: [PATCH 09/10] choose correct model --- README.md | 8 ++++++++ doc-media/custom-agent.png | Bin 0 -> 34088 bytes 2 files changed, 8 insertions(+) create mode 100644 doc-media/custom-agent.png diff --git a/README.md b/README.md index 7fb0bcd2..2ab1cf97 100644 --- a/README.md +++ b/README.md @@ -174,6 +174,14 @@ Look for the following in your report: ### Step 2: Migrate from Oracle to PostgreSQL +Before running the migration task in Copilot Chat, make sure the chat is configured to use your preferred LLM model, to choose the model: + +1. Open Copilot Chat in **Agent** mode. +1. Select the custom agent **modernize-azure-java** from the agent picker. +1. Select the a model from the model picker, e.g., **GPT-5.4**. + + ![Custom Agent](doc-media/custom-agent.png) + Now that you've assessed the application, let's begin the database migration from Oracle to Azure Database for PostgreSQL. 1. In the **Assessment Report**, locate the **Database Migration (Oracle)** issue diff --git a/doc-media/custom-agent.png b/doc-media/custom-agent.png new file mode 100644 index 0000000000000000000000000000000000000000..ff2ef523a3a560c258daac1824fc83000a24d8a4 GIT binary patch literal 34088 zcmeFZc{rA9*f;u+Ib%tp3@M7pP$)8FYLHZtAu@$b8AF+eCPJ$+q>^TtlUe35qzGjQ z848g(%JBWJ)_RZq?S1S&zGMHr-{XDPyI7CsdG7nVuJim&=Y36AM~j7thlxU=upB&~ zew;#~uExL5G0@?ktv6Jq@c*dXj%)3wq`liXj2~!hRF9}qD4CI~7tLw$Go$kXLpKU# zLmT-&D((+&$0(GLHwV>K^}I~Sx;+gz+n1Fme$AbYVGYycc#>>JrRR`Y8EtXngSzFe zYun|Xb;qi^S-yR9Ex+#Pmx1bmOD)>FKg3$BKe8i}X5IEj%^c^bUuC%GWR)nFzw3_c ze#&@t%6ngv_osc|8h$kVko*%TWAko;hnM$A-nBUG6=R=i`}&fu_UNSS?A8$vZ|^*_fbmN5b;co z{KDJYd)H}R!H_6Em$@H?A)%p$EFUy0vN@U+8l+6@?ZuesR)uQ{ z{ehByzs|6nmm=SmHH-tUdqVaL=6-tXL0gUQb3ExbwZ-2{X+A&crFh_JGiz|a6Mgm2 z!+$R)DqdBq%q5rFQYqo6s?;#t79SO8HuL?% z{J^cF8GcI_<>lp_!|KG-UcFkgviMDTa*9cjOi&#i7xm! zBgV;8xR^-RK3{6h^oZ1tCG8@Y6zUSLU0ugszDOGnA=4P6 zaD{?fKQ$k6^^a#d%o@G9xI5>3PsG506*n{8HcqA;#yQMVQc}9ft)DV2>HoQPD^WjL zFs5G0ZAiNzPNv50jIE<%RleId=iXAP+c7Z}w!8LkStGb@8^hrkiK-|;HG|p4>({Sm z`2M+YI^UJ{;v2qq@7~2K`R={Uy6Jjjyj-V4T#H?{y!&_d2)=#SFJGo(prNLrr?>q4 z>TF8WvE){-U)`R^PMx~K!YeBvBePcF!jFJDt8%xdee}x8%KF~t&TaRb@1x&#=g`E0 zkGiI&#lqC!#MG3<(7EKQiRTG^<$Sf=qV&7wwmV#9sbVG&(GkM72{<#{&yeACTMPH zF>Enf!$9LTRVTu+c5OvUyHKQJ&}4s2)`+1~XUrMD4Saljl;^uor0Vx~o-fgGbQI_F zojF!nQ?ttP&)cLE&oexKn!eBzr354-@N?}n4d)QjbRVVZDmuEj{O9M3^mO`!CM{=Y z$>^PDB1{S|e0DU?&hF-9q8)m7KkV9C5owc}hMq$G|yPn@vA$(px{;Us%HPLTCRSz1(w*Q*3wZY zH?y-0Lm~OjSqe{DhINgN>l^u;ySlmrxWe*3ZyMRznVwvq-acwr<56~*h1b-w)wU+J zt>lxwuE~iLtNi`_!;EsD-M!0mZ;uTP}f&6_u=ut+{j zv+cD_OfT7Azi3E$=bHsr3815caT;fB;2MP>?;WO5XSPE~eG1KQuQ}@7%ew zt?v4vr{yIpOXs(Uh*UH-vT$&4IJ>)74%Wwzy2!j~FXw{?4=9x2vVbQ~w%G3CxvIW- zalSwD{jfVKAGe&-#?z-y$4(U#?EUfO4KEcH)x@t~S2Q21y0}P5oX!i7vaFU|y4KjK zlc+0M-}><*4P|0>_UzV7gK+#s$dxOW!_80GnL;JwwB>!~C6$)vEqCqOC9ruj_44wv zt*x!f#fy8>ObRa_d#vd(?4SDV8QssKY1TuB4zX|C82<2~Kwf@+;*%#d-`?F6c7mbe2R6`UYsm?oRad2id9>;Zk2Z%3U6F`BGlN} z==Jl>uc+I%X#!OO%quRJb$0TuTenW$|Nw zyvkwnTS~yUf21{eVqzkLDPU~tjIP<~WLb-$m<8MBS*I`)fA^FOj^t{ua@CIumM`k8 z_T%u0NpQcwJ6TB^KA)4xT7JD$khMrxv6A-0eY<3F>jNjPz{w4ICr_Gx$}smDinEct z@WVhGcatud>htH%d0vy7=Y5n+FAi_jzQ1=JBO@aN3ya2~Lrk|1ZTNs8~ z!pBaZ4xgX*!WI_xN={GLI(c#(PJS>d9*<{_uN)3q>=c$M@#$0AokbJW){S>V@pA20 zNviz({B2@l!7(xGgMxw#I^Ri4&P`9Noj$!$EHosf_g9ZU%1=#yq%y0VoE$~P&rhj% zaq95=@81>`msw(E9eKX?_e(i;?9$WI6A%|?!HF_qV$C)Z2gqnkGYLa^+bki$iu*Ky zcXf4@-o?X$ODyf5WM8w!B0GgCl)5I8|H}Tv(!0CuV+%bBdAU!WJem0NCDUWA$m;1P z<;beA^)f9#aRU7pC+V#lVgt!F^;h4hn4j$D;N=aQnQHQkE0Vhj-$p2Y!CW!opJ9&=8^`U`AVwYn~rTPVXHU2=N$g>l-ipsfi1& zj^vN5yCotdC$}Ce9d%#}mNxY9V3Vix(FcDFKY(Vq#)a zSgsV4!syS+-QC?TedV+t+uCr=5$9;f|8Cr=si}v@lQQgDMH?RM;}z11c=9kWq2O5H zq)1)s{PyYU+%Me>HwyIU<*!RRIe&`~w6*Wb^w@1HARVXO+nF!b_~73ydhyKz@9u?` zB%NiMf8xWkvSgBtX(DULUFiG%o#BRNaOmpw`%#N#Q6i*JHFwF%J}M~Su`N8j5~;i# z@cg-meu{zl?&B4JJCgp(KBR(d-+rx58ATHyR_fB612eB|`0gVpH_4rWpGlbQRp4z?&>5cZ9P8a*c)&0blU|FjuVVo1*%A&E2^J|2{xS3IXBe3wA zwQCdGM>E}rkJHf6y?T59{{760vv##s()W~nJ4S}WBba%1F=SacT4eu@KPsUox(=0_ zZszNQMR%vHKRf=kFk(pO7$BxV6NlHrM-gj}Auy$$~sKc;_Vp_@KR>^|simcmsF+ya*qEc|{dG*VKEA%kPMiq7ex1q5rO?O6 zC#9_kY{kjRDP`sUmoEO=(hJXC+l#p6-c3vMKXtyNpw+|U((6+_J|`Exe|Ss~ovW*z zT%DCPuxNkS&fR1eZ*t`K z?gea>lG|gKZA1Y2=9{H;b=Qo$CEUbj*PrnTM3Xb#I?dvI=gys!;f)(Nrsz<19DI8G zS#rhf%aoML@$SODk&)}z^slJrtE)9_vyE=wzTJ!3@!Dt^C5PNL6r_d|vwpvaMUpQj zpGvph$D#Z5cweJjPi1m?@%8%(o||{>WRsAPxEc|W!=xiVI5hMXSH!@?Wbu35FPcQ% z+Ja^?ec&!EO)x#1QEC(VU|ibnA+A<*QbqI<{n;G}7N<^~YVTXFIeF$xWOOuF?VxL6 zXHDBdGaDD<7h}WkmQ@beaJG9WOXjU}_gE_Yt?ZXPIx=UQ?uY*2>gw7%I2igZ!Jm&; z*1=Zp&Eix&Dk|N`$jAf^v8R~4(|PZ`%`P9+4$v30{PVPB_&tDEl3vGCKb5`rSy2S~ z`ueWkxRD*dqfq^!;}hCTRJuo{xtZsOpC{-7!2^&2SHz!8Yacb=#nboot3`H0blsHZ zOZ3VVqwKe$-F|<@RE%>2(o2?ks;a7DWo%fL7AMpkz7%cn|I^u%f#aH-CT`dK}h*g@uK{ntrL&{2VN$ z^}KAL3MEdP4mWq#?%khRQW{$fcy`&cYYVT%ISLSY;8pG<&9=I&J%V330u3sBgG{xZ zm(1%~+UP@1on2hYg4vX8v%7{~yAB@0PNQ}-IV61KuGO8*n>PpKw6%hf5X$qV$os-7 z^TWco7!^Fn)ejzIME5IeNCtmbi`jW9F8K4+s|?8=IodoKa~Rnfz8%@~E3P z%Xs$FI?Am~F8ElTJv&<%f0GbAU?8x?u1i1Purs72l%hw|gzl$$dc4kkeV!?B4Pdrx zVHK$tI0z|AuCU*r`CHx{5mz|*5yy|L7muH8j%-bh(gG644V{rOpv%jAX4pJCI)=jG*P)|Ka? z(#e_-6-7}>h+O*f%edR&&VvULEzgf;O}&@BFa<*5GTyc4p1e!BsJw)zXnB+JO2gaH z)k8Nofy0cKtoRi!-KnyW!V1%*>W8Ho=Ni$b8l`gmnHy6xHy0Eu**6rBmzNjYnrrm* zxcRT~ZhhZWph=K!);R6UXv4XkJUrao3}6=EcbP-oU0vZni~pq6FPSbaErHYo*2nC$ zY$&)Qdm8C4V$1~DU6DUf_aO{*# zUP@0)q%zKR(l~s0^)sFOZ#y)H=w)L6(4UDMA7>kKxsyN3C^%q!J1*`TT2JzyU}!x~ zB}*5y@9tvs@bLJQZGS2zUGKulm};q^9L-r8zz|#?x(=PHs;Y^dU5RP5>YasI72cXp zt~*R+F7>zEjpOe%<6GO-^-WG$nLjQrPX6M|Hdi;do4BQwmFgSior#(ixo?i!-oX^K z1wBSkM1&q7QR~75Swg(Xs}wFUTh>HqoIShMeuKtl4lLhIC`Pw$a}wAMkbL0a!LoPv z6WL_FZzuis9rvN=jk`#mYK_eu8~{B|Uv7w$sf! zcS3>F1QZl_H*DA-?>)7p_|LckCnqP_3$j`U85+X32sxvrr3GbTmN-)!uDm?Iif9pl zS+9-6X{f1yJeaX!=S!Bj@G^9GH4Tl>R#$5)t5OJo5fKsOSB8cg$RC4#qQ7t6vuA_y z;>4<=q9TDc*B-WyrdCVkbSdw^v0~;^k#?l#>sXPS(J&!0cfeM8gA%BmO0 zv9`8W#oAgJWbxWqXRcb39>GMVs8$9wTd%1Hy?(umbglBx)r9r{_7FPe60WAE#<6bQ z+05Jiud*ErvXoIjB}a`746Z^C71*&O#^y@!0#42l6hJ+F{mqJsMJIgk6uw%F zE}LUHFV!|W3s6)F1;=@!S2dYS#nlav->WZlz4OY_FPU!9eDp zumHPR)%A4-`L0_}o0vd4yz=p*-jFJxZ7IL4(Vn~p@0^kZZ6;tC>;+hes8@>%(**yG zZ+U}W&P@0Tm?IDj-rqrZdaFR9?$zD)ZDxaS?~p}wa*`k)tg9O^G2yJZvN$b!W&D*E zKDqVfNm5#YD9GlA3lA$ ziWRfov+}#Wq@yS^s;1w(EQpreA4&J`y0`D#5yS_9`fy8IF|?%`Us;&`W=t#Sn!nM$ zEhP}z)1kwML0>|h9O<*hf3SgDR^Ipg!U*Px4)#LtrB1>D_We#y^lW^U&yK_wblpiU z`Cz;2MQSQhwA^Nor0UCfNB`nSi-9sb^d%bFU9wonhpFRyAcrEt9^Auz`A85EJ zycO7F1-l$>r|O^iE1K6Sy2lQV78NNbbLl}fexmU1!M?DJ49SU(%VoQA>5PkWw7(~E zS$?Tc>Poqg$~_zrInJtn?hR|jaz*ja{)rJuZT^vvWR{DH6aDKpivPGD@Z@>imyH#T zuac8}7uom}$u%g>eX^7-eAn96_7!}#`o*!wk{~@!lODt0vo0O7xpH5fzVqkXJ7RPnbEK=!r?f6v&2)MN>zZQa2$afZs;q6;#S}k`( zSNpdd&YZ%}qP1aM;^mJt!eVdU1i6kYLOaaq3_S&K*!=Wx*N@S*oz#|}7$Vp<%D?X~ z%Pcc1ML(N(r|`2E3fVp-f84$S{mE+PGb!AIfhnRa);^QpR(UWCGXmKJ1_m}5j19G! z)Ju)8qNdKfWtcgu-aguTp4!qms2`Mj&equntk0ni|k5Q|I%Oetqs2u%!Cba>=HiSIcF=^!cp^=zpIyW9BWJgeISI*?ojH zxQv1h0FjoCO>sgc=KMJME_6Zbgt{lS%LTT@vltZSh8TzA=S+KVhLPQx6Q(+}KL_<3 z4klHrWj>HE+M7~8+c2b+Z?R~m^=!N+@}xken(JZO8jADG_hXb&Y~ze`EyAQ5qIPF6 zMU*Vf852%~17SY$XiW9^X|mfPI9$hBk@09xF$_lA&*jzrwH|t4RGrm*9>+(yvxTMH z_j>0cmDDUR{Yh7l=iB4D<$?Fm21tyrPsm9S`)1V*z1oUrhRe3^dB(oj{%Ypr-(`Cv z<>5l#{i@oR%>w%ct6rNumuQt~;nq$m;AM;H@0{UL_db|v6nEbGcoJuB_XXZ*zaO76 zp-)@S#vD0%R0|r?P*XxAIJof2gG=L?Jjds-cZmf0Ogk!DC;vDr&_ii(X9>5 z6aSRdGP~pR%S(%ggm|)3xxZSksH)4w>pp4nhe_btKvE)O+*rU(bJYIc1#5=M*RK2!h zCQ&D)xb&G^O>d$>lSF%#o}T^6!GDx=y7|S5O8QuZgzp?OG+}^{#KXhW`{PGfl2gK= zr)!`H$nsBEvKIXLdhBiPbw6Hi;|NEePRCsHwiLrIQR12mn^!E~x`vPAyFUAR!^Tym z(YNiM?aVm)kArqab;Y1bTKmoGn)~ENFB2?}_XpF-)7a4^5W5KeD2R^Rf_vuqres~CbhVf;-J85{`C>|FjXWR=dm`s3%$loi0x! zK%=AwRn9qVuSTNoLuhc&d{Y*opCmu83cYeg?eT}+AD^>Qd??#QMT4M(6O#Y^@;`^3 zdVNp4GEu&I=cgmd`l&(c7QU}OcK$wDS;ul6;Oejt`UcoWY3{d^UdqEfTlVuQ6(~e8 zI{Uv%34P)?!&I*_H%%LuV*Y8baZ^K+VMwDVi}jcIgaXf3FOm*-OZ*OkBxK$6;0A1h zF1Eg>0q`&msp=62H&b-Sl{Q+9T?ig8c>&ytldBYT*!`MH(-6v4pW@%Vnl z(EwOo4~egd=kucyLSx+Avf}r)loZGj4_9G{hDEDJxvA@7@L63&%W7t5b%iHXGY40x zG^C5KxSomE7KTUTGxI?Uf$W!iSZ(2f!NJc(Sy@6*=ng_9rV9=<4n>JS zqPdN8KmHdE>kclpZJe&juSaqF7*?-d6s+h_{kcT!IkIY$}qe+cn^@S+miRNGgiZl$9g=WxFMfrZZ{)2acF zXAc(4H}^biH$$OQ_g>m5(DBdl8&^EJWPTQwqeweNn{;o=?)$H|LBEexw6U=v{ZL;u zGk+X-$FSmMqGQ8X>^jAn_iEZIFFx32oUP~5Up@KH*2B(Y9lM`Ae{Srni6VaC$EUI) zx%O{<`ZgX<{oOBhHWhtIOiavMS^lGtz2dszhNjPK>nQ@%hz$nKf&55T0!!GK%Ifa2 z5P$b>Z2Qt?$#Ey$a6fi#+}XmV02HAvBM2$b^F9vuyolc_S$uQHs{V1hvYZ(WGas?h zLuQ}9%-NqiS4PV5$cP=0-ydt<82PB=U@gh*j3aVy-z6?IID+;-PAAdhzor$AmjmbK z-=dhDUiMqZEhj7cwSrAq9r!aQ*rKbq)ZlqbVsY_u0lyMyn?vwki4fs&u#<}^TtPF? zW#!|Y(pQhiP66G5bN!XN9_dU^OqAkY;*~)}n}7yn0GAYsaNfy435k-kWm@#ruOi5xuUB1iyqIbKHY0bt&C1rXt8jR zjsx~RLh1ms8A1lo*~VnQcfH`U{CQ+UUYomH*Jv}Zcy;i`&=;rqD;jeSC+RhxFQ8RQ z=y@vm<+sHjpdt%!&)WL>VE8nAe)Hyeg`IqpPm=3<(hH8CPUq#|Zf|ctkw85ChFeuX z@*!aVNS|`qRuUM$&#ZyTqq>YXCWu=zjTw zZHQ6oLZ|KxW|y`7VH(|+MmieDldIGUI5}4Z zs0ajvg{_vmq~hx0GJIV3nqLlal%lsuj&FWb?7uG>UxFd?tmK2OwHGd0%UKVfx0q2^AQd!h zkGVvxk2SZf&TLr&yNy>};oLy+^1H(lmH5fw-biqR&1G|)PqW!Z*Q+eNE?$IUqPByp zCqp1T9d7v5DhtSe`1J)lhw-_Y*}2i-LHb##@r(TZ5pnK<74bxsap%vV@9S)}#Cs~-}+hjL7~XbG*U zscGJ~2bX$({%pG2H2V;j)7AC;=6g9qGY3iTsMy%6@N&95+D)#8h4He}Ym#Km*g2FI zaOIl`32aGv*ALzjHb;0wpM^d(HI)=INK?cP!F|+@mt}!MICj%=JAycPhBYkSMBj*lj&N(=0G&Io7NRDp{UQhh=v6q;7bQ;C<8!X8?*mXqT6@ zg)90huDIaB_4}CwLv+Jjl%1s7hTRFj$2W@92;(AtWS3~S^=FL| z02IFQqG=sQ#LIvt#E#2KFG?|SakcWDwN5-fx25n?ZDv^ zU}s=wXAe*q&kLU2gH(iZj)SV2+A6+FKct8>fv*6~5=fx@p=z+fATf@ednu3)V4RYa zN8!(6UMP4CijLV<{EA-eAlNn|&Ikz+Bj}d!5sRs}Z{KG4ulU`LjxM*|RsP`v2l4x! z9K2Pqo6Ax|gEnI09(a}1P+}*%6p1zCHq@XBAN0gelCJYmBKb7H_usdT$RY>= zSK4!7plM1bI4CHVz@d$MTxs^~*<+ZF{`Ujv>G!)w1d*>O9J!)YPOd)+wM5i!1K@XIDAXat&nA=O3- zgbcT=i=mp2$zFCDe7mj-_V3lJSCK!G_)l~}lZ}E{hChJWwSNcKV*ou|4L30Fh4HRy zXnzp4%3533!FhvpMF{}Rm!591-8GLm$|U4bM3n@P=Yi3Ne8V3URk~buteJ5L~j}P8PR&6E+8oc%_T54mfQL+LJ~euob#OfsPVT5JupM;gvA79 ziu{pwly$M7R&px<)K>_s$PpluarN4@z+1Q0p7`?qeE@o5X-y41Uz%C7XOSq}AaTvthjo85?`vG2quc~|OSRk4;QSnH8Bmj^J)hGGv?q5|KiH`=A z7ZNkJC)V2%XO{T)zRw18ki7^E4qinea++?E9ufjU#x0s$_JT{gkwmVhi-?|5411_28IB9 z29eaD1Or*X1s)f07DoOdAyh44s-lkXCgBl-R2sZiS(7#YiOOiRB_9|OjL029tF z^)*_-bWTJ=L*rBKd46cCE+|u(58PWjIm(6*f(+s$M0=Hfb>bbYFfH#8`+!)|-;M|d9zl=|jzp1vAz`P}x5=O~e# zIgU_AX;Il-x>Gmg#0D3VEXd`{7Esu@!KD!xFx$oBvM_ZPP&=^c8|e%rpQCw$C$zLw z<#dr32llFvW_W=5=D?(}>QbnDD2KftwD>h()#F^l7LA0)KvG=T(&QF{i3aAh{UUdP zGEusU%?x}3PFpn;J9a)kV%iW}2!1*hpl~I$i*f^>>T! z=ca+CS#VH1Ci;(Z%ZNvHY@tjIKtqS3~tGk(YiU`2d~pn^w{rBNM1*zVY@kr$v>S;hqg&u&=<)Rk z!qk5Fp}RB>a{cbzyRTlqPIyho=PVnU7JelkZgj*02M*xgCjyY9JOP{#;advzj*reX&Jf-@~M_a`i+ptkql$T=E@cfmMKIXn&@<(A0N%LY3%;hcx z=tTx+ao4eBUUxQc<_dGnd0$Xa00qF%_td66XoA4buuejO6=W8GI!NC_l9P^&ui-A8 zqlhR{8UKYX5O*LZSC8Kx@#Tdk|E~ZAuw7P(F%0Oqp_UUdAE~BR{LH_by=ZB!lLWmqADhpu1;-(d>eJ(iMMd}G<~p+N zU!NKT^-pHd=qsKLN*U?8ps{Fh%*33hV@mJt^ZQSdA zb=_&d$*T2~0FtLzV)(@sr)|BiXrjZ3dH6;B6+;AeNFL+xryKw&B!yx-oGyGEcDFru zF3@1d<6_4w9StLeTu7dxwX|n@PRUXs{_I2y3-nNg+Je6F)7zr^O>BpW$lhwRl z!%t&KNDs!;<=sb{JsU)3MDM&EF=a=5_J*cfYI#T$>xW}s>7?jup6lE%Us>u|DT5?| z1ZwqF3NXB-;pCKfk?M7ugR+8yEP%Ia#Pt!|@M9v-{X zOy67&2%u;uD0MptI6$H916NZ+{TzMvDov7``9g`pr3N8OBuR{sg^^~n7vT!y*tE$p zdmJC1^LbqbIl%vV(-k0rovHRi5VU}&o+(t}IAYczFe-|@Z6;>t8BGMygmvy+g-LrX zqxC4#3TCxYg1Vx2h&S%`1E;4P^z}nW$Hj_>)ge*w^qW4Me~32N3uB@TNihPjW^BVu z&P>hC;n->+MJgjKehTRa0CaX99;QqK=4^i;YnL*)p%I9l znEl{1B>vuIaoIZ|B_(Bm3vI1!q}g4I*zLFKU_o~cJ}eMxIJL#WaqZLN=iEBu&nqIY zSo`jsCLG>*pW;@=2ygz}jmxVY|2P0yh(*q9!eM|H3lO$RMCV>9@A;xYxgMXj@cd=T z;^3ADNlX8uut6{+L)XkFSVK#z9~7$OT(HIK8^Q!-qC^u6BHFus$Bs&1EF^;8(rf_e zfUt={6q1KYb;hmQiA%)%|H>o)4skzNa6eJMFNlXeK$5D zISoS?(2qEj$q!G0y<=DdRPF3wu9omE)h%mC-S=oYWn!`kWZI&21RatvZm_2=-(TJO zfseN$rj0Z)u=UN|KcV9O=q`*IrvK|lGqAF19z1xh@oaKZQW;Qnq2d{dn+Is1n!J1| z+Scd}G^Q1?F;ig$yAuH#0pvUo2L-{(8Hu)Bc0y3mP{awzk1-|r&>1BpYssm%tPWSj zY!cLk-rn8-NCbuTY|z}8wRc4jx)5pEb>yg zGc)R_umrS%J#emD*9S^PlKU_aSOH^({yC>L+I%cOb*!>c24x*ej82BO=^f@y#6Sb1q75Ix@oJri)|Pe8Spfzt|rc~ zDsqBJ;1}s-a_LZ1iDZM`D|qJ+woyv-F}N5>dL)r(m(6qHnRX_R^fBa50qKA|NIC?V z)CKn*qZUH)^4y>kDVezkd)8c2C$s{_Gy%n=(qsDJ%|$npOC}z+8!h+$R<5VpXD21R zZ@=&@B7{|Ud-gQCC+E2jud%bY$2YW9To|~ezhpp5O+`=x?P@OMFd0FMw8gr>cT)LO z9k?(sL3R+dlPgB4n#i*NWuX>b-yma6dQI2CizmUiS}t}YAQ85H=T}^vKC+rrj%7=L zRbk{kQE)-a%AOvMAz2hOIO2lHUUAJLIS#xBh>8k!Cs7BE9}hyn#0<%b6iU{^hXETr zu+|-R8yf4n{t@S7B0T8tXpi^;CW;7Q;@V+Q+9mL5-H`qpMD794!P^8ex`eJw;1Qo! zFIC&Eh64NFGs8gVvKXa9Vmu0>A1Ib0;D^45N;H|9z!AefY;IFl_;)A~yW!uV#IQ?s3GA-@zJJDY^L!Sh zNw;q;KYZYP|ApL4_kV{51KVZoF6Zz5G_^aMd#$Ub;RX92x40~C)m6?^*<*YKedbn! z!{A9hJxT8&N-pk9x1w7@6=n>iyoW@1;{Na&4Q;=32x9>cA3Z7`(cHQJz)Jhak0Eew zph737@j_ufaBAjaSf+lm2FehK+NFW1ZKuxUawqGFqLw+y3J%a6)X}Miu8OvGW9#8) zU3;Ekw~rRuwT-DqjR{CcKDAX$b@ImhJG?;*g8Pm_9YOD}L>~-0s=UNmcwsCE>Ktr- zO{!HeXGfby12erp1{rI3I>|zE-ssoa|27MJ7HbNAM%H|j5@RH!@8JXK9#5g~T|Tg7 zWETENfmo<%x{c;~0etHhVzh#Cxk|(2U^vw|(Qm$a)#wH>FLHb5mqVD{-*9n19{b0} z|G5nJ&5KW||3I%;@gCJ$+X)$Czs(Oax(Kba@M!*)kgj_d#a+jKRtVo|m$hhlpq#N- zQkZe>C;xn(HrIt`1Fp%Rx3DvOH#>m*z`d}r`Xe7G>I}n0rhg)He2Ppxt!!-iA&M7_ zFF40hHr8${&FWdY9Cr3(tb#O6!ag67Vs8gNCI5LHCyzpGDvWV`e@Nbm8L%WizEfPL zV~yZ||3&ea$!Tdr)*c7ZIC19U=r7FNesgZ&lk1{l5NFzaZ{TMy=i|&>R>z&PbvVMR zP$!=R3!yNxgUgd2imO7p9$gfd9FLT^vpsWcW^2eFuiioLwSB|iDU=tEA9_O_wVZzr zCFI|7zgp8zbVba3fS`kPxx4Yf_1mnznFA43w|kx!Ek!^BRw~Kd5%s%SGvEXBBMI1k>ilroL>(>>h={!_pA<>fB z(pLLGm!mzqJl`^btg4)#IC0?Gi?ST{`WX~nHC88KiT!j}O;?Af{~9WMaN%St zLy|7T`Slk(qXrO0v#R$~ocXMzxVWICkG_wsv_bx2YNQK}3rJ)B=N+VZV|oBwJ5K{3 z4JlaMh_1~P6qU2Yz^NDPpW8Ezuct^96m^u!7wUYQ*SwVnwzhk(vI zH^8(>iPhaU@UB@x*;B-pnNF{5<@_N26qhMAnq8V#!Z_&~9MDu#)hz17@%Pt)Z`O0i z#KgE|Ila(5&qgD5dg9Ursq4w3`BmhP;D!GEGY-aigN^)*H{J!LA2khlXGTNe6t&M> zXt&a9m2(sM_l;K7V%&zxY=)h`D@Kxf!_)SOUnU~Q+8>3M#LMvAm0t66M|{MuQw;+; z#JKuzi4=HVj%nuGyKfuc#2b3=I#0@yFh|Lg0TqdL745BzSop4y|Gvie?7oh)b~3tl z|NaexAzod!>X&A#v0mtCb9NkRA97DhVd7u9$U2yPgQD%sj!^9MMEQUuPudNXvB-yg z9Spd0R(Uz2Zx-HxbYTR-R&HA{U&SKlyz`)g&vNa3uYsHo+*}V;GGcghdGZ5M<0mj| zXbIV<>k+Rg^f08uwt?W$WE(Y#7YmZC)D?a|Zp3-FhgU2AX(DssPwa8fiVgGXp2V)( z6uy2aqULg;h;!KA6{w|run){kecsC9DnI~ALn3PPP**55nGFdTEyQIF~I2ZpD|uc-#p&5mq(-M#5f zxs^0D6->CBntlo3zC$1ZW(D~$&z6DAB*|fbonmK0CNjuz*kEB{@eq?cmNl$^25PDL zL{@@aMZ)|T7q@=^30mHBd?V{d`2cW1kVb$`g4HoSNpgzG#fHa@agYIISb+F$gc>1& zRr5Ykjf{$`YiO8{b!4ZUgF=IG#t@VrM;$Jez#cY`O$=Gn*?8yWVe|7TBThK`4FRJ z#NdN)3k-m1bTYsPXDSdB5px4de}2f200YJpN|9-)zAHx|x;Cb55Z2xD;Nr-3oM9MZ ze@*(gZxO$tg7<{fX7mojATSL#8`atX^~cBAn^z1Y4hh0|sIX6Iz5vq~;SXFF05Jq7 zQft2YmHqz%yJwf5PyK%!*9~m?xk!5-)Qf=jUAs6zl(m;p(kB2tR5srfkd|HpofjfZ z?c2BeF|~oV55ox)k5T{pLya^oKwxsyGA3w(msDXP0tQaF}51;ZuO@Q~eyy?_vsX zB5E@Be1%MtVlYmi1?&kNOfcGN2&;&?Okz0F9K(GC-J<;<#r#lDlwzG*-Md7KG>F7=3?MlhP`R;_Sy0#Cd05zy1nl z(+R=C6gU|HhCQ@40E5dU4TO+M1wr0geBNYig-GHU_5P2f06eQ<@(S(Aci+pGFC}f> zZB)b=%=SplXBpZ}suUjEXajb{G`W32ij9Ala5xy9}rBD4hoR0^PT7@6b6>;tIXHcYj_ zT?Xmu{r(-%9A+HsaGu>vIyx(tJ{gP;ihnyWVo#=#dW|ckpjyE9a5gN1-a`<^1lwcK_PXSh6ssw4 zGb#%CPg4z+uQB(L9d9Ga9gtI6de3HjIz>;E$T#>K;dGcg@GrS-i8Io@84?vTa733! zwt2_tyeJQ$vv{@u6zFiUWP}n|IreOzY3&lu3cU2b2w}V;XPE_Iw4VBrkTEqzg&xKQH*pk$0N9sDlnEECv z4c71OF+$E7dUIN$W@fmh45#D%{l=G_95^7P7z6$p&I`dbeFO_B;aL35tn@qX;s2Ah-Mf4nERR$ZY6~7u)b{H_OSjTd=A? zaI&+rW5+`p?tR37y*WxV85%Bt?}k)g5N6b&j^E)xKU^|Nr?0jqV;Y{GHnV%?VB$*b ziJyiU8mH*CdK!jZtm3q;9)c!gLvg|Uq5I1Q;;uxU*v1Lc9f-Yt>swzR6~-BvcLme2 z1YNm8FV+O)OQuZR-HFbgti6M);=_lV!!b8<*4}&eOc=In(7Nx2pwYn)$nZts070il zas&_80RKUB?lrApS8)#L9vtthk&(Gf&QL+X1r4bZ;&4xpa~sQfO}uCijZQy7uCO?d zu@v-5GAcp@#}LL9Uj9OuIbhEuHiZ^y*z#~p9S=*Hu{Fbh&`qcWWXODFzD7CY!kEz( zVPR^=R6}dxfF0PfAK5>*SLfiHqm11=5c27h!Lzjd6vz)4WU2r;&vfeE>+mUq3NZr& z{MA4wl9hnOntNsqks=bomP?k9F3RCmYe*6zZXNh^OL{vOevg(vB&>zmC}bVTQ#a23 ziHJ2$Dw+SfI>q!&hiKgS0J7zed_!sUpf)=wdPmx1Q`#wTdboltC_iK$uPa5ik1Raq za*ir3JZYUuN2(6r1b)WnEpFN=`I@Vlah6Tidg8_m;b$dC(3)d)=K$Z6*RPoTuK~RZ3O3DL5 z3@NVA)&aF3fhM2L(T108relEeMHJ~|chK~#p~gFarhtQtaMb5JdzLR_teYFMzXay& z>qo9Q3_&+T>^rmI1jH^_JLVWxYM7J32=?#Mbn<+FJ#It22tQV0ttN9zmRKN=Wse+E zBT#S$0$c5k0IrIBk>?t-HIiGUD{?U?hWdpB0;Z(uoXi{_R5xSa13F1!+(>b3ZUQ$P%3N;jbCR(AzYjWEdsU)TpnBGcYN)F_+cf=i_byX#Spa$w zB%@DGa%&C~exWByMg?Giz z9eK)JZd>~|4p6ct`YN#fAzk&2k4K=aSy@}VCRZTBEhH42f30~31S%jRm<9V>-HeWk zVq_2P8xvB_0J0rEyRwimfh&g@Jp8&^eEb-85d=B?{z&_5Be(~dQw^kEVzVIPK_oB; zJy5wUvVG)s?^b=@^7+SQHzaS6=FXVH&5equB@?9Hmo8bt48apo$}uUxma1Pb+Vro< zMkGp?{%R`6rP#G=)*y+I2_?4eh#4j7|76S%O#<_KkSA)0qmWzj%3wz|qEZiA?Z~)% zvcU1=*1v}7jvZEmo>ySj0V*S?5j$oD3=B28^L~knfQo~|4jx`!5)&cSQdTy)wZnlG z@whNU-~5xJ>u}Jz2YJ`w#z!qbI#nYz{&PpL==5lyY((auL6LPdTUD&0_p8=bM&x-w zdZJ|9+}h_I=AlR)3|bcnRDqM?Svfb6zJsl!f?Q8#4WH$W#!<`|;~Zc<^zTF(zzKpC zB%=ogY7TE4#-x?_;{#iQFwWoH+>GiIg!G*tXvg;L+dt*IiGVs#NC-tt<9`=uiQr0t z4%k7MUhRYSt6v991>b;7$f0%+v3Q`C10sr$kkBe3iy|pSay#J|S|4ZN&-uhtV<3Es z#QtGK{5L6gVXPw*5~2m%4;XNnJioXdh1~Bcc(MYkq4JlJB=yQ4SZ??kS~HoMV4B#AiV@f_)I z=6Fy*3|j#I(U7S@gF>)~ppUVBnSc`-`}b3WBq54#>OHs)<`o_0p~*8wAe#UqNa0Bj zD57^24yI$Uu>ytyMs_g?7>QZQ_=8D$)Q)O3sTi;!Z;O~c8N|eA<1Qfd){o>#?w;Gm zr$X`A3wUW{MvO?-IJW4sWG)WMhZhhLh$seb$C96zU8{r_@+kLOyIyoGsT*d z$Y&uCQkL+>eQ|X$?Abz~A$~ z=NRRUrWIzGl~FrMK@!}9fDF)LsXZ@UOBavB!d;_q#{5k92C?l#8We|7MDbDT8Je#o z)P8s)AXR?dNlX)Bm9hGSRObGD1lfIcJY!8Rk)Yg!l|>QR^IyUd3Ly_%s(}jK{gii( z(BN`S@+yp=iVzC{>r3MQYmX`hLIieBCQ#wY>hD7e1q%@n0(K_G|AY{LpZ}%Q@_%!% z(c1rSyA)-t2UkbD`2H3%t~?XANkIp6}Bam zE_tt^cmUMa>mQsT|#@ z`ku)TpM~ce{5YDlJ#6m8@whrW)R-=sz6hzNsBF99IpeS+o_}>{RJTP+VRVp5XQaSk z!__yaBpJ6j&vIW=IMrCD%Lr{8o6Hb9@4$+u+iPxPZbd0BCyJ=_E3?m?2EGgH7fbwo z0)xG?oq0BfLeQtlw>x(8_uAzp)y;3kN3DIX9r?KuK4Z7}$t{?s(x1JNbLsr0 zzjrr^YUCM1c;DbETFNf{zzvoAeffI)UAPXNljJIz7k=RHzEwZ%^fj%775WEvA5m`C zOpcYk%z3+2K5r*K4^7{AjI7yMaDArFf~(@pO#P>fISKUxaYym+Jluy>9~(KiE7lh~ zQSRC$+SMohUJ{sMR++d*FB#EYNL}nUt{%?*qW(ZdLSiP9M^B;#%9!sE9{%BrwY*uORj-bjwRYq(l~*|OR&QjaRHtd&v4#M{{OdLqL#{rlVD z37&(hv)>w025p?({{C?-#pM=F^`LGWwe$4vti!Z+$Bb7~yyp=InY1vz2sgf?xx}St zuIb{Pla$^N#^iC0C!8;oe(heK?MU`oNmk2yXr)y8`W02cdzP|e$FABPhNuHx^4g34GQ}^!!=g~v>q1pZt+{}6<_=l z;}feDX#etY;l#g}_A*{TQom2nf{xj_GWJ@Zqc@XRK9%G)N$bG`xo*Q}^n6|q#k)hz zwO7n3>}7J+N_?g(drf^uoI(z;yiiyX&w0AEfk&*!L|p9e10AENo+Kdhc>Bi!^(8UN zxlbmsGN11K4DBu3PYJE9KYR3p;pTL&lp-4%8p?Io>&p$y*LwAZ{#_{b5|;4U!EclG zS5`{3{I^k6IeN_`-pnX!l<=um&npWE|CuXL_0m3r@8tF#v-8gueAh{QGddYmkj9}& zNn>hKmf86A-xbD@ zvPU+j%;fj|ErM*1MS3`(LMbhz@zYdy`3OFVaGKa8%OT^$8=N@q&-&i_sM@<@KR*3Y zV7kMzxB)5Bkqsg9pFJ)1$MS{o|Q z-*G6=#oy}R5I^CCXm%vQdS-cQJ$a56o-0QNtgoWaxrqpcMEM1xZvHOuTf_Z}`F}5m zalz*G?W=Z6N{EYBVP^B@ty{ssiO}VU`bbA-0qhCxN|n%)yYD>2xnfWe(!AChi`Cp&e)wMm#Kl#U4#cU5obci zHL%mE@P=_{)F|mJOZ>FeoZK=HDRZ2>VTl>4&-lQb zLwKju+%F^>aCqk%8c$E-O?FPcAjc$s09_MOE6{~NOg#uSfckqp_7Q{{I?I!zI%|*! zC$THin=!D}^)+4-&n+VlrX!;iP)YokM$g3gu2_G7O-FbjKAk-6@;>*h8hQ;@l&;#h zljgwhJD_Qcqi0sik@X>C4J2ywI8vz`dD6d6$s|t*!WeTfFzu|jJ)TQ>>eS=>{0$Jr zFmu<>#m0c|Te3K{x_DuT7y2Zz-R6J(ugcCmEa$Y1`_V&|v6GA`jBQ91MwB%(7?Wit zQqm$MsVu1|*$QKl%y=qEmSJqEq*W<}GFt5IE9oX}Xd~kNoXqpg^T&I<$MMcF#~d_u z_q%`h^}DX~{BGy=kKUBU0|ZJg+5XXEE0Hcxnrn^+$627Y!rGVl!?UcvY{x$lmGqn; z$fu`+t&yIP8JbhKCVHv#Jg4rj|CHf5vvjupX-iavc}X7nbkq_PM(ECRsy1V-9<)yc zINt8k#V|`tQ~4*F4Y2kO$i=U|dE$LodwE+ggAB99Z76XhCxnvy;#O-*uq9sTab2A+ znnHC_D@m(*CQspOSu zydrx9eM^i(;X)IW4y-%;d?BdWfu;@s+tkU%> zVUQ8_LjF;1N|ukpeZsgpZ;4p_|BM`cvGU|#_vYGEy0uHzsh!ZKeYGyJQPs;}d4jo1 zX5lkZlK=tmX-)qpMbmlB_MI69`GwDBh2RAjZ%zJut|AEG^Mql9FSi`Y$9 z0CY++QFopqu5wti5z()Fu0k;JXd`jz$@NOSAE;^xtCb9vU+XKk+wtnMB>)T#1_uUX zLooIRHe~~_o$Mb5Y(KoNHm(h1dDR8co%s|i?p!dJ4rc!RJ+$F;KH?aG!9-p^P&c=! zmuF`20lKhuY-X!Plr#IakT@vWKUJ?A2OfDRT zgjBk8Ur=NbE(6ZZ{@jU*a#Ae&TKyrld5Y-G#r!BCi)^r&??ElZ@z_bCIWD*GDJzpcsO9oF-vi z0F;UgJC=r~!A${|NQ}%c-&H?ulaZb-79lhd5NvH6bcYTbIux6%2HS!VcgME1tPz=* zY{CSE$q~Z2DK1vmq75pbR@wwYA_0{rUFq=K{6jcxjvoCg^XQ~r>`xV{h1tQ*NSm&6 zO6xekSTwmla~yc)EdWeW35kdtnIyd>_`^&jD>%mxsO;v9U4cJ<5GvW(QAf=W*4xd3 z6p|C2yG_zFUMU$OL=up|#FyAK#}_l40qf(&6cPoFs>505BF4<0Q;ac}pAsx;jad`;PA4DfN$Wr6VdmmV{ei(%)OGYVFvTw&cMxcBy*0 zW0iqy;XbpJf1C5D(&~COyCL=?Q5vzfvqm18GvpKBiOUCfAgMc-(=if=N~jZp>p?i% z%$l2|Ltrsrr4(dk4bo$8hSDOtj^?#%|A#mNQWsB=xWb|yP>_IqwuB0mM06Yyz zx|>Uqfc5(~uP!#S*U0)hbm&l4g@m+oComxJ3$JV0oF^)H`oK$_wB2Vy?4gnsew}mH z(W4v7PSk$C^cY;-^svh(x*>Mb?_$-wxKzj7-25?CWPx3OXkQR!MLgo=_)D8^ZvFm7 zQCr7hFcJOwbwu!pL^5YQ7#HU%%;CALM!e5LduWFLmtTmG>1~SGKu#uFIj{Cz*${d+@8Q$i*{$_k_LcG59+)pz(m0cs{!3dWS?r^x!JF zOOgy8+T{69?xXRNu5qDvi?e%`j<^!>Ja+%VB-hq!<8>o;y50Nj6K+1k$mr1G5Jz_q zywF|6AO1)PEz6xbu)9h0^q|<^5DegaOD!7z*F1Qg+DqPEK%@6mGaDzMM@G$P#YQFT zouwt_`*OTZvsm)6@$<|l-Hz|U`7Y49(nOc)!;3GqG++Cu&eO}Xxafcict?!?<2w(k z8YMY%!-j~KTCImHm5cM+yUks&_3UZaFCLX@7&x|%U1Vjb5_E?t0rW{biO2f+=ijsR z%N=xL$FCiK#3iB4xokVU(jg}zbe+%iSr(G*GU?K@7=`mqvO9Txfzw5>cx>~NjzN{^ zK5g1sx{KI|D)y;Dv9vKaNuwt85OP=OLi)KkN=W+jQK!9<;7PmQU7!wMZocaB?%k1V z>}#Y{Cu`L%7NI&l0Tm@SP5WUORj4*O5OlN(6#b{xga+KVjk4SA?Buj!{`3L3e?#g@ zkAk1%KkoRTG5%QHzZ<$W6waDcdgagmU~Tcys>QIeXlUUCp9%vX-LQj5%9S8$CJtkjcZNQac-q( z^CdN6t$BxPu^6%Iiyd4M@vNwUBS!=?Fdc@PiI9-U01++Q*6RbRN4@y{znP5rl|Kz} zGjmNcLat`(*pmFlZH$iT{OyVL@qtnklcCS4D@X3skMEsW^y@<;p&5gVRoh^AY*?b| z(rcw7m9p)k1?GlPk^HP6*O$$zEJ?nDrNDO#;D}n~clPXAVcjlHj%ue3^Cbrg2ZqV; z4ifM@PO*N8*a(?MK^C58_C}tAW^5rKN-#eRa7r3p^U-tshd6e}bt*PXfL#auzBHrYX+IB$t!VqvKX=9l*HeF|Q zei1I^tqG_6PdKO}W}+fX{-R11U*e#ddrn-v`V}pUl}{%u%#x#cG9u!>_2}&-wt6`9 z@X%rB$+k124V8pkuIu9au(72_^Bz4~nf?8l$kIv#I7D952OxOQ zUJ>t*bvGlUGwc@UND9T6Xx}I}B||{mcieV#=C_X=e|y`F%~+feG|TWNegvye+lo4C=L8UILFM7Mv%=sXX^=Q5R{(N znv@++!(lU_MPSf>BfgTI5)nXOjEofMH;Fpn$bZF$5OK^ZucW!?eoRdCfIRCG%NsXt zY=CYpRDZk+wd&{CC)#~VGC>`X4CTB<-XIDV>d^?Ips0KaYI>BL8|i-|H#eZ4MlF{r z_lgZedrp<8jAZCyHeL3u2>gXvDRSD-4iNX*MIR;c^>^s ziCdMH%<4ePiNFNym-N8M1bEm)_Y<+}0Jr@K$!w`aBM@~f#2O!dGG-Ry&r*nEH|ciu zxh7INk)%o74M+n1a6ZNBR@zpm?vM?Y&2Otjx4^`?B(K&*8_nUjA|CZsZ(t>>?OCV0sKUDtD1lD1#AI2@;`suKI;u z7nTW)jWn&ai+sp{Tk@JK9$(*m@#Amu9*Dm4x^Md(Ym@!8-Xo)8<5j|_B#4ZjFxnpe5kK4dFaWK$E%nFKs@okpE-Gv1XHl(Z~@`xJgv9;ZpYCAd6KE0LOC zPni-t=|1h_NK!M9OX0(#%b5*qD+x>+VA)w#$9Bg(dwusZZ(bN;F`9wtHv7)7h4!&(C1R7o( zeyqpFMDZ>mZ==OX&dTyJGwfhhuA5e}uE(IKX3@JK z<&`|YkgP(2Qm~s;cx`$L9<? z%4alpSFCj$>w1dDj;-iqSa03)thB34I-p%wo4i?@efsYN08XD|YH$X+UDj5(vEW%0Y@&p2r*#JE7g;#(0_22=q`jeF;*%j1S zbTEv4kjVYa8)&_yEMiFSPNwDgLN69$Gq86Fk7$19>9P%F zu1C3lhy4i~2R_y~7`OTbRRnI>h{L<9qeE3-(`P|`m(sUMV^NO*=pd35Dg_CE5QYU z*VuF#vS;PjcPW!x`r_}j(+kb!ldiybR6#h>2NP2h) z{!1$M7wtWZ-)^upliSb+=_)%WD&E*etSc!FZ5GvXQw!D(TER4o||r;U6;wCZhTz-7E0;tj-3sM z4>S#Rypq@)vujyx>4Ddy^3w-Gi0OV6ti%x{EXpVn|#Gw zeDr8szE{IU_muOACt?y$;6F3@j`MO?r$mu(RBPVI)Zq9&ZFGJ4SMb~M(UPYlojT?)l~E_Xi1ybN9`JztH_)1Tj8jUOEtG1voJbyot@of zw`wQ%84-z-qYkm^rv@6j%slY@N~?&z=L*u-jd@=4JTWkFt3mr;*_R~PVB*BXTYg_@ z+3(U$oq~?WS#PmnD{ko9C&mWsb$QJ;IeSP?T%Gf8~d8Y$CovNTotrL<933(D`jjFahNdR$#i#mV5U6i;QZ zHnWEm*&BrY$O9zI2!T!WkMLjq8e^Y- zecAU<=dZ3Br35@>}cCIQnTmsgO?jS!y`&qQ*S#VAJm>R#6y(+xE_?Q2T zh%GyIi#SS6r!9GhAo(6S8x6J6R15S^%~q)>%JB?)R2BLt_xP=Oy4Jz#8ow)yssn}y z(q=4NNCPOuIA=DGV;)VWA$qW!H?i0pcEd-1dE~P*7$sEgq6_RM#hs5lo*(${pdj&N z3W{O8Dt0bPClQaM>@Ju`Ez8cuIGB!qG`dY;TVlsRsmK50)A7cmvNJa&qU6|t^p5?$ z8RhxpGk&e}u|M4;6a^oy?&*rn$+2oqkO4kHtBe-Jwr#%oo~qGed#f{nl8t)=IPL2e zlKKXkadWwk?n~kyo?zNu?N@<7jp(J6(hp6#G`s}7SfQ;~+7Vmg<~?a@v~D*g>FZ<$ z3eyEY?xZ}AjWbu=-S6!kIjJs8R?zzDJRN?CpQ*1|aN>za81{iSl1mcZWpJ0QT~Wy) z+p3MP8ZAQl31_4IR{yxVs>j&w>phff03XTxAj#7O+Uf3N`OLiWBPPes%rA+LFH z#aR8=%(3%C>pu0(Kxr+Fj8-h(Hs#}SI&9?Fx!-oPFk8C;H*u`*G-)SzuG62L;k=+~ zH>)T;x3U`*zXS-;@6#ka5r&a>)3ayKm-l9NGtD}C>TRGiMTzq6N#7WUWYeLo*kx^Y z)B07HHIvS$uITDGV8y0CzI7!r7Gz3I94}kZi)9|F=M_YbEcyGaiA?nX$#WwS;iAF} zeJ;pQkn?JV5FD(UOD|IXaL#*giUd!(7?Jcrw`bWMA?V==7Q&S!!-otJfssS|!S^zK|NuV;xk4X|+Q$X={|CnQn|axn28DC&~wkpY8c zXdR;{gl?rs9z&@XJNInECT~J6z7=*x@M?IsXR3uO!&B89Leqp46!o&mZ>>jKRpo@z z23H$oKAN{ieE7UzxtNxEZ^+m_~@3NPlEb4CU0;1|#-ZV{;%X zzN5RCL}d45P@d0~z$%c&y|@8F3;A9D0)~`XH~aR z$_&;IFtyBZzGPU`IPO_~fg{QX;g!m;zHH6GWAjNRfwB4Wk=VqWt%fvJmfPO8WA|R2 z)y(>qUCR z_}Q#K;pf^Y;m=#KILG42HeLT87!I3}kukD#vbt{gxbr;jMq1G|fATa*To&QB#TEyM zz!*fkj5PgxR>;5DDum<}%?1C%)USE(%Fc`^#Ph&$u!jmap)pSH$e2OO=Jc`&Gd8%# zY25;q$(*B;_;^pdGzgH*wO5|K1iFk3V#s8BZavK6oeP;`6VYdoJ)ziU=v%I_Osm@- zZvN_}3&_a-4c3ipSWze#egLkPYz*fT-f5&FA*38+tU(G()O!@em6|3ymX(${R9%Ge#xu8!>Od&gx3R;t#=9ML5 zKr;~Rm^SKX@M>d{-h5r9Q(4rS&eEVVg_~w*qVE+a>J)40 z@pe7c^^D}F8yO20Yy?7XDI8XNxY+g=* zZ)f4S;RmhMN6}izfGJMtVZ!`8eAsKG->)6_ORNU2Wq^(KtG%IgDcgo!N`Mo`Mx^6f zyDX&f+uUdgDL@U8jDgc{K+m3SuPnRM$wEoHO|JmMVK-O-CR@<@;&ycLoIl!qhV7Do z2+ho$F{{?w+DyI81>|}R?&X?re$hxuC9?|UWT4K%E;$J@2bl$kw0n7zcvhDN$3?}4 z2j(AHvV=Iou_+r+dr);?ee$F(9&#XvQJ1|bdH}nWaw5pGW!` zzf1qMkETp|AeXZ@rF_hhJ-5mwd4mhqmB>~CLImrE$B?@f`oiVk5+aJl#KuC7TIzsx z^~0uGn7R5;Wc0^T{01uRV!GBt&gV{q&VL%RwyJm@0}uWl?r$!BmNxmEj_k z@gXg(BYGJ8qSafin-X(pj9cxp&WGrlI0uA|?(MG^xgYS)c-5yz^XmksXY&QJz4Uzb zduX}h3w^rRL|HUPaq{KZ1;%o!X_>`n7x&d$I%c%r+}$!VlxQ*Q#xC>8QOt%}oeu8% zF!=h`XfaNhA6w!o11qUY_r%7!Ub7!D;Se7=<@C?zR~GNcGiCp{MfDkITtsAkQlVCA zk?P|+nRlwrI3o8m0lue0c-OyLZ9$0iQFv>Xh^LeR;N10ys z%D$WDf5+uy+_A8(^2qXRe%sAmLU)v8)U&CFr$av->wihy;=+Z=n@(LidPcMU#Q`Zc z*zH>&>a3Hfb>9bGiGb^7=eaCrqX5;l`Lz76`dcVQakDL~&T9uTQek>7dpR|eSZUV5P8 zAffcC_RXmy*tWxX{e3QPsRNt zn;D>O>YFm<96f50$fSg@*UinVgXcuW+AC^%6VoMDn)scUHS6QEr@X6jm3fHocN9FMni!JRaAI~kGRz}5c zGkK*`u`HxN11uO|ygJ)?{rcp!;fZ_5>3ZU~#A5l2j}>FKr|{-$npV_wR1EB`v^Ftw z4S5dJyJ?*QZj=s24Erpv%nA8ijnic-$3#a|4RGbzucgi~tg5AtG0BKz>9Gd-uz??4 z5HkiXt`xWQrICh6)^70r3)TDlF}SnpsOboPBIm*Xh;*T#rtf63UD-vGp{*`_pBPdf zPfF-mX+TqE5Ag6}qsz6s*iiE2nmJ4+YN0Pe$0xlYh>PJ6ZpMLM*f~3K* zQ|U+~{7j5gGBP69+;urqdu44%{3#8^70YJdVNZ=$*WGsYIB7ZgZ5U&HH1;Ey!j?T? zkghVa5=d@XhlL9b|8nMpGl{h6LTJh>P6I1yF&XkGZ9b#7_>K;39QUY}C(Y7IJ3UQO zf?$+(!P_*apX;HkNupG7Hi|wW{q*(wLq~p!UGF;{t;x7pwOizwIKQiM@Yh0n?Zjv+ z3y=1?gVcXIzi4w!bS@rvVm`n5M!_Yxta~~Hd#4j7I+?yrNmZ{ovA0_6Dc}U7Qv;cY z^@WOx3Ywk`k>ZVWymG!ptvNbr>W^UPU0Qtsvn$#7o$mRL9@N_ZpTBb~v^*Yq`Zz~* zrdkw8@0G4d)m$JIv_pY?p+g@U8fr?{^zJNcR^$ zUkHsUZ<$LlC!BF-s}k!TOiUXaXrFA6Ztvi*`%{=O%*WmoE4B5*J9#w>L$}Ph(IO>H zRd1E*S9|!mQb}8VwuFh<{&R+GnmzH8rRmC0$actZg-5`V70-XV&Be$P-(Oy2pBiP}b$^%ko{Kll`|J|Q`h&C)o4$`n ztMIM&ZU6hNy{l6%7kAnZUs`kLp!_DRiE~fg&#P&@7n-c*U_SDjiA)LL>$;tzmpVjt z-fbGIydtXIEmZ9dCpydbcYm-B@uoaIw&OQ?o5VNl@NMFg;a&l>{3pN0;|_xSvky&u zme?=wZI@;P!$gz@Ua759kGEa*`DKQ)`SN}k#25Ie&lC-@1o7${$Hj;JXOKeC$p84Z g{$Eb8vmd)%oZpalS$FM0CI0#0`}yC68CdQ5Kfqa>Qvd(} literal 0 HcmV?d00001 From 57593c78794286e52bf870264d83626ac308e14b Mon Sep 17 00:00:00 2001 From: Yi Liu Date: Thu, 12 Mar 2026 10:10:04 +0800 Subject: [PATCH 10/10] update time estimation --- README.md | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index 2ab1cf97..a0a1367f 100644 --- a/README.md +++ b/README.md @@ -36,10 +36,10 @@ The Photo Album application is a Spring Boot web application that allows users t * Deployed to Azure Container Apps **Time Estimates:** -The complete workshop takes approximately **1 hours** to complete. Here's the breakdown for each major step: +The complete workshop takes approximately **40 minutes** to complete. Here's the breakdown for each major step: - **Assess Your Java Application**: ~5 minutes -- **Migrate from Oracle to PostgreSQL**: ~20 minutes -- **Deploy to Azure**: ~25 minutes +- **Migrate from Oracle to PostgreSQL**: ~15 minutes +- **Deploy to Azure**: ~20 minutes ## Running Locally (Pre-Migration)