lastaflute / lastaflute-example-harbor

example project for LastaFlute as single project (with H2)
Apache License 2.0
6 stars 7 forks source link

Jakarta support (as java21 version) #12

Open jflute opened 1 month ago

jflute commented 1 month ago

// Japanese here

LastaFluteのjakarta対応に合わせて、jakarta21ブランチのharborを作る。

jflute commented 1 month ago

commons-fileuploadもjakarta対応のバージョンを使わないといけない。

https://commons.apache.org/proper/commons-fileupload/commons-fileupload2-jakarta-servlet6/summary.html

<dependency> <!-- used for multipart request -->
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-fileupload2-jakarta-servlet6</artifactId>
    <version>${commons.fileupload.version}</version>
</dependency>

そして、HarborMultipartRequestHandlerがコンパイルエラーのオンパレード。

ServletFileUploadがいなくなってるとかどうすりゃいいのか?

fessで先立って対応しているコードを教えてもらったので参考にする。 https://github.com/codelibs/fess/commit/90d6af13850c9e58a08ac46dce01287e557248c8#diff-46ded191a59579f83512554ead4[…]fd37acde6513fcbe2e7db5a9a1421c7f](https://github.com/codelibs/fess/commit/90d6af13850c9e58a08ac46dce01287e557248c8#diff-46ded191a59579f83512554ead4b7692fd37acde6513fcbe2e7db5a9a1421c7f)

JakartaServletDiskFileUploadを使う。

jflute commented 1 month ago

変更点概要: o ServletFileUpload -> JakartaServletDiskFileUpload o SizeLimitExceededException -> FileUploadByteCountLimitException o FileItem -> DiskFileItem o DiskFileItemFactoryはbuilder()でnewする o StringのencodingがもろもろCharsetに o e.getPermittedSize() -> e.getPermitted()

jflute commented 1 month ago

一括修正:

import javax.annotation.Resource
↓
import jakarta.annotation.Resource
jflute commented 1 month ago

jtaをjakarta対応に

<dependency>
    <groupId>jakarta.transaction</groupId>
    <artifactId>jakarta.transaction-api</artifactId>
    <version>2.0.1</version>
</dependency>
jflute commented 1 month ago

warファイル作るところ:

<artifactId>maven-dependency-plugin</artifactId>
...
<!-- servlet container libraries are located as war resource -->
<includeArtifactIds>
    jakarta.servlet-api, jakarta.servlet.jsp, jakarta.servlet.jsp-api
    , jetty-boot, jetty-all, javax.el, jetty-jsp, jetty-schemas, jakarta.websocket-api
    , tomcat-boot, tomcat-embed-core, tomcat-embed-logging-juli
    , tomcat-jasper, tomcat-jasper-el, tomcat-el-api, tomcat-jsp-api, ecj

...
<artifactId>maven-war-plugin</artifactId>
<configuration>
    <!-- servlet container libraries are not in application -->
    <packagingExcludes> <!-- #jakarta -->
        WEB-INF/lib/jakarta.servlet-api-*.jar, WEB-INF/lib/jakarta.servlet.jsp-*.jar
        , WEB-INF/lib/jetty-*.jar, WEB-INF/lib/jakarta.el-*.jar, WEB-INF/lib/jakarta.websocket-*.jar
        , WEB-INF/lib/org.eclipse.jdt.core-*.jar
        , WEB-INF/lib/tomcat-*.jar
    </packagingExcludes>