Migration Guide 5.10.0_ja - terasolunaorg/terasoluna-gfw GitHub Wiki

5.9.0から5.10.0への移行ガイド

目次
Note

5.9.0.RELEASEから5.10.0.RELEASEの移行手順として説明します。

Note

当移行ガイドと合わせて

を一読し、Spring Frameworkの変更を把握することを推奨します。

1. 5.10.0での主な変更点

5.10.0での主な変更点は以下の通りです。

  • 主要なライブラリのバージョンを更新

  • TERASOLUNA BOMの新規作成

  • Joda Timeの削除

  • 共通ライブラリの変更

  • ブランクプロジェクトの変更

1.1. 主要なライブラリのバージョンを更新

  • Spring Boot Dependenciesを3.4.1へ更新

    • Spring Frameworkを6.2.1へ更新

    • Spring Securityを6.4.2へ更新

    • Spring Dateを3.4.1へ更新

    • Hibernate ORMを6.6.4.Finalへ更新

  • MyBatisを3.5.17、MyBatis Springを3.0.4へ更新

1.2. TARASOLUNA BOMの新規作成

TARASOLUNAが使用するOSSライブラリのバージョンを一元管理するため、TERASOLUNA BOMを新規作成しました。

今までterasoluna-gfw-parentで定義していたOSSライブラリのバージョンをterasoluna-dependenciesに移動し、terasoluna-gfw-parentterasoluna-dependenciesをBOMとしてimportするように変更しました。
terasoluna-dependenciesterasoluna-gfw-parentから参照されるため、ユーザ側での変更は不要です。

1.3. Joda Timeの削除

TERASOLUNA 5.8.1.RELEASE時に非推奨化したJoda Timeに関する機能を削除しました。

