※この記事12/23が空いていたので、代わりに投稿しました。ライトなものです。
Tomcatの最新バージョンは9.0
現在の Apache Tomcat の最新メジャーバージョンは9.0です。
https://tomcat.apache.org/
を見ると、2020/12/25 現在
- Apache Tomcat 9.0.41
- Apache Tomcat 8.5.61
- Apache Tomcat 7.0.107
が更新されています。2011/1にリリースされたTomcat7.0もようやく2021/3/31にEOLを迎えると発表されています。
http://tomcat.apache.org/tomcat-70-eol.html
いつかは、いま運用保守したり開発しているアプリケーションをTomcat10に乗り換える必要がありますが、ここに頭の痛い問題があります。Jakrta EE 9 のパッケージ名変更の影響です。
「Java EE 8 から Jakrta EE 9 になるとき、javax.* だったパッケージ名が jakarta.* になる話ですよね、たしか Big ban と呼ばれてた。でも私たち Glassfish のような Java EE 使ってないから関係ないですよ」って、私も以前誤解していました。そうではないのです……
(知っている皆さんからあたり前じゃないか!と突っ込みがたくさん来そう💦)
Tomcat10.0に載せ替えるときのパッケージ名変更の問題
Tomcat 10.0.0 は 2020/12/8 にリリースされたばかりですが、サイトに「えっ?」となることが書いてあります。
https://tomcat.apache.org/
the primary package for all implemented APIs has changed from javax.* to jakarta.*. This will almost certainly require code changes to enable applications to migrate from Tomcat 9 and earlier to Tomcat 10 and later.
適当訳:パッケージ名が javax.* から jakarta.* になったから、Tomcat9(とそれ以前)から10に移行するときは、動かすためにコードの変更が必要ですよ。
そうでした、Servlet も Jakarta EE (Java EE) を構成する一つでした。なので、手元で
import javax.servlet.*
と書いてあるコードは片っ端から
import jakarta.servlet.*
に変更する必要があります。
10.0で動くバージョンは9.0では動かないのが面倒で
今回の変更で厄介なのは、Tomcat10で動くようにした Servlet は Tomcat9 では動かない、という点ですね
JavaMail などのライブラリも変更
https://jakarta.ee/specifications/ に Jakarta EE (Java EE) の構成要素が並んでいます。
- Java Activation Framework → Jakarta Activation
- JavaMail → Jakarta Mail
- Java Message Service → Jakarta Messaging
- JSON-B → Jakarta JSON Binding
- JAXB → Jakarta XML Binding
- Java Server Pages → Jakarta Server Pages
- Java Servlet → Jakarta Servlet
あたりは、いわゆる Glassfish、JBoss Application Server のような Java EE コンテナ と関係ない、Tomcat 上のWebアプリケーションやCLIなコマンド実装・バッチ処理でも使用されるケースが多いと思います。これらも Jakarta EE (Java EE) の構成要素ですので、パッケージ名が jakarta.* になっています。
例えば、「JavaMail → Jakarta Mail」も2.0からしっかりと jakarta.mail になっています。
https://jakarta.ee/specifications/mail/2.0/ の先にある javadoc ( https://jakarta.ee/specifications/mail/2.0/apidocs/ ) はこの通りです。
このため、JavaMailの最新バージョンでBugFixがあったとき、いままでの 1.6.x から 2.0.y にジャンプするには、Java(Scala, Groovy)ソースのimport文を javax.mail.* から jakarta.mail.* に変更する必要があります。
長期的にはメリットも出てくると思うので、時間をかけて地道に対応するしかないですね。