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

Jinwoo Hwang updated GEODE-10466:
---------------------------------
    Fix Version/s: 2.0.0

> Migrate Apache Geode from Java EE to Jakarta EE
> -----------------------------------------------
>
>                 Key: GEODE-10466
>                 URL: https://issues.apache.org/jira/browse/GEODE-10466
>             Project: Geode
>          Issue Type: Improvement
>            Reporter: Jinwoo Hwang
>            Assignee: Jinwoo Hwang
>            Priority: Major
>             Fix For: 2.0.0
>
>
> h3. Background
> With the transition from Java EE to Jakarta EE (starting with Jakarta EE 9), 
> the namespace for enterprise Java APIs changed from {{{}javax to jakarta{}}}. 
>  This migration is necessary to:
>  * Maintain compatibility with modern application servers (Tomcat 10+, Jetty 
> 11+, etc.)
>  * Support latest Spring Framework versions (6.0+)
>  * Ensure long-term sustainability and vendor support
>  * Align with industry standards and best practices
> h3. Current State
> Apache Geode currently uses {{javax.*}} packages in several modules, 
> primarily:
>  * *Servlet APIs* in web-related modules
>  * *Annotation APIs* for dependency injection and validation
>  * *HTTP session management* components
>  * *REST API endpoints* and web controllers
> h3. Scope of Work
> h4. Affected Modules
>  * geode-web - Core web functionality and servlet integration
>  * geode-web-api - REST API interfaces and controllers
>  * geode-web-management - Management REST endpoints
>  * geode-core - Limited javax usage (primarily annotations)
>  * geode-assembly - Web container integration and packaging
> h4. Key Changes Required
>  * *Dependency Updates*
>  ** Replace {{javax.servlet:javax.servlet-api}} with 
> {{jakarta.servlet:jakarta.servlet-api}}
>  ** Replace {{javax.annotation:javax.annotation-api}} with 
> {{jakarta.annotation:jakarta.annotation-api}}
>  ** Update Spring Framework to Jakarta EE compatible versions (6.0+)
>  * *Package Name Migration*
>  
> // Before
> import javax.servlet.http.HttpServletRequest;
> import javax.annotation.PostConstruct;
> // After
> import jakarta.servlet.http.HttpServletRequest;
> import jakarta.annotation.PostConstruct;
>  
>  * *Build Configuration Updates*
>  ** Update Gradle dependencies in affected modules
>  ** Ensure compatibility with Jakarta EE 9+ specifications
>  ** Update version constraints and BOM files
> h3. Acceptance Criteria
> h4. Functional Requirements
>  *  All {{{}javax.* *imports replaced with corresponding jakarta.*{}}}*  
> imports
>  *  All build dependencies updated to Jakarta EE compatible versions
>  *  REST API endpoints function identically to current implementation
>  *  Web management interfaces remain fully operational
>  *  HTTP session management continues to work as expected
> h4. Technical Requirements
>  *  All unit tests pass without modification
>  *  Integration tests pass
>  *  No performance regression compared to current implementation
>  *  Backward compatibility maintained where possible
>  *  CI/CD pipeline updated to test against Jakarta EE environments
> h3. Implementation Plan
> h4. Phase 1: Assessment and Preparation (1-2 weeks)
>  * Complete comprehensive audit of all {{javax.*}} usage
>  * Identify third-party dependencies requiring updates
>  * Create automated migration scripts for package name changes
>  * Set up test environments with Jakarta EE compatible containers
> h4. Phase 2: Core Migration (2-3 weeks)
>  * Update build dependencies and version constraints
>  * Execute automated package name migration
>  * Update web module implementations
>  * Resolve compilation and runtime issues
> h4. Phase 3: Testing and Validation (2 weeks)
>  * Execute full test suite against Jakarta EE environment
>  * Perform integration testing with supported application servers
>  * Validate REST API functionality and performance
>  * Test web management interface compatibility
> h4. Phase 4: Documentation and Release (1 week)
>  * Update user documentation and migration guides
>  * Create compatibility matrix for supported containers
>  * Update examples and sample applications
>  * Prepare release notes with breaking changes
> h3. Risks and Mitigation
> h4. Technical Risks
>  * {*}Third-party library compatibility{*}: Some dependencies may not support 
> Jakarta EE
>  ** {_}Mitigation{_}: Identify alternatives or request vendor updates early
>  * {*}Application server compatibility{*}: Older containers may not support 
> Jakarta EE
>  ** {_}Mitigation{_}: Document minimum supported versions clearly
>  * {*}Performance impact{*}: Package changes may affect performance
>  ** {_}Mitigation{_}: Comprehensive performance testing and benchmarking
> h4. Project Risks
>  * {*}Breaking changes for users{*}: Applications using Geode web features 
> may require updates
>  ** {_}Mitigation{_}: Provide detailed migration guide and deprecation notices
>  * {*}Timeline dependencies{*}: Spring Framework and other dependencies must 
> be updated first
>  ** {_}Mitigation{_}: Coordinate with dependency update schedules
> h3. Success Metrics
>  * 100% of {{{}javax.* *references migrated to jakarta.*{}}}*
>  * All existing functionality preserved
>  * CI/CD pipeline fully operational with Jakarta EE
>  * Zero performance regression
>  * Complete documentation coverage
> h3. Additional Notes
>  * This migration aligns Apache Geode with modern Java enterprise standards 
> and ensures long-term compatibility with evolving Java ecosystem.
>  * The work should be coordinated with any planned Spring Framework upgrades.



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

Reply via email to