1.4. 共通ライブラリの変更

  • 共通ライブラリのライブラリ及びMavenプラグインのバージョンを変更

    • [#1362] Update the version of maven-plugin

    • [#1368] remove dependency definitions when creating a bom project

    • [#1374] terasoluna-gfw-security-web still depends on jsp.

  • 機能変更

    • [#1320] Add options to SystemExceptionResoluver

    • [#1334] The URL of the link generated by f:link is incorrect.

    • [#1382] Remove the snapshot repository settings from pom.xml.

  • 機能削除

    • [#1363] Remove terasoluna-gfw-jodatime

1.5. ブランクプロジェクトの変更

2. 5.9.0から5.10.0への移行手順

移行手順は、以下の通りです。
依存ライブラリを更新を実施後、必要に応じて手順を適用してください。

Note

凡例
必須 : 手順の適用は必須
条件付き必須 : 手順の適用は条件付きで必須
推奨 : 手順の適用を推奨
任意 : 必要に応じて手順の適用を実施
- : 手順の適用は必要なし

ステップ 変更点 MavenMultiple Projects MavenSingle Project

1.

依存ライブラリを更新

必須

必須

2.

Snapshotリポジトリの削除

任意

任意

3.

共通ライブラリが管理するMavenプラグインの最新化

任意

任意

4.

maven-compiler-pluginの設定変更

推奨

推奨

5.

ブランクプロジェクトから一部ライブラリのバージョン定義を削除

任意

任意

6.

ojdbcドライバの変更

任意

任意

7.

Jodaに関する機能の削除

条件付き必須

条件付き必須

8.

不要な依存関係の削除

条件付き必須

条件付き必須

9.

JPAのログ出力の改善

推奨

推奨

10.

認可エラー時の例外変更への対応

条件付き必須

条件付き必須

11.

DefaultResponseErrorHandlerにメソッドが追加されたことに伴う対応

条件付き必須

条件付き必須

12.

開発者要素およびソース管理システム要素の追加に伴う対応

条件付き必須

条件付き必須

13.

@ModelAttributeに設定したセッションオブジェクトが存在しない場合の例外が変更されたことに伴う対応

条件付き必須

条件付き必須

14.

SOAP Web Serviceの動的プロキシの設定方法を変更

条件付き必須

条件付き必須

15.

logbackの非推奨な記述を修正

推奨

推奨

16.

Spring Framework 6.2 から非推奨となったAPIへの対応

推奨

推奨

17.

Spring Security 6.3 および 6.4 から非推奨となったAPIへの対応

推奨

推奨

18.

Apache HttpClient 5.4 から非推奨となったAPIへの対応

推奨

推奨

19.

ActiveMQ Client 2.32.0 から非推奨となったAPIへの対応

推奨

推奨

2.1. 依存ライブラリを更新

TERASOLUNA Server Framework for Java (5.x)の共通ライブラリと依存ライブラリを更新してください。
以下に、この手順により更新される代表的な依存ライブラリを示します。

ライブラリ名 更新前バージョン 更新後バージョン 備考

TERASOLUNA Server Framework for Java (5.x) Common Library

5.9.0.RELEASE

5.10.0.RELEASE

Spring Framework

6.1.3

6.2.1

Spring Data

3.2.2

3.4.1

Spring Security

6.2.1

6.4.2

Spring Test

6.1.3

6.2.1

MyBatis3

3.5.15

3.5.17

MyBatis3 Spring

3.0.3

3.0.4

Hibernate ORM

6.4.1.Final

6.6.4.Final

AOP

1.9.21

1.9.22.1

Logback

1.4.14

1.5.12

SLF4J

2.0.12

2.0.16

Jackson

2.15.3

2.18.2

Thymeleaf

3.1.2.RELEASE

3.1.3.RELEASE

Hibernate Validator

8.0.1.Final

8.0.2.Final

MapStruct

1.5.5.Final

1.6.3.Final

Apache Commons Lang

3.13.0

3.17.0

Java Time Jsptags

2.0.0

2.0.2

Apache Commons DBCP

2.10.0

2.12.0

Apache POI

5.2.5

5.3.0

Angus Mail

2.0.2

2.0.3

Apache HttpClient

5.2.3

5.4.2

Google Guava

33.0.0-jre

33.3.1-jre

Apache Commons IO

2.15.1

2.18.0

Lombok

1.18.30

1.18.36

Mockito

5.7.0

5.14.2

[手順が必要なケース]

この手順の適用は必須です。

2.1.1. オンライン環境でバージョン更新を実施する場合

この更新手順は、Mavenをオンライン環境で使用しており、multi blankまたはsingle blankを使用して作成したプロジェクト向けです。

POMファイルのversion5.10.0.RELEASEに修正してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

<!-- omitted -->
<parent>
    <groupId>org.terasoluna.gfw</groupId>
    <artifactId>terasoluna-gfw-parent</artifactId>
    <version>5.10.0.RELEASE</version>                    <!-- ### 修正箇所 ### -->
</parent>
<!-- omitted -->

2.1.2. オフライン環境でバージョン更新を実施する場合

この更新手順は、依存ライブラリをインターネットにつながる環境でダウンロードし、ダウンロードした依存ライブラリをオフライン環境のプロジェクトに展開することで、Mavenをオフライン環境で使用しているプロジェクト向けです。

以下に記載する手順を実施してください。

  1. オンライン環境

    1. ブランクプロジェクトを作成
      ガイドラインの記述を参考に、archetype:generateを実行し、5.10.0.RELEASEのブランクプロジェクトを作成してください。

    2. 依存関係の追加
      現行アプリのpom.xmlを確認し、アプリ独自で設定しているdependencyをブランクプロジェクトのpom.xmlに追加してください。
      アプリ独自で設定しているdependencyが不明な場合は、現行アプリで採用しているバージョンのブランクプロジェクトも作成して比較してください。

    3. ローカルリポジトリへのダウンロード
      以下のコマンドを実行し、依存ライブラリおよびMavenビルドに必要となるライブラリやプラグイン等をローカルリポジトリ(repositoryディレクトリ)へダウンロードしてください。

      mvn -P warpack clean install -Dmaven.repo.local=repository
      mvn dependency:go-offline -Dmaven.repo.local=repository
  2. オンライン環境⇒オフライン環境

    1. オフライン環境へのコピー
      repositoryをオフライン環境の「ユーザのホームディレクトリ/.m2」へコピーしてください。

  3. オフライン環境

    1. POMの修正
      オフライン環境のプロジェクトにて、オンライン環境でバージョン更新を実施する場合に記載されている内容と同様に、pom.xmlのバージョン表記を修正してください。

    2. ビルドの実行

      1. envモジュールのjarファイルをwarファイルに含めない場合
        以下のコマンドを実行してください。

        mvn -P warpack clean install

        xxx-env配下に移動し以下のコマンドを実行してください。

        mvn -P test-server clean package
      2. envモジュールのjarファイルをwarファイルに含める場合
        以下のコマンドを実行してください。

        mvn -P warpack-with-env,test-server clean package

2.2. Snapshotリポジトリの削除

予期せずSnapshotバージョンのライブラリを使用することを防ぐため、terasoluna-gfw-parentで定義していたSnapshot Repositoryを削除しました。

[手順が必要なケース]

この手順の適用は任意です。
Snapshot Repositoryが必要な場合は本手順を適用してください。

[修正方法]

本手順は、terasoluna-gfw-parentに設定されていたSnapshot Repositoryを使用していたユーザ向けです。
以下2つの対応方法について説明します。

  1. settings.xmlを修正する場合【推奨】

  2. pom.xmlを修正する場合

Note

settings.xmlにSnapshot Repositoryを追加することで、本番環境の資材で意図せずにSnapsohtバージョンが参照されることを防ぐことが可能です。

2.2.1. settings.xmlを修正する場合

settings.xmlにSnapshot用のリポジトリを追加します。

  • Windows : %SystemDrive%\Users\USERNAME\. m2\settings.xml

  • Linux : ~/.m2/settings.xml

settings.xmlのパスは適宜読み替えてください

<profiles>
  <profile>
    <id>snapshotRepository</id>
    <repositories>
      <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestone Repository</name>
        <url>https://repo.spring.io/milestone</url>
      </repository>
      <repository>
        <id>repository.maven.snapshot</id>
        <name>Maven Snapshot Repository</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
      </repository>
    </repositories>
  </profile>
</profiles>

<activeProfiles>
  <activeProfile>snapshotRepository</activeProfile>
</activeProfiles>

2.2.2. pom.xmlを修正する場合

この更新手順は、multi blankまたはsingle blankを使用して作成したプロジェクト向けです。

POMファイルに以下を追加してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

<!-- omitted -->
<repositories>
    <repository>
        <id>repository.spring.milestone</id>
        <name>Spring Milestone Repository</name>
        <url>https://repo.spring.io/milestone</url>
    </repository>
    <repository>
        <id>repository.maven.snapshot</id>
        <name>Maven Snapshot Repository</name>
        <url>https://oss.sonatype.org/content/repositories/snapshots</url>
    </repository>
</repositories>
<!-- omitted -->

2.3. 共通ライブラリが管理するMavenプラグインの最新化

共通ライブラリが管理するMavenプラグインの最新化を行いました。

最新化されたプラグインのバージョンについては、以下を参照してください。

[手順が必要なケース]

以下のケースに当てはまる場合、ビルドの挙動を確認して必要に応じて修正を行ってください。

  • 共通ライブラリが提供するプラグインのバージョンから変更したい場合

[修正方法]

プラグインごとに対応方法が異なるため、各公式リファレンスを参照して対応してください。

なお、terasoluna-gfw-parentで定義しているプラグインのバージョンを変更したい場合は、terasoluna-gfw-parentpom.xmlに定義されたプロパティを自アプリのpom.xmlで上書きします。 例えば Maven Dependency Plugin のバージョンを戻す場合は以下のように定義します。

  • ($YOUR_PROJECT/pom.xml)

<properties>
    <!-- omitted -->
    <org.apache.maven.plugins.maven-dependency-plugin.version>3.3.0</org.apache.maven.plugins.maven-dependency-plugin.version>  <!-- ### 追加箇所 ### -->
</properties>

2.4. maven-compiler-pluginの設定変更

maven-compiler-pluginwarNameを設定していましたが、finalNameを設定するように修正しました。
詳しくはApache Maven WAR Pluginを参照してください。

[手順が必要なケース]

この手順の適用を推奨します。

[修正方法]

POMファイルに記載しているmaven-compiler-pluginの設定を修正してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

<!-- omitted -->

<build>
    <finalName>${project.artifactId}</finalName> <!-- ### 追加箇所 ### -->
    <pluginManagement>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <configuration>
                    <warName>${project.artifactId}</warName> <!-- ### 削除箇所 ### -->
                    <parameters>true</parameters>
                    <!-- omitted -->
                </configuration>
            </plugin>
            <!-- omitted -->
        </plugins>
    </pluginManagement>
</build>

<!-- omitted -->

2.5. ブランクプロジェクトから一部ライブラリのバージョン定義を削除

ブランクプロジェクトで以下のライブラリについてバージョンを固定値で設定していましたが、terasoluna-dependenciesで管理するよう変更しました。

  • io.github.bonigarcia:webdrivermanager

  • org.mockito:dbunit

  • com.github.springtestdbunit:spring-test-dbunit

[手順が必要なケース]

本手順は任意です。
プロジェクト側でバージョン定義せずにTERASOLUNAが提供するライブラリのバージョンに従う場合は、バージョン定義を削除してください。

[修正方法]

POMファイルからバージョン定義情報を削除してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

    <!-- omitted -->
    <dependency>
        <groupId>io.github.bonigarcia</groupId>
        <artifactId>webdrivermanager</artifactId>
        <version>${webdrivermanager.version}</version> <!-- ### 削除箇所 ### -->
        <scope>test</scope>
    </dependency>
    <!-- omitted -->
    <dependency>
        <groupId>org.dbunit</groupId>
        <artifactId>dbunit</artifactId>
        <version>${dbunit.version}</version> <!-- ### 削除箇所 ### -->
        <scope>test</scope>
    </dependency>
    <dependency>
        <groupId>com.github.springtestdbunit</groupId>
        <artifactId>spring-test-dbunit</artifactId>
        <version>${spring.test.dbunit.version}</version> <!-- ### 削除箇所 ### -->
        <scope>test</scope>
    </dependency>
    <!-- omitted -->

<properties>
    <!-- omitted -->
    <dbunit.version>2.7.3</dbunit.version>                         <!-- ### 削除箇所 ### -->
    <spring.test.dbunit.version>1.3.0</spring.test.dbunit.version> <!-- ### 削除箇所 ### -->
    <webdrivermanager.version>5.6.3</webdrivermanager.version>     <!-- ### 削除箇所 ### -->
    <!-- omitted -->
</properties>

本手順を実施した場合、ライブラリのバージョンはそれぞれ以下のようになります。

アーティファクトID バージョン 備考

webdrivermanager

5.9.2

dbunit

2.8.0

spring-test-dbunit

1.3.0

2.6. ojdbcドライバの変更

Oracle公式のFAQ(What are the Oracle JDBC releases Vs JDK versions?)に記載されているOracle DatabaseとJDKの対応表に従い、TERASOLUNAが使用するojdbcをojdbc11からojdbc17に変更しました。

[手順が必要なケース]

本手順は任意です。
Oracle Databaseを使用している場合は、使用するJDKバージョンとデータベースのバージョンに合わせ、適切に設定してください。

[修正方法]

POMファイルに記載しているojdbcの設定を修正してください。
以下のソースコード例は、TERASOLUNAの試験環境で使用しているバージョンに合わせた例です。使用するJDKバージョンとデータベースのバージョンに合わせ、適切に設定してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

    <!-- omitted -->
    <dependency>
        <groupId>com.oracle.database.jdbc</groupId>
        <artifactId>ojdbc17</artifactId> <!-- ### 修正箇所 ### -->
        <version>${ojdbc.version}</version>
        <scope>runtime</scope>
    </dependency>
    <!-- omitted -->

<properties>
    <!-- omitted -->
    <ojdbc.version>23.6.0.24.10</ojdbc.version> <!-- ### 修正箇所 ### -->
    <!-- omitted -->
</properties>

2.7. Jodaに関する機能の削除

TERASOLUNA 5.8.1.RELEASEで非推奨としたJodaTimeに関する共通ライブラリの機能を削除しました。

[手順が必要なケース]

以下のケースに当てはまる場合、修正を行ってください。

  • terasoluna-gfw-jodatimeを使用している

Note

TERASOLUNA 5.9.0.RELEASEのブランクプロジェクトから生成したプロジェクトの場合は、JodaTimeに関するライブラリへの依存はありません。5.8.1.RELEASE以前のブランクプロジェクトをベースとし、まだJSR-310へ移行していない場合、本対応は必須です。

[修正方法]

TERASOLUNA 5.8.1.RELEASE のマイグレーションガイドを参考に、JodaTimeからJSR-310への移行を行ってください。

2.8. 不要な依存関係の削除

terasoluna-gfw-web-securityにJSPに関する不要なライブラリが設定されていたため、Servlet APIを設定するように修正しました。

  • 修正前

    <dependency>
        <groupId>org.apache.tomcat</groupId>
        <artifactId>tomcat-jsp-api</artifactId>
        <scope>provided</scope>
    </dependency>
  • 修正後

    <dependency>
        <groupId>jakarta.servlet</groupId>
        <artifactId>jakarta.servlet-api</artifactId>
        <scope>provided</scope>
    </dependency>

[手順が必要なケース]

JSPに関するライブラリはterasoluna-gfw-web-jspで定義されているため、本修正に伴う対応は特にありませんが、JSP関連でエラーが出る場合は依存関係の見直しを行ってください。

Note

terasoluna-gfw-web-jspは、JSPベースのブランクプロジェクトを生成した場合にデフォルトで設定されています。

2.9. JPAのログ出力の改善

logback.xmlにJPAのログを出力する設定がありましたが、JPAのパッケージ名の変更に伴いログが出力されていませんでした。そのため、ブランクプロジェクトのlogback.xmlの当該設定を修正しています。

[手順が必要なケース]

JPAを使用している場合、この手順の適用を推奨します。

[修正方法]

logback.xmlの設定を修正してください。

<!-- omitted -->

<logger name="org.hibernate.SQL" additivity="true">
    <level value="debug" />
</logger>
<logger name="org.hibernate.type"> <!-- ### 修正前 ### -->
<logger name="org.hibernate.orm.jdbc.bind"> <!-- ### 修正後 ### -->
    <level value="trace" />
</logger>
<logger name="org.hibernate.engine.transaction">
    <level value="debug" />
</logger>

<!-- omitted -->

logback.xmlの修正は本手順以外にlogbackの非推奨な記述を修正にも記載していますので、合わせて参照してください。

2.10. 認可エラー時の例外が変更されたことに伴う対応

Spring Security#14712で認可エラー時の例外がAccessDeniedExceptionからAuthorizationDeniedExceptionに変更されました。(AuthorizationDeniedExceptionAccessDeniedExceptionのサブクラスです。)

Spring SecurityのAccessDenidedHandlerで認可処理を実施させるために、SystemExceptionResolverの例外除外設定としてAccessDeniedExceptionを設定していた場合は、修正が必要です。

[手順が必要なケース]

以下のケースに当てはまる場合、必ず修正を行ってください。

  • 共通ライブラリが提供するSystemExceptionResolverの例外除外クラスにAccessDeniedExceptionを設定している

[修正方法]

以下の2パターンで対応が可能です。

  1. 除外設定クラスを変更する

  2. SystemExceptionResolvercheckSubClasstrueに設定する

ここでは1について説明します。
2についてはSystemExceptionResolverの機能拡張を参照してください。

2.10.1. JavaConfigの場合

SystemExceptionResolverに設定しているAccessDeniedException.classAuthorizationDeniedException.classに変更してください。

  • ($YOUR_MULTIPLE_PROJECT_WEB/src/main/java/xxxx/yyyy/zzzz/config/web/SpringMvcConfig.java)

  • ($YOUR_SINGLE_PROJECT/src/main/java/xxxx/yyyy/zzzz/config/web/SpringMvcConfig.java)

@Bean("systemExceptionResolver")
public SystemExceptionResolver systemExceptionResolver(ExceptionCodeResolver exceptionCodeResolver) {
    SystemExceptionResolver bean = new SystemExceptionResolver();
    // omitted
    bean.setExcludedExceptions(AccessDeniedException.class);        // ### 修正前 ###
    bean.setExcludedExceptions(AuthorizationDeniedException.class); // ### 修正後 ###
    // omitted
    return bean;
}

2.10.2. XMLConfigの場合

SystemExceptionResolverに設定しているAccessDeniedException.classAuthorizationDeniedException.classに変更してください。

  • ($YOUR_MULTIPLE_PROJECT_WEB/src/main/resources/META-INF/spring/spring-mvc.xml)

  • ($YOUR_SINGLE_PROJECT/src/main/resources/META-INF/spring/spring-mvc.xml)

<bean id="systemExceptionResolver"
    class="org.terasoluna.gfw.web.exception.SystemExceptionResolver">
    <!-- omitted -->
    <property name="excludedExceptions">
        <array>
            <value>org.springframework.security.access.AccessDeniedException</value>               <!-- ### 修正前 ### -->
            <value>org.springframework.security.authorization.AuthorizationDeniedException</value> <!-- ### 修正後 ### -->
        </array>
    </property>
    <!-- omitted -->
</bean>

2.11. DefaultResponseErrorHandlerにメソッドが追加されたことに伴う対応

Spring Framework#28958の対応で、DefaultResponseErrorHandlerhandleError(URI, HttpMethod, ClientHttpResponse)がオーバーライドされるようになりました。

public class DefaultResponseErrorHandler implements ResponseErrorHandler {

    // omitted

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        HttpStatusCode statusCode = response.getStatusCode();
        handleError(response, statusCode, null, null);
    }

    @Override
    public void handleError(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
        HttpStatusCode statusCode = response.getStatusCode();
        handleError(response, statusCode, url, method);
    }

    // omitted
}

この対応に伴い、DefaultResponseErrorHandlerを継承しhandleErrorメソッドをオーバーライドしていた場合は、handleError(ClientHttpResponse)handleError(URI, HttpMethod, ClientHttpResponse)の両方のメソッドをオーバーライドしないと、期待した動作にならない可能性があります。
DefaultResponseErrorHandlerに関する説明はRESTクライアント(HTTPクライアント)を参照してください。

[手順が必要なケース]

以下のケースに当てはまる場合、必要に応じて修正を行ってください。

  • DefaultResponseErrorHandlerを継承し、handleError(ClientHttpResponse)メソッドをオーバーライドしている

[修正方法]

handleError(URI, HttpMethod, ClientHttpResponse)を明示的に実装してください。以下の修正例は、バージョンアップ前と同様の挙動となる修正例です。修正の際は、アプリケーションで行っている実際のエラーハンドリングに合わせて適切に実装してください。

public class CustomErrorHandler extends DefaultResponseErrorHandler {

    @Override
    public void handleError(ClientHttpResponse response) throws IOException {
        // omitted
    }

    @Override
    public void handleError(URI url, HttpMethod method, ClientHttpResponse response) throws IOException {
        handleError(response);
    }
}

2.12. 開発者要素およびソース管理システム要素の追加

pom.xmlに記載するプロジェクト情報は、明示的に設定しない場合parentの情報が設定されます。TERASOLUNAが提供するブランクプロジェクトも、バージョンアップ前は開発者要素(developers)およびソース管理システム要素(scm)が設定されていなかったため、terasoluna-gfw-parentに記載された情報を参照していました。 そのため、開発者が明示的にプロジェクト情報を意識できるようにするため、ブランクプロジェクトに開発者要素およびソース管理システム要素を追加しました。

プロジェクト情報はユーザ側で適切に変更する必要があります。
詳しくは、プロジェクト情報を参照してください。

[手順が必要なケース]

以下のケースに当てはまる場合、必ず修正を行ってください。

  • プロジェクト側でdevelopers要素およびscm要素を設定していない

[修正方法]

POMファイルにdevelopers要素およびscm要素を追加し、プロジェクト側で適切に情報を設定してください。また、developers要素およびscm要素以外の要素についてもプロジェクト側で適切に設定する必要がある点に注意してください。
以下のコード例は、生成したブランクプロジェクトに設定されているプロジェクト情報です。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

<!-- omitted -->

<name>TERASOLUNA Server Framework for Java (5.x) Web Blank Multi Project (JavaConfig)(JSP)(MyBatis3)</name>
<description>Web Blank Multi Project (JavaConfig)(JSP)(MyBatis3) using TERASOLUNA Server Framework for Java (5.x)</description>
<url>http://terasoluna.org</url>
<inceptionYear>2014</inceptionYear>
<licenses>
    <license>
        <name>Apache License, Version 2.0</name>
        <url>http://www.apache.org/licenses/LICENSE-2.0.txt</url>
        <distribution>manual</distribution>
    </license>
</licenses>
<organization>
    <name>TERASOLUNA Framework Team</name>
    <url>http://terasoluna.org</url>
</organization>
<developers>
    <developer>
        <name>NTT DATA Group Corporation</name>
        <organization>NTT DATA Group Corporation</organization>
        <organizationUrl>http://terasolunaorg.github.io/</organizationUrl>
    </developer>
</developers>
<scm>
    <connection>scm:git:git://github.com/terasolunaorg/terasoluna-gfw-web-multi-blank.git</connection>
    <developerConnection>scm:git:ssh://github.com/terasolunaorg/terasoluna-gfw-web-multi-blank.git</developerConnection>
    <url>https://github.com/terasolunaorg/terasoluna-gfw-web-multi-blank</url>
</scm>

<!-- omitted -->

2.13. @ModelAttributeに設定したセッションオブジェクトが存在しない場合の例外が変更されたことに伴う対応

Spring Framework#33043の対応により、@ModelAttributeアノテーションで指定したオブジェクトがセッションに存在していない場合の例外が、HttpSessionRequiredExceptionからIllegalStateExceptionに変更されました。
TERASOLUNA 5.9.0.RELEASEではSystemExceptionResolverHttpSessionRequiredExceptionを設定してハンドリングする方法を説明していましたが、IllegalStateExceptionへの置き換えでは影響範囲が広いため、適切にハンドリングを実装する必要があります。

[手順が必要なケース]

以下のケースに当てはまる場合、必ず修正を行ってください。

  • SystemExceptionResolverHttpSessionRequiredException.classを設定している

[修正方法]

以下を対応してください。

  1. SystemExceptionResolverの設定からHttpSessionRequiredException.classを削除する

  2. IllegalStateExceptionをハンドリングし、HttpSessionRequiredExceptionが発生していた条件と同じである場合にSystemExceptionResolverでハンドリングしていた内容を実行するように修正する

TERASOLUNA 5.10.0.RELEASEではControllerAdviceを使用してハンドリングする方法を説明しています。
TERASOLUNA 5.9.0.RELEASEおよびTERASOLUNA 5.10.0.RELEASEを参照し、ハンドリングの実装を適切に修正してください。

ただし、TERASOLUNA 5.10.0.RELEASEで説明している内容は、例外メッセージを確認して処理を行っているため、例外メッセージの変更に伴いハンドリングできなくなる可能性があることに留意してください。

2.14. SOAP Web Serviceの動的プロキシの設定方法を変更

Spring Framework 6.0から、org.springframework.remotingパッケージが削除され、JAX-WSの連携機能が利用できなくなりました。(Spring#27422)
この対応に伴い、Springが提供していたJaxWsPortProxyFactoryBeanが利用できなくなるため、クライアントの動的プロキシの実装方法を変更する必要があります。

[手順が必要なケース]

以下の条件に該当する場合、修正が必要です。

  • SOAP Web Serviceの機能をアプリケーションで利用している

  • クライアントの動的プロキシにJaxWsPortProxyFactoryBeanを利用して、SOAPサーバーにアクセスを行っている

[修正方法]

クライアントの動的プロキシを、JaxWsPortProxyFactoryBeanからjakarta.xml.ws.Serviceを利用したBean定義に変更する必要があります。動的プロキシへの詳細な設定例はガイドラインを参照してください。

本対応に伴う注意
ガイドライン(5.7.3.RELEASE)では、JaxWsPortProxyFactoryBeanlookupServiceOnStartup属性をfalseに設定し、Bean初回使用時にWSDLを取得する方法を推奨していました。しかし、JAX-WSの実装にはlookupServiceOnStartup属性と同等の属性がないため、以下のいずれかの対応が必要です。

  • lookupServiceOnStartup属性にfalseを設定していた場合(推奨)
    WSDLファイルをクライアントに配備し、プロパティファイルにWSDLのファイルパスを指定する。

  • lookupServiceOnStartup属性にtrueを設定していた場合
    プロパティファイルにWSDLのURLを指定する。

jakarta.xml.ws.Serviceを利用したBean定義のサンプルコードを以下に示す。
なお、WDSLはwebservice.todoWebService.wsdlDocumentResourceプロパティで指定している。

2.14.1. JavaConfigの場合

  • ($YOUR_CLIENT_DOMAIN_PROJECT/src/main/java/com/example/config/app/XxxxDomainConfig.java)

@Value("${webservice.todoWebService.wsdlDocumentResource}")
private String wsdlDocumentResource;

@Bean("wsService")
public Service wsService() throws MalformedURLException {
    QName serviceName = new QName("http://example.com/todo", "TodoWebService");
    return Service.create(new URL(wsdlDocumentResource), serviceName);
}

@Bean("todoWebService")
public TodoWebService todoWebService() throws MalformedURLException {
    QName portName = new QName("http://example.com/todo", "TodoWebPort");
    return wsService().getPort(portName, TodoWebService.class);
}

2.14.2. XMLConfigの場合

  • ($YOUR_CLIENT_DOMAIN_PROJECT/src/main/resources/META-INF/spring/xxxx-domain.xml)

<bean id="wsService" class="jakarta.xml.ws.Service" factory-method="create">
    <constructor-arg type="java.net.URL" value="${webservice.todoWebService.wsdlDocumentResource}" />
    <constructor-arg>
        <bean class="javax.xml.namespace.QName">
            <constructor-arg type="java.lang.String" value="http://example.com/todo" />
            <constructor-arg type="java.lang.String" value="TodoWebService" />
        </bean>
    </constructor-arg>
</bean>

<bean id="todoWebService" class="com.example.ws.todo.TodoWebService" factory-bean="wsService" factory-method="getPort" >
    <constructor-arg>
        <bean class="javax.xml.namespace.QName">
            <constructor-arg type="java.lang.String" value="http://example.com/todo" />
            <constructor-arg type="java.lang.String" value="TodoWebPort" />
        </bean>
    </constructor-arg>
    <constructor-arg type="java.lang.Class" value="com.example.ws.todo.TodoWebService" />
</bean>

2.15. logbackの非推奨な記述を修正

ブランクプロジェクトのlogback.xmlではlevelタグを使用してログレベルを指定していたため、以下のWARNログが出力されていました。

WARN in ch.qos.logback.classic.joran.action.LevelAction - <level> element is deprecated. Near [level] on line xx
WARN in ch.qos.logback.classic.joran.action.LevelAction - Please use "level" attribute within <logger> or <root> elements instead.

[手順が必要なケース]

この手順の適用を推奨します。

[修正方法]

Logback configurationに記載されているとおり、loggerタグのlevel属性を指定するように修正してください。
なお、これ以外にも非推奨な記述方法や、推奨される記述方法があるため、Logback error messages and their meaningsを参照し適切に修正することを推奨します。

  • 修正前

    <logger name="xxxxxx.yyyyyy.zzzzzz">
        <level value="debug" />
    </logger>
  • 修正後

    <logger name="xxxxxx.yyyyyy.zzzzzz" level="debug" />

2.16. Spring Framework 6.2 から非推奨となったAPIへの対応

Spring Framework 6.2 から下記のAPIが非推奨となりました。

  • LobHandlerクラス

[手順が必要なケース]

以下のケースに当てはまる場合、必要に応じて修正を行ってください。

  • 上記の非推奨APIを利用している

Javadocを参考に、非推奨APIを代替APIに置き換えてください。

2.17. Spring Security 6.3 および 6.4 から非推奨となったAPIへの対応

Spring Security 6.3 および 6.4 から下記のAPIが非推奨となりました。

  • RoleHierarchyImpl#setHierarchy(String)メソッド

  • HeadersConfigurer#permissionsPolicy(Customizer<HeadersConfigurer<H>.PermissionsPolicyConfig>)メソッド

[手順が必要なケース]

以下のケースに当てはまる場合、必要に応じて修正を行ってください。

  • 上記の非推奨APIを利用している

[修正方法]

Javadocを参考に、非推奨APIを代替APIに置き換えてください。

2.18. Apache HttpClient 5.4 から非推奨となったAPIへの対応

Apache HttpClient 5.4 から下記のAPIが非推奨となりました。

  • PoolingHttpClientConnectionManagerBuilder#setSSLSocketFactory(LayeredConnectionSocketFactory)メソッド

[手順が必要なケース]

以下のケースに当てはまる場合、必要に応じて修正を行ってください。

  • 上記の非推奨APIを利用している

[修正方法]

公式ドキュメントやJavadocを参考に、非推奨APIを代替APIに置き換えてください。

2.19. ActiveMQ Client 2.32.0 から非推奨となったAPIへの対応

ActiveMQ Client 2.32.0 から下記のAPIが非推奨となりました。

  • ActiveMQConnectionFactory#setDeserializationWhiteList(String)メソッド

  • ActiveMQConnectionFactory#setDeserializationBlackList(String)メソッド

[手順が必要なケース]

以下のケースに当てはまる場合、必要に応じて修正を行ってください。

  • 上記の非推奨APIを利用している

[修正方法]

マイグレーションガイド及びJavadocを参考に、非推奨APIを代替APIに置き換えてください。

3. 共通ライブラリの機能追加

3.1. SystemExceptionResolverの機能拡張

共通ライブラリで提供しているSystemExceptionResolverに、以下2つの機能を追加しました。

  1. 指定した例外のサブクラスも対象とするオプションの追加

  2. causeに設定された例外を確認するオプションの追加

これらのオプションを使用することにより、より柔軟に例外ハンドリングを行うことが可能になります。なお、デフォルトの設定はfalseとなっているため、明示的に変更しない限り挙動に変更はありません。

[使用方法]

  1. 指定した例外のサブクラスも対象とする場合
    SystemExceptionResolver#setCheckSubClass(boolean)trueを設定してください。

  2. causeに設定された例外を確認する場合
    SystemExceptionResolver#setCheckCause(boolean)true を設定してください。

詳しい使い方はガイドライン(例外ハンドリング)を参照してください。

4. 共通ライブラリの機能修正

共通ライブラリが提供するJSP Tagのf:linkについてRFC 3986に準拠するよう修正しました。
この機能変更により、例えば以下のような#フラグメント付きのリンクが正しく生成されるようになります。

  • バージョンアップ前

    ${f:link("http://aaa/bbb#flagment")}
    →
    <a href="http://aaa/bbb">http://aaa/bbb</a>#flagment
  • バージョンアップ後

    ${f:link("http://aaa/bbb#flagment")}
    →
    <a href="http://aaa/bbb#flagment">http://aaa/bbb#flagment</a>

URLとして使用できる特殊記号についてはRFC 3986の「Reserved Characters」を参照してください。

[使用方法]

JSPでハイパーリンクを作成する際にご活用ください。

共通ライブラリではf:link以外にもJSP Tagを提供していますので、詳しくはガイドライン(共通ライブラリが提供するJSP Tag Library と EL Functions)を参照してください。

⚠️ **GitHub.com Fallback** ⚠️