= Migration to jakarta namespace

== Introduction

As described in the Apache TomEE Dev https://lists.apache.org/thread/qfxykymqbm916fhrpvhm8934vwo6pvt1[mailing list], the work for the migration to the Jakarta namespace is tracked by https://issues.apache.org/jira/browse/TOMEE-3862[TOMEE-3862].
The following is a list of common dependency upgrades, configuration, tips and tricks that can help you to jump or speed up your contribution to this migration by fixing test, examples, etc. within the project.

If you are new to the project, don't forget to check our https://tomee.apache.org/community/index.html[Community] page containing all the details on how to start contributing.


== General Notes

- Use a JDK >= 11 + Maven 3.8.x

- Master branch is being used for this migration.

- Javamail is currently broken. We need to have a jakarta compatible
version of Geronimo Javamail. This currently breaks 2 examples and
prevents platform tck from running.

- Deltaspike / Kratzo examples require dependency upgrades, i.e. MVC
2.0 + Jakarta version of Deltaspike.

- Micro Profile examples are broken due to the ongoing integration work
of SmallRye impls. If the integration is done, we can fix them.

- If Hibernate is used, we either need to upgrade to 6.0.0 _or_ use the
Jakarta artifact from the 5.6.x series. In some examples, we still use
Hibernate 4, so the upgrade also requires to deal with
"tomee.jpa.factory.lazy".

- Check for "http" repositories to avoid the default http blocker in
newer Maven versions.

== Artifacts

|====
|From | To | Comment

a|
[source, xml]
----
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>x.x.x</version>
  <configuration>
    <source>8</source>
    <target>8</target>
  </configuration>
</plugin>
----
a|
[source, xml]
----
<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-compiler-plugin</artifactId>
  <version>3.10.1</version>
  <configuration>
    <source>11</source>
    <target>11</target>
  </configuration>
</plugin>
----
b|
Project master branch now targets Java 11.


a|
[source, xml]
----
<dependency>
  <groupId>org.jboss.arquillian</groupId>
  <artifactId>arquillian-bom</artifactId>
  <version>x.x.x-.</version>
  <scope>import</scope>
  <type>pom</type>
</dependency>
----
a|
[source, xml]
----
<dependency>
  <groupId>org.jboss.arquillian</groupId>
  <artifactId>arquillian-bom</artifactId>
  <version>1.7.0.Final</version>
  <scope>import</scope>
  <type>pom</type>
</dependency>
----
b|
-


a|
[source, xml]
----
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>1.1.2</version>
----
a|
[source, xml]
----
<groupId>jakarta.servlet.jsp.jstl</groupId>
<artifactId>jakarta.servlet.jsp.jstl-api</artifactId>
<version>2.0.0</version>
----
b|
-


a|
[source, xml]
----
groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>2.1.8</version>
----
a|
[source, xml]
----
groupId>org.apache.myfaces.core</groupId>
<artifactId>myfaces-api</artifactId>
<version>3.0.1</version>
----
b|
-



a|
[source, xml]
----
<dependency>
  <groupId>javax.websocket</groupId>
  <artifactId>javax.websocket-api</artifactId>
  <version>1.x</version>
</dependency>
----
a|
[source, xml]
----
<dependency>
  <groupId>jakarta.websocket</groupId>
  <artifactId>jakarta.websocket-api</artifactId>
  <version>2.0.0</version>
</dependency>
----
b|
-


a|
[source, xml]
----
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-api</artifactId>
    <version>9.0.x</version>
    <scope>provided</scope>
</dependency>
----
a|
[source, xml]
----
<dependency>
    <groupId>org.apache.tomcat</groupId>
    <artifactId>tomcat-api</artifactId>
    <version>10.0.20</version>
    <scope>provided</scope>
</dependency>
----
b|
or latest Tomcat 10.0.x (depending on the Tomcat version used in the root pom.xml)


a|
[source, xml]
----
<dependency>
  <groupId>org.eclipse.microprofile</groupId>
  <artifactId>microprofile</artifactId>
  <version>2.0.1</version>
  <type>pom</type>
  <scope>provided</scope>
</dependency>
----
a|
[source, xml]
----
<dependency>
  <groupId>org.eclipse.microprofile</groupId>
  <artifactId>microprofile</artifactId>
  <version>5.0</version>
  <type>pom</type>
  <scope>provided</scope>
</dependency>
----
b|
-


a|
[source, xml]
----
<groupId>taglibs</groupId>
<artifactId>standard</artifactId>
<version>1.1.2</version>
----
a|
[source, xml]
----
<groupId>org.apache.tomee</groupId>
<artifactId>taglibs-shade</artifactId>
<version>9.0.0-M9-SNAPSHOT</version>
----
b|
Shaded artifacts are described in the next section.


|====


=== Shaded artifacts
Artifacts whose projects have not yet released a Jakarta namespace compatible version are being modified(shaded) in the module https://github.com/apache/tomee/tree/master/deps[tomee/deps], feel free to open a pull request if you find a version that needs to be shaded.


== Packages

|====
|From | To | Comment


a|
[source, java]
----
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.naming.NamingException;
----

a|
-
b|
This packages come from JRE and don't need migration.
|====
