背景
Efwがいままではtomcat7・8・9対応ですが、最近tomcat10も対応するようにしました。
Githubには、従来とjakarta対応2つフォルダに分けてソースを格納するようにしました。
https://github.com/efwGrp/efw4.X/tree/master/src
https://github.com/efwGrp/efw4.X/tree/master/src4jakarta
リリースのjarファイルも従来とjakarta対応を2つjarにしました。
<dependency><groupId>io.github.efwgrp</groupId><artifactId>efw</artifactId><version>4.07.019</version></dependency>
<dependency><groupId>io.github.efwgrp</groupId><artifactId>efw</artifactId><version>4.07.019jakarta</version></dependency>
修正箇所と考え方をメモします。
jakartaに変更するjavaxクラス
基本的にjavaxのクラスをjakartaのものに変更することで対応しています。以下のように変更対象のクラスをリストします。
//Servlet関連
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
//Filter関連
import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.annotation.WebFilter;
//jspカスタマイズタグ関連
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.PageContext;
import javax.servlet.jsp.tagext.TagSupport;
//メール送信関連
import javax.mail.Authenticator;
import javax.mail.PasswordAuthentication;
import javax.mail.MessagingException;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
//Cookie関連
import javax.servlet.http.Cookie;
//セッション関連
import javax.servlet.http.HttpSession;
変更対象外のjavaxクラス
すべてのjavaxがjakarta対応していることではありません。一括置換はだめです。以下のjavaxクラスはjakartaなしとわかりました。
//スクリプトエンジン関連
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import javax.script.SimpleScriptContext;
import javax.script.ScriptContext;
//XML関連
import javax.xml.transform.OutputKeys;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.dom.DOMSource;
import javax.xml.transform.stream.StreamResult;
import javax.xml.parsers.DocumentBuilderFactory;
import javax.xml.parsers.ParserConfigurationException;
//ネーミング関連
import javax.naming.InitialContext;
import javax.naming.NamingException;
//Dataリソース関連
import javax.sql.DataSource;
コンテキストの変更
context.xmlファイルにもjavaxの記載があるので、このファイルの修正も必要です。注意点ですが、javax.sql.DataSourceはjakarta変更対象外で、javax.mail.Sessionはjakarta変更対象です。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE Context>
<Context>
<Resource
name = "jdbc/efw"
auth = "Container"
type = "javax.sql.DataSource"
driverClassName = "org.postgresql.Driver"
url = "jdbc:postgresql://localhost:5432/skeletonSample"
username = "postgres"
password = "postgres"
maxTotal = "10"
maxIdle = "10"
maxWaitMillis = "10"
/>
<Resource
name = "mail/efw"
auth = "Container"
type = "javax.mail.Session"
username = "username"
password = "password"
mail.debug = "false"
mail.user = "user"
mail.from = "from@host"
mail.transport.protocol="smtp"
mail.smtp.host = "mailhost"
mail.smtp.auth = "true"
mail.smtp.port = "25"
mail.smtp.starttls.enable="true"
description = "E-Mail Resource"
/>
</Context>
メール送信用のjarも更新します。
<!-- javaxの場合 -->
<dependency>
<groupId>com.sun.mail</groupId>
<artifactId>javax.mail</artifactId>
<version>1.6.2</version>
</dependency>
<!-- jakartaの場合 -->
<dependency>
<groupId>org.eclipse.angus</groupId>
<artifactId>jakarta.mail</artifactId>
<version>2.0.3</version>
</dependency>