[ 
https://issues.apache.org/jira/browse/GEODE-10479?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=18032151#comment-18032151
 ] 

Jinwoo Hwang commented on GEODE-10479:
--------------------------------------

Hi [~sboorlagadda] ,

I would like to share that the migration from Java 17 to Java 21 will occur 
immediately after the Jakarta EE 10 migration work is merged. The scope of this 
project is limited to ensuring the use of APIs that remain valid and are not 
deprecated in Java 21. A separate initiative will address any deprecation and 
removal warnings introduced in Java 21.

> Address deprecation and removal warnings in Java 17 migration by 
> incrementally re-enabling compiler warnings and modernizing deprecated API 
> usage
> -------------------------------------------------------------------------------------------------------------------------------------------------
>
>                 Key: GEODE-10479
>                 URL: https://issues.apache.org/jira/browse/GEODE-10479
>             Project: Geode
>          Issue Type: Task
>            Reporter: Jinwoo Hwang
>            Assignee: Sai Boorlagadda
>            Priority: Major
>
> h3. Current State
> Following the successful Java 17 migration (GEODE-10465), all deprecation and 
> removal warnings have been suppressed to ensure build stability during the 
> transition. The current suppression configuration includes:
> *In warnings.gradle:* 
> tasks.withType(JavaCompile) \{ options.compilerArgs << '-Xlint:-unchecked' << 
> "-Werror" << '-Xlint:-deprecation' << '-Xlint:-removal' options.deprecation = 
> false }
> *In geode-java.gradle:* 
> options.compilerArgs.addAll([ '-Xlint:-removal', '-Xlint:-deprecation' ])
> h3. Problem Statement
> The current suppression of all deprecation warnings creates technical debt 
> and prevents the codebase from:
>  * Leveraging modern Java 17+ APIs and features
>  * Identifying potentially broken code due to API removals
>  * Maintaining code quality standards
>  * Preparing for future Java version upgrades
> h3. *Note:* The migration from *Java 17* to *Java 21* will occur immediately 
> after the *Jakarta EE 10* migration work is merged. The scope of this project 
> is limited to ensuring the use of APIs that remain valid and are {*}not 
> deprecated in Java 21{*}. A separate initiative will address any *deprecation 
> and removal warnings* introduced in Java 21. 
> h3. Proposed Solution
> h4. Phase 1: Assessment and Categorization ( <1 week )
>  * *Baseline Analysis*
>  ** Remove warning suppressions temporarily on a test branch
>  ** Generate comprehensive report of all deprecation and removal warnings
>  ** Categorize warnings by:
>  *** {*}Critical{*}: API removal warnings (will break in future Java versions)
>  *** {*}High Priority{*}: Security-related deprecated APIs
>  *** {*}Medium Priority{*}: Performance-impacting deprecated APIs
>  *** {*}Low Priority{*}: General deprecated APIs with modern alternatives
>  * *Module-by-Module Impact Assessment*
>  ** Identify modules with highest warning concentration
>  ** Document external dependency deprecations vs. internal code issues
>  ** Create priority matrix for remediation effort
> h4. Phase 2: Incremental Warning Re-enablement ( <1 week)
>  * *Start with Removal Warnings* (Week 1-2) Re-enable only removal warnings 
> first (highest priority): options.compilerArgs << '-Xlint:removal'
>  ** Address API removal issues that will break in future Java versions
>  ** Replace removed APIs with modern alternatives
>  ** Focus on critical functionality first
>  * *Enable Deprecation Warnings by Module* (Week 3-6) Enable deprecation 
> warnings module by module: if (project.name in ['geode-core', 
> 'geode-common']) \{ options.deprecation = true options.compilerArgs << 
> '-Xlint:deprecation' }
>  ** Start with core modules with fewer dependencies
>  ** Gradually expand to more complex modules
> h4. Phase 3: API Modernization (1-2 weeks)
>  * *Security API Updates*
>  ** Replace deprecated security manager APIs
>  ** Update SSL/TLS configuration APIs
>  ** Modernize authentication mechanisms
>  * *Collections and Concurrency*
>  ** Replace deprecated collection methods
>  ** Update concurrent API usage
>  ** Leverage Java 17 concurrency improvements
>  * *I/O and Networking*
>  ** Replace deprecated networking APIs
>  ** Update file I/O operations
>  ** Leverage NIO.2 improvements
>  * *Reflection and Introspection*
>  ** Update reflection API usage for module system compatibility
>  ** Replace deprecated introspection methods
>  ** Add proper module exports where needed
> h4. Phase 4: Full Warning Compliance (2 weeks)
>  * *Remove All Suppressions* Final configuration with all warnings enabled: 
> tasks.withType(JavaCompile) \{ options.compilerArgs << '-Xlint:unchecked' << 
> "-Werror" << '-Xlint:deprecation' << '-Xlint:removal' options.deprecation = 
> true }
>  * *Establish Warning Gates*
>  ** Configure CI/CD to fail on new deprecation warnings
>  ** Add checkstyle rules to prevent deprecated API introduction
>  ** Document approved exceptions with justification
> h3. Acceptance Criteria
>  *  All '-Xlint:-removal' suppressions removed and underlying issues resolved
>  *  All '-Xlint:-deprecation' suppressions removed and underlying issues 
> resolved
>  *  'options.deprecation = false' changed to 'options.deprecation = true'
>  *  Zero deprecation warnings in clean build
>  *  Zero removal warnings in clean build
>  *  CI/CD pipeline fails on new deprecation/removal warnings
>  *  Documentation updated with modern API usage patterns
>  *  Performance benchmarks show no regression from API changes
> h3. Implementation Strategy
>  # *Create Feature Branch* 
>  # {*}Incremental PRs{*}: Submit changes module by module for easier review
>  # {*}Parallel Development{*}: Allow normal development to continue while 
> cleanup progresses
>  # {*}Testing Strategy{*}: Ensure all existing tests pass after each 
> modernization change
>  # {*}Rollback Plan{*}: Maintain ability to temporarily suppress warnings if 
> blocking issues discovered
> h3. Estimated Effort
>  * {*}Total Effort{*}: 2-3 weeks
>  * {*}Team Size{*}: 2-3 developers
>  * {*}Risk Level{*}: Medium (phased approach minimizes disruption)
> h3. Benefits
>  * {*}Code Quality{*}: Modern, maintainable codebase using current Java 17 
> APIs
>  * {*}Future Compatibility{*}: Preparation for Java 18+ upgrades
>  * {*}Performance{*}: Potential improvements from modern API usage
>  * {*}Security{*}: Updated security APIs and practices
>  * {*}Developer Experience{*}: Cleaner build output and better IDE warnings
> h3. Dependencies
>  * Requires completion of GEODE-10465 (Java 17 migration)
>  * May require coordination with external dependency updates
>  * Should align with any planned Gradle or build system upgrades
> h3. Success Metrics
>  * Zero suppressed deprecation warnings
>  * Build time maintained or improved
>  * Test suite execution time maintained or improved
>  * No functional regressions in existing features
>  * Documentation updated with modern patterns
>  
>  



--
This message was sent by Atlassian Jira
(v8.20.10#820010)

Reply via email to