Migration Guide 5.10.0_ja - terasolunaorg/terasoluna-gfw GitHub Wiki
- 1. 5.10.0での主な変更点
-
2. 5.9.0から5.10.0への移行手順
- 2.1. 依存ライブラリを更新
- 2.2. Snapshotリポジトリの削除
- 2.3. 共通ライブラリが管理するMavenプラグインの最新化
- 2.4. maven-compiler-pluginの設定変更
- 2.5. ブランクプロジェクトから一部ライブラリのバージョン定義を削除
- 2.6. ojdbcドライバの変更
- 2.7. Jodaに関する機能の削除
- 2.8. 不要な依存関係の削除
- 2.9. JPAのログ出力の改善
- 2.10. 認可エラー時の例外が変更されたことに伴う対応
- 2.11. DefaultResponseErrorHandlerにメソッドが追加されたことに伴う対応
- 2.12. 開発者要素およびソース管理システム要素の追加
- 2.13.
@ModelAttribute
に設定したセッションオブジェクトが存在しない場合の例外が変更されたことに伴う対応 - 2.14. SOAP Web Serviceの動的プロキシの設定方法を変更
- 2.15. logbackの非推奨な記述を修正
- 2.16. Spring Framework 6.2 から非推奨となったAPIへの対応
- 2.17. Spring Security 6.3 および 6.4 から非推奨となったAPIへの対応
- 2.18. Apache HttpClient 5.4 から非推奨となったAPIへの対応
- 2.19. ActiveMQ Client 2.32.0 から非推奨となったAPIへの対応
- 3. 共通ライブラリの機能追加
- 4. 共通ライブラリの機能修正
Note
|
5.9.0.RELEASEから5.10.0.RELEASEの移行手順として説明します。 |
Note
|
当移行ガイドと合わせて を一読し、Spring Frameworkの変更を把握することを推奨します。 |
5.10.0での主な変更点は以下の通りです。
-
主要なライブラリのバージョンを更新
-
TERASOLUNA BOMの新規作成
-
Joda Timeの削除
-
共通ライブラリの変更
-
ブランクプロジェクトの変更
-
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へ更新
TARASOLUNAが使用するOSSライブラリのバージョンを一元管理するため、TERASOLUNA BOMを新規作成しました。
今までterasoluna-gfw-parent
で定義していたOSSライブラリのバージョンをterasoluna-dependencies
に移動し、terasoluna-gfw-parent
はterasoluna-dependencies
をBOMとしてimportするように変更しました。
terasoluna-dependencies
はterasoluna-gfw-parent
から参照されるため、ユーザ側での変更は不要です。
-
共通ライブラリのライブラリ及びMavenプラグインのバージョンを変更
-
機能変更
-
機能削除
-
[#1363] Remove terasoluna-gfw-jodatime
-
-
ブランクプロジェクトのライブラリ及びMavenプラグインのバージョンを変更
-
[single#651] [multi#711] Update the version of maven-plugin
-
[single#659] [multi#719] Update the defined library version
-
-
機能改善
-
[single#645] [multi#705] Need to override <developers> and <scm> on pom.xml
-
-
logbackの設定変更
-
[single#616] [multi#676] Resolve logback warnings
-
[single#618] [multi#678] Update Hibernate log output settings
-
-
軽微な修正
-
[single#608] [multi#668] Fix how AntPathRequestMatcher is implemented
-
移行手順は、以下の通りです。
依存ライブラリを更新を実施後、必要に応じて手順を適用してください。
Note
|
凡例 |
ステップ | 変更点 | MavenMultiple Projects | MavenSingle Project |
---|---|---|---|
1. |
必須 |
必須 |
|
2. |
任意 |
任意 |
|
3. |
任意 |
任意 |
|
4. |
推奨 |
推奨 |
|
5. |
任意 |
任意 |
|
6. |
任意 |
任意 |
|
7. |
条件付き必須 |
条件付き必須 |
|
8. |
条件付き必須 |
条件付き必須 |
|
9. |
推奨 |
推奨 |
|
10. |
条件付き必須 |
条件付き必須 |
|
11. |
条件付き必須 |
条件付き必須 |
|
12. |
条件付き必須 |
条件付き必須 |
|
13. |
条件付き必須 |
条件付き必須 |
|
14. |
条件付き必須 |
条件付き必須 |
|
15. |
推奨 |
推奨 |
|
16. |
推奨 |
推奨 |
|
17. |
推奨 |
推奨 |
|
18. |
推奨 |
推奨 |
|
19. |
推奨 |
推奨 |
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 |
[手順が必要なケース]
この手順の適用は必須です。
この更新手順は、Mavenをオンライン環境で使用しており、multi blankまたはsingle blankを使用して作成したプロジェクト向けです。
POMファイルのversion
を5.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 -->
この更新手順は、依存ライブラリをインターネットにつながる環境でダウンロードし、ダウンロードした依存ライブラリをオフライン環境のプロジェクトに展開することで、Mavenをオフライン環境で使用しているプロジェクト向けです。
以下に記載する手順を実施してください。
-
オンライン環境
-
ブランクプロジェクトを作成
ガイドラインの記述を参考に、archetype:generate
を実行し、5.10.0.RELEASEのブランクプロジェクトを作成してください。 -
依存関係の追加
現行アプリのpom.xmlを確認し、アプリ独自で設定しているdependency
をブランクプロジェクトのpom.xmlに追加してください。
アプリ独自で設定しているdependencyが不明な場合は、現行アプリで採用しているバージョンのブランクプロジェクトも作成して比較してください。 -
ローカルリポジトリへのダウンロード
以下のコマンドを実行し、依存ライブラリおよびMavenビルドに必要となるライブラリやプラグイン等をローカルリポジトリ(repositoryディレクトリ)へダウンロードしてください。mvn -P warpack clean install -Dmaven.repo.local=repository mvn dependency:go-offline -Dmaven.repo.local=repository
-
-
オンライン環境⇒オフライン環境
-
オフライン環境へのコピー
repositoryをオフライン環境の「ユーザのホームディレクトリ/.m2」へコピーしてください。
-
-
オフライン環境
-
POMの修正
オフライン環境のプロジェクトにて、オンライン環境でバージョン更新を実施する場合に記載されている内容と同様に、pom.xmlのバージョン表記を修正してください。 -
ビルドの実行
-
envモジュールのjarファイルをwarファイルに含めない場合
以下のコマンドを実行してください。mvn -P warpack clean install
xxx-env配下に移動し以下のコマンドを実行してください。
mvn -P test-server clean package
-
envモジュールのjarファイルをwarファイルに含める場合
以下のコマンドを実行してください。mvn -P warpack-with-env,test-server clean package
-
-
予期せずSnapshotバージョンのライブラリを使用することを防ぐため、terasoluna-gfw-parent
で定義していたSnapshot Repositoryを削除しました。
[手順が必要なケース]
この手順の適用は任意です。
Snapshot Repositoryが必要な場合は本手順を適用してください。
[修正方法]
本手順は、terasoluna-gfw-parent
に設定されていたSnapshot Repositoryを使用していたユーザ向けです。
以下2つの対応方法について説明します。
-
settings.xmlを修正する場合【推奨】
-
pom.xmlを修正する場合
Note
|
settings.xmlにSnapshot Repositoryを追加することで、本番環境の資材で意図せずにSnapsohtバージョンが参照されることを防ぐことが可能です。 |
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>
この更新手順は、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 -->
共通ライブラリが管理するMavenプラグインの最新化を行いました。
最新化されたプラグインのバージョンについては、以下を参照してください。
[手順が必要なケース]
以下のケースに当てはまる場合、ビルドの挙動を確認して必要に応じて修正を行ってください。
-
共通ライブラリが提供するプラグインのバージョンから変更したい場合
[修正方法]
プラグインごとに対応方法が異なるため、各公式リファレンスを参照して対応してください。
なお、terasoluna-gfw-parent
で定義しているプラグインのバージョンを変更したい場合は、terasoluna-gfw-parent
のpom.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>
maven-compiler-plugin
にwarName
を設定していましたが、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 -->
ブランクプロジェクトで以下のライブラリについてバージョンを固定値で設定していましたが、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 |
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>
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への移行を行ってください。
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
|
|
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の非推奨な記述を修正にも記載していますので、合わせて参照してください。
Spring Security#14712で認可エラー時の例外がAccessDeniedException
からAuthorizationDeniedException
に変更されました。(AuthorizationDeniedException
はAccessDeniedException
のサブクラスです。)
Spring SecurityのAccessDenidedHandler
で認可処理を実施させるために、SystemExceptionResolverの例外除外設定としてAccessDeniedExceptionを設定していた場合は、修正が必要です。
[手順が必要なケース]
以下のケースに当てはまる場合、必ず修正を行ってください。
-
共通ライブラリが提供する
SystemExceptionResolver
の例外除外クラスにAccessDeniedException
を設定している
[修正方法]
以下の2パターンで対応が可能です。
-
除外設定クラスを変更する
-
SystemExceptionResolver
のcheckSubClass
をtrue
に設定する
ここでは1について説明します。
2についてはSystemExceptionResolverの機能拡張を参照してください。
SystemExceptionResolver
に設定しているAccessDeniedException.class
をAuthorizationDeniedException.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;
}
SystemExceptionResolver
に設定しているAccessDeniedException.class
をAuthorizationDeniedException.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>
Spring Framework#28958の対応で、DefaultResponseErrorHandler
でhandleError(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);
}
}
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 -->
Spring Framework#33043の対応により、@ModelAttribute
アノテーションで指定したオブジェクトがセッションに存在していない場合の例外が、HttpSessionRequiredException
からIllegalStateException
に変更されました。
TERASOLUNA 5.9.0.RELEASEではSystemExceptionResolver
にHttpSessionRequiredException
を設定してハンドリングする方法を説明していましたが、IllegalStateException
への置き換えでは影響範囲が広いため、適切にハンドリングを実装する必要があります。
[手順が必要なケース]
以下のケースに当てはまる場合、必ず修正を行ってください。
-
SystemExceptionResolver
にHttpSessionRequiredException.class
を設定している
[修正方法]
以下を対応してください。
-
SystemExceptionResolver
の設定からHttpSessionRequiredException.class
を削除する -
IllegalStateException
をハンドリングし、HttpSessionRequiredException
が発生していた条件と同じである場合にSystemExceptionResolver
でハンドリングしていた内容を実行するように修正する
TERASOLUNA 5.10.0.RELEASEではControllerAdvice
を使用してハンドリングする方法を説明しています。
TERASOLUNA 5.9.0.RELEASEおよびTERASOLUNA 5.10.0.RELEASEを参照し、ハンドリングの実装を適切に修正してください。
ただし、TERASOLUNA 5.10.0.RELEASEで説明している内容は、例外メッセージを確認して処理を行っているため、例外メッセージの変更に伴いハンドリングできなくなる可能性があることに留意してください。
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)では、JaxWsPortProxyFactoryBean
のlookupServiceOnStartup
属性をfalse
に設定し、Bean初回使用時にWSDLを取得する方法を推奨していました。しかし、JAX-WSの実装にはlookupServiceOnStartup
属性と同等の属性がないため、以下のいずれかの対応が必要です。
-
lookupServiceOnStartup
属性にfalse
を設定していた場合(推奨)
WSDLファイルをクライアントに配備し、プロパティファイルにWSDLのファイルパスを指定する。 -
lookupServiceOnStartup
属性にtrue
を設定していた場合
プロパティファイルにWSDLのURLを指定する。
jakarta.xml.ws.Service
を利用したBean定義のサンプルコードを以下に示す。
なお、WDSLはwebservice.todoWebService.wsdlDocumentResource
プロパティで指定している。
-
($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);
}
-
($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>
ブランクプロジェクトの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" />
Spring Framework 6.2 から下記のAPIが非推奨となりました。
-
LobHandler
クラス
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
上記の非推奨APIを利用している
Javadocを参考に、非推奨APIを代替APIに置き換えてください。
Spring Security 6.3 および 6.4 から下記のAPIが非推奨となりました。
-
RoleHierarchyImpl#setHierarchy(String)
メソッド -
HeadersConfigurer#permissionsPolicy(Customizer<HeadersConfigurer<H>.PermissionsPolicyConfig>)
メソッド
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
上記の非推奨APIを利用している
[修正方法]
Javadocを参考に、非推奨APIを代替APIに置き換えてください。
Apache HttpClient 5.4 から下記のAPIが非推奨となりました。
-
PoolingHttpClientConnectionManagerBuilder#setSSLSocketFactory(LayeredConnectionSocketFactory)
メソッド
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
上記の非推奨APIを利用している
[修正方法]
公式ドキュメントやJavadocを参考に、非推奨APIを代替APIに置き換えてください。
ActiveMQ Client 2.32.0 から下記のAPIが非推奨となりました。
-
ActiveMQConnectionFactory#setDeserializationWhiteList(String)
メソッド -
ActiveMQConnectionFactory#setDeserializationBlackList(String)
メソッド
[手順が必要なケース]
以下のケースに当てはまる場合、必要に応じて修正を行ってください。
-
上記の非推奨APIを利用している
[修正方法]
マイグレーションガイド及びJavadocを参考に、非推奨APIを代替APIに置き換えてください。
共通ライブラリで提供しているSystemExceptionResolver
に、以下2つの機能を追加しました。
-
指定した例外のサブクラスも対象とするオプションの追加
-
cause
に設定された例外を確認するオプションの追加
これらのオプションを使用することにより、より柔軟に例外ハンドリングを行うことが可能になります。なお、デフォルトの設定はfalse
となっているため、明示的に変更しない限り挙動に変更はありません。
[使用方法]
-
指定した例外のサブクラスも対象とする場合
SystemExceptionResolver#setCheckSubClass(boolean) にtrue
を設定してください。 -
causeに設定された例外を確認する場合
SystemExceptionResolver#setCheckCause(boolean) にtrue
を設定してください。
詳しい使い方はガイドライン(例外ハンドリング)を参照してください。
共通ライブラリが提供する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)を参照してください。