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

5.7.3から5.7.4への移行ガイド

目次
Note

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

1. 5.7.4での主な変更点

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

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

  • TERASOLUNA BOMの新規作成

  • 共通ライブラリの変更

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

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

  • Spring Framework 5.3.39へ更新

  • Spring Security 5.7.13へ更新

  • MyBatis 3.5.17へ更新

1.2. TARASOLUNA BOMの新規作成

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

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

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

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

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

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

    • [#1386] update to maven-dependency-plugin.

  • 機能変更

    • [#1326] Add options to SystemExceptionResoluver

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

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

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

2. 5.7.3から5.7.4への移行手順

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

Note

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

ステップ 変更点 MavenMultiple Projects MavenSingle Project

1.

依存ライブラリを更新

必須

必須

2.

Snapshotリポジトリの削除

任意

任意

3.

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

任意

任意

4.

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

任意

任意

5.

ojdbcドライバの変更

任意

任意

6.

Servletバージョンの更新

推奨

推奨

7.

不要な依存関係の削除

条件付き必須

条件付き必須

8.

JPAのログ出力の改善

推奨

推奨

9.

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

任意

任意

10.

logbackの非推奨な記述を修正

推奨

推奨

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

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

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

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

5.7.3.RELEASE

5.7.4.RELEASE

Spring Framework

5.3.31

5.3.39

Spring Security

5.7.11

5.7.13

MyBatis3

3.5.15

3.5.17

SLF4J

2.0.12

2.0.16

Joda Time

2.12.5

2.13.0

Apache POI

5.2.5

5.3.0

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

[手順が必要なケース]

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

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

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

プロジェクトのPOMファイルの version5.7.4.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.7.4.RELEASE</version>                    <!-- ### 修正箇所 ### -->
</parent>
<!-- omitted -->

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

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

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

  1. オンライン環境

    1. ブランクプロジェクトを作成
      ガイドラインの記述を参考に、archetype:generateを実行し、5.7.4.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 Dependency Pluginプラグインを更新しました。

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

[手順が必要なケース]

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

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

[修正方法]

仕様の詳細はMaven Dependency Pluginを参照して下さい。

なお、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.2.0</org.apache.maven.plugins.maven-dependency-plugin.version>  <!-- ### 修正箇所 ### -->
    <!-- omitted -->
</properties>

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

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

  • io.github.bonigarcia:webdrivermanager

  • org.apache.httpcomponents.client5:httpclient5

  • 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>
    <dependency>
        <groupId>org.apache.httpcomponents.client5</groupId>
        <artifactId>httpclient5</artifactId>
        <version>${httpclient5.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>     <!-- ### 削除箇所 ### -->
    <httpclient5.version>5.2.3</httpclient5.version>               <!-- ### 削除箇所 ### -->
    <!-- omitted -->
</properties>

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

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

webdrivermanager

5.9.2

httpclient5

5.2.3

dbunit

2.8.0

spring-test-dbunit

1.3.0

2.5. ojdbcドライバの変更

Oracle公式のFAQ(What are the Oracle JDBC releases Vs JDK versions?)に記載されているOracle DatabaseとJDKの対応表に従い、TERASOLUNAが使用するojdbcのバージョンを更新しました。

[手順が必要なケース]

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

[修正方法]

下記POMファイルに記載しているojdbcの設定を修正してください。

  • ($YOUR_MULTIPLE_PROJECT_ROOT/pom.xml)

  • ($YOUR_SINGLE_PROJECT/pom.xml)

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

  • JDK8、JDK11の場合

<properties>
    <!-- omitted -->
    <ojdbc.version>23.6.0.24.10</ojdbc.version> <!-- ### 修正箇所 ### -->
    <!-- omitted -->
</properties>
  • JDK17、JDK21の場合

    <!-- 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.6. Servletバージョンの更新

ブランクプロジェクトではServletバージョン3.0を使用していましたが、Tomcat 9.0.xがサポートするServletバージョン4.0に合わせて、バージョンを更新しました。

[手順が必要なケース]

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

[修正方法]

web.xml のスキーマで定義されているServlet3.0の記述を、Servlet4.0に修正してください。

  • web.xml

<?xml version="1.0" encoding="UTF-8"?>
<!-- ### 修正前 ### -->
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
    http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
    version="3.0">
<!-- ### 修正前 ### -->
<!-- ### 修正後 ### -->
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
     http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    version="4.0">
<!-- ### 修正後 ### -->

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

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.8. 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.9. 開発者要素およびソース管理システム要素の追加

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.10. 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" />

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

3.1. SystemExceptionResolverの機能拡張

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

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

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

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

[使用方法]

それぞれの機能を利用する場合、以下のように SystemExceptionResolver の設定で checkCause および checkSubClasstrue に設定してください。
詳細はガイドラインの原因例外の除外対象確認の有無およびサブクラスの除外対象確認の有無を参照してください。

  • spring-mvc.xml

<bean class="org.terasoluna.gfw.web.exception.SystemExceptionResolver">
    <!-- omitted -->
    <property name="excludedExceptions">
        <array>
            <value>com.example.common.CauseException</value>
        </array>
    </property>
    <property name="checkCause" value="true" />            <!-- ### 追加箇所 ### -->
    <property name="checkSubClass" value="true" />         <!-- ### 追加箇所 ### -->
    <!-- omitted -->
</bean>

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

4.1. f:linkの機能修正

共通ライブラリが提供する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>

[使用方法]

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

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

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