23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

闇の魔術に対する防衛術Advent Calendar 2020

Day 22

いつかTomcat10を使用する……気になれないパッケージ名変更の闇

Last updated at Posted at 2020-12-24

※この記事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/
image.png

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/ ) はこの通りです。
image.png

このため、JavaMailの最新バージョンでBugFixがあったとき、いままでの 1.6.x から 2.0.y にジャンプするには、Java(Scala, Groovy)ソースのimport文を javax.mail.* から jakarta.mail.* に変更する必要があります。


長期的にはメリットも出てくると思うので、時間をかけて地道に対応するしかないですね。

23
19
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
23
19

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?