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

Jose Luis López reassigned HADOOP-19395:
----------------------------------------

    Assignee: Jose Luis López

> Upgrade javax to jakarta
> ------------------------
>
>                 Key: HADOOP-19395
>                 URL: https://issues.apache.org/jira/browse/HADOOP-19395
>             Project: Hadoop Common
>          Issue Type: Improvement
>          Components: common
>    Affects Versions: 3.5.0
>            Reporter: Yaniv Kunda
>            Assignee: Jose Luis López
>            Priority: Major
>
> Move Hadoop from the Java EE {{javax.*}} APIs to their Jakarta EE 
> {{jakarta.*}} successors: Jetty 12 ee10, Jersey 3, JAXB 4. This is the 
> umbrella; the work is done in its sub-tasks.
> h3. Background
> Since Jakarta EE 9 the servlet, JAX-RS, JAXB and related APIs live in the 
> {{jakarta}} namespace, and their {{javax}} versions get no new releases. 
> Downstream projects that build on Hadoop's servlet and authentication classes 
> are blocked until Hadoop moves: HBase (HBASE-29542) and Knox (KNOX-3309).
> This issue starts from HADOOP-19972, which moves Hadoop to Jetty 12 on the 
> ee8 environment, still serving {{javax.servlet}}. With the container already 
> maintained, what is left here is the namespace.
> h3. Size
> An inventory of the tree on the HADOOP-19972 branch finds:
> * 3,368 Java EE references in 44 modules: JAX-RS 1,191, servlet 1,156, JAXB 
> 892, {{javax.inject}} 88, others about 40;
> * 140 references to Jetty's ee8 types, which become ee10;
> * 86 Public or LimitedPrivate classes that use these types, among them 
> hadoop-auth's {{AuthenticationHandler}} family, the 
> {{org.apache.hadoop.http}} servlets and filters, and the yarn-api timeline 
> records;
> * 31 managed third-party dependencies bound to the javax APIs: Jersey 2, 
> Jetty ee8, Guice, the Jackson JAX-RS and JAXB modules, jettison, swagger, the 
> JAXB runtime and the API jars.
> h3. Scope
> * Every Java EE API that moved to {{jakarta.*}}, in main code, tests, 
> resources and POM shade configurations.
> * Jetty 12 ee8 → ee10 (or ee11).
> * The third-party dependencies bound to those APIs, as mapped in HADOOP-19625.
> * The Public/LimitedPrivate classes that expose javax types, under a 
> compatibility policy agreed on the dev list.
> * Shaded clients, LICENSE/NOTICE-binary, the release note, and a migration 
> note for downstream projects.
> h3. Out of scope
> * The container upgrade itself (HADOOP-19972).
> * JDK packages that keep the {{javax}} name: {{javax.net}}, {{javax.crypto}}, 
> {{javax.security.auth}}, {{javax.management}} and the like.
> * jsr305 annotations ({{javax.annotation.Nullable}}, {{Nonnull}}) and JCache 
> ({{javax.cache}}), which are not Jakarta EE.
> * Backports to 3.x. This is an incompatible change for 4.0.
> h3. Approach
> Every daemon serves its web UI and REST APIs through {{HttpServer2}}, and 
> Jersey 3 cannot run on a javax container. The namespace therefore has to 
> change in all web modules at once; it cannot land module by module on trunk. 
> The work is split in two phases.
> *Phase A, on trunk.* Preparation that changes no namespace:
> * HADOOP-19971: remove servlet and Jetty types from classes that don't need 
> them.
> * HADOOP-19625: map each javax-bound dependency to its jakarta replacement.
> * Upgrade Guice 5.1.0 → 6.x, which accepts both {{javax.inject}} and 
> {{jakarta.inject}}.
> * Remove the Jersey 1 leftover {{javax.ws.rs:jsr311-api}}.
> * Agree the compatibility policy for the Public/LimitedPrivate classes.
> * Add the javax inventory and an OpenRewrite recipe to dev-support.
> *Phase B, on a feature branch.* The switch itself. The mechanical part is 
> generated with the OpenRewrite {{JavaxMigrationToJakarta}} recipe; each 
> sub-task holds the manual fixes for one group of modules, in dependency order:
> * B1: common and auth: {{HttpServer2}}, the filters, and the dependency 
> versions.
> * B2: HDFS and KMS.
> * B3: YARN API and web framework.
> * B4: YARN client and daemons.
> * B5: MapReduce.
> * B6: applications, tools and cloud connectors.
> * B7: shaded clients, packaging and docs.
> The branch is merged to trunk by vote once complete.
> h3. Done when
> * The javax inventory reports no Java EE references outside the out-of-scope 
> list, and a CI check keeps it that way.
> * Every daemon serves on Jetty 12 ee10 with Jersey 3, and the full test suite 
> passes.
> * The shaded clients build and pass their checks.
> * The release note lists every incompatible change, and the migration note 
> for downstream projects is published.
> h3. Open decisions (dev list)
> * The compatibility policy for the Public/LimitedPrivate classes: change them 
> in 4.0, or deprecate first.
> * Target ee10 (Jakarta EE 10, Jersey 3.1) or ee11 (Jakarta EE 11, Jersey 4).
> * The app catalog, which runs on Solr 8 and Jetty 9.4: upgrade Solr, or 
> retire the module.
> * Feature branch or a single large change.



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

---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to