[ 
https://issues.apache.org/jira/browse/GEODE-10494?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Jinwoo Hwang updated GEODE-10494:
---------------------------------
    Description: 
*Summary*
Remove all `--add-exports` JVM arguments from Geode build configuration to 
improve compatibility with future Java versions and follow best practices for 
module system usage.

*Description*
Geode currently uses multiple `--add-exports` JVM arguments to access internal 
JDK APIs. While this works for current Java versions, it creates several issues:

1. {*}Future Java Compatibility{*}: Internal APIs exposed via `--add-exports` 
may be removed or changed in future Java versions
2. {*}Security Concerns{*}: Bypassing module encapsulation reduces security 
guarantees
3. {*}Maintenance Overhead{*}: Requires ongoing maintenance as Java evolves
4. {*}Build Warnings{*}: Generates deprecation warnings in newer Java versions

Current Usage
The following `--add-exports` are currently used across the codebase:
 - `--add-exports java.base/sun.nio.ch=ALL-UNNAMED`
 - `--add-exports java.management/sun.management=ALL-UNNAMED`
 - `--add-exports java.base/jdk.internal.ref=ALL-UNNAMED`
 - `--add-exports java.base/sun.security.util=ALL-UNNAMED`
 - Additional exports in test configurations

Acceptance Criteria
 - Identify all locations using `--add-exports` in build.gradle files
 - Research public API alternatives for each internal API usage
 - Replace internal API calls with public alternatives where possible
 - Remove unnecessary `--add-exports` arguments
 - Document any remaining usage with justification
 - Ensure all tests pass without `--add-exports`
 - Verify compatibility with Java 8, 11, 17, and 21

Technical Approach
1. {*}Audit Phase{*}: Catalog all `--add-exports` usage and corresponding code
2. {*}Research Phase{*}: Find public API replacements for each internal API
3. {*}Implementation Phase{*}:
 - Replace internal API usage with public alternatives
 - Use reflection with proper exception handling where needed
 - Implement feature detection for Java version-specific behavior
4. {*}Testing Phase{*}: Comprehensive testing across supported Java versions

Benefits
 - {*}Future-proof{*}: Reduces risk of breakage in future Java versions
 - {*}Standards Compliance{*}: Follows Java module system best practices
 - {*}Cleaner Build{*}: Eliminates build warnings and reduces complexity
 - {*}Better Security{*}: Maintains module encapsulation boundaries

Risk Assessment
 - {*}Medium Risk{*}: Some internal APIs may not have direct public replacements
 - {*}Mitigation{*}: Implement gradual migration with fallback mechanisms
 - {*}Testing{*}: Extensive testing across all supported Java versions required

Related Work
 - Consider this work alongside any Java version upgrade initiatives
 - Coordinate with performance team if internal APIs are used for optimization
 - Review Apache Geode community guidelines for Java compatibility

Definition of Done
 - All `--add-exports` arguments removed or documented with clear justification
 - Public API alternatives implemented for all internal API usage
 - Full test suite passes on Java 8, 11, 17, and 21
 - Documentation updated with any compatibility notes
 - Code review completed by Java platform experts

  was:

## Summary
Remove all `--add-exports` JVM arguments from Geode build configuration to 
improve compatibility with future Java versions and follow best practices for 
module system usage.

## Description
Geode currently uses multiple `--add-exports` JVM arguments to access internal 
JDK APIs. While this works for current Java versions, it creates several issues:

1. **Future Java Compatibility**: Internal APIs exposed via `--add-exports` may 
be removed or changed in future Java versions
2. **Security Concerns**: Bypassing module encapsulation reduces security 
guarantees
3. **Maintenance Overhead**: Requires ongoing maintenance as Java evolves
4. **Build Warnings**: Generates deprecation warnings in newer Java versions

## Current Usage
The following `--add-exports` are currently used across the codebase:
- `--add-exports java.base/sun.nio.ch=ALL-UNNAMED`
- `--add-exports java.management/sun.management=ALL-UNNAMED` 
- `--add-exports java.base/jdk.internal.ref=ALL-UNNAMED`
- `--add-exports java.base/sun.security.util=ALL-UNNAMED`
- Additional exports in test configurations

## Acceptance Criteria
- [ ] Identify all locations using `--add-exports` in build.gradle files
- [ ] Research public API alternatives for each internal API usage
- [ ] Replace internal API calls with public alternatives where possible
- [ ] Remove unnecessary `--add-exports` arguments
- [ ] Document any remaining usage with justification
- [ ] Ensure all tests pass without `--add-exports`
- [ ] Verify compatibility with Java 8, 11, 17, and 21

## Technical Approach
1. **Audit Phase**: Catalog all `--add-exports` usage and corresponding code
2. **Research Phase**: Find public API replacements for each internal API
3. **Implementation Phase**: 
   - Replace internal API usage with public alternatives
   - Use reflection with proper exception handling where needed
   - Implement feature detection for Java version-specific behavior
4. **Testing Phase**: Comprehensive testing across supported Java versions

## Benefits
- **Future-proof**: Reduces risk of breakage in future Java versions
- **Standards Compliance**: Follows Java module system best practices
- **Cleaner Build**: Eliminates build warnings and reduces complexity
- **Better Security**: Maintains module encapsulation boundaries

## Risk Assessment
- **Medium Risk**: Some internal APIs may not have direct public replacements
- **Mitigation**: Implement gradual migration with fallback mechanisms
- **Testing**: Extensive testing across all supported Java versions required

## Related Work
- Consider this work alongside any Java version upgrade initiatives
- Coordinate with performance team if internal APIs are used for optimization
- Review Apache Geode community guidelines for Java compatibility

## Definition of Done
- All `--add-exports` arguments removed or documented with clear justification
- Public API alternatives implemented for all internal API usage
- Full test suite passes on Java 8, 11, 17, and 21
- Documentation updated with any compatibility notes
- Code review completed by Java platform experts


> Removal of --add-exports JVM arguments for Java compatibility and 
> future-proofing
> ---------------------------------------------------------------------------------
>
>                 Key: GEODE-10494
>                 URL: https://issues.apache.org/jira/browse/GEODE-10494
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Jinwoo Hwang
>            Assignee: Jinwoo Hwang
>            Priority: Major
>
> *Summary*
> Remove all `--add-exports` JVM arguments from Geode build configuration to 
> improve compatibility with future Java versions and follow best practices for 
> module system usage.
> *Description*
> Geode currently uses multiple `--add-exports` JVM arguments to access 
> internal JDK APIs. While this works for current Java versions, it creates 
> several issues:
> 1. {*}Future Java Compatibility{*}: Internal APIs exposed via `--add-exports` 
> may be removed or changed in future Java versions
> 2. {*}Security Concerns{*}: Bypassing module encapsulation reduces security 
> guarantees
> 3. {*}Maintenance Overhead{*}: Requires ongoing maintenance as Java evolves
> 4. {*}Build Warnings{*}: Generates deprecation warnings in newer Java versions
> Current Usage
> The following `--add-exports` are currently used across the codebase:
>  - `--add-exports java.base/sun.nio.ch=ALL-UNNAMED`
>  - `--add-exports java.management/sun.management=ALL-UNNAMED`
>  - `--add-exports java.base/jdk.internal.ref=ALL-UNNAMED`
>  - `--add-exports java.base/sun.security.util=ALL-UNNAMED`
>  - Additional exports in test configurations
> Acceptance Criteria
>  - Identify all locations using `--add-exports` in build.gradle files
>  - Research public API alternatives for each internal API usage
>  - Replace internal API calls with public alternatives where possible
>  - Remove unnecessary `--add-exports` arguments
>  - Document any remaining usage with justification
>  - Ensure all tests pass without `--add-exports`
>  - Verify compatibility with Java 8, 11, 17, and 21
> Technical Approach
> 1. {*}Audit Phase{*}: Catalog all `--add-exports` usage and corresponding code
> 2. {*}Research Phase{*}: Find public API replacements for each internal API
> 3. {*}Implementation Phase{*}:
>  - Replace internal API usage with public alternatives
>  - Use reflection with proper exception handling where needed
>  - Implement feature detection for Java version-specific behavior
> 4. {*}Testing Phase{*}: Comprehensive testing across supported Java versions
> Benefits
>  - {*}Future-proof{*}: Reduces risk of breakage in future Java versions
>  - {*}Standards Compliance{*}: Follows Java module system best practices
>  - {*}Cleaner Build{*}: Eliminates build warnings and reduces complexity
>  - {*}Better Security{*}: Maintains module encapsulation boundaries
> Risk Assessment
>  - {*}Medium Risk{*}: Some internal APIs may not have direct public 
> replacements
>  - {*}Mitigation{*}: Implement gradual migration with fallback mechanisms
>  - {*}Testing{*}: Extensive testing across all supported Java versions 
> required
> Related Work
>  - Consider this work alongside any Java version upgrade initiatives
>  - Coordinate with performance team if internal APIs are used for optimization
>  - Review Apache Geode community guidelines for Java compatibility
> Definition of Done
>  - All `--add-exports` arguments removed or documented with clear 
> justification
>  - Public API alternatives implemented for all internal API usage
>  - Full test suite passes on Java 8, 11, 17, and 21
>  - Documentation updated with any compatibility notes
>  - Code review completed by Java platform experts



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

Reply via email to