2.1. TERASOLUNA Server Framework for Java (5.x)のスタック

2.1.1. TERASOLUNA Server Framework for Java (5.x)のSoftware Framework概要

TERASOLUNA Server Framework for Java (5.x)で使用するSoftware Frameworkは独自のフレームワークではなく、Spring Frameworkを中心としたOSSの組み合わせである。

../_images/introduction-software-framework.png

2.1.2. Software Frameworkの主な構成要素

TERASOLUNA Server Framework for Java (5.x)を構成するライブラリを以下に示す。

../_images/introduction-software-stack.png

2.1.2.1. DIコンテナ

DIコンテナとしてSpring Frameworkを利用する。

2.1.2.2. MVCフレームワーク

Web MVCフレームワークとしてSpring MVCを利用する。

2.1.2.3. O/R Mapper

本ガイドラインでは、以下のいずれかを想定している。

Note

MyBatisは正確には「SQL Mapper」であるが、本ガイドラインでは「O/R Mapper」に分類する。

Warning

どんなプロジェクトでもJPAを採用できるわけではない。”テーブルがほとんど正規化されていない”、”テーブルのカラム数が多すぎる”というテーブル設計がされている場合には、JPAの利用は難しい。

また、本ガイドラインではJPAの基本的な説明は行っておらず、JPA利用経験者がチーム内にいることが前提である。

2.1.2.4. View

ViewにはJSPを利用する。

Viewのレイアウトを共通化する場合は、

を利用する。

2.1.2.5. セキュリティ

認証・認可のフレームワークとしてSpring Securityを利用する。

Tip

Spring Security 3.2 から、認証・認可の仕組みの提供に加えて、 悪意のある攻撃者からWebアプリケーションを守るための仕組みが強化されている。

悪意のある攻撃者からWebアプリケーションを守るための仕組みについては、

を参照されたい。

2.1.2.6. バリデーション

2.1.2.7. ロギング

  • ロガーのAPIはSLF4Jを使用する。

    • ロガーの実装は、Logbackを利用する。

Tip

CVE-2021-42550に対応するため、Logback1.2.8以降のバージョンではモジュール構成が変更されDBAppenderに関する機能は別モジュールとなった。

logback-classicやlogback-accessのDBAppenderを使用した機能を利用するためには、pom.xmlに以下のアーティファクトを追加する必要がある。

  • ch.qos.logback.db:logback-classic-db:1.2.11.1

  • ch.qos.logback.db:logback-access-db:1.2.11.1

2.1.2.8. 共通ライブラリ

Note

単体テストで利用するOSSライブラリについては、本章とは別に単体テスト概要で解説している。

2.1.3. 利用するOSSのバージョン

version 5.7.3.RELEASEで利用するOSSの一覧を以下に示す。

Note

version 5.5.1.RELEASEより、Spring Bootが提供するspring-boot-dependencies<dependencyManagement>をインポートする構成を採用している。

spring-boot-dependencies<dependencyManagement>をインポートすることで、

  • Spring Frameworkが提供しているライブラリ

  • Spring Frameworkが依存しているOSSライブラリ

  • Spring Frameworkと相性のよいOSSライブラリ

への依存関係を解決しており、 TERASOLUNA Server Framework for Java (5.x)で使用するOSSのバージョンは、原則として、Spring Bootで管理されているバージョンに準ずる。

なお、version 5.7.3.RELEASEではSpring Boot 2.7.18に依存しており、管理されるライブラリはSpring Boot Reference Guide - Appendix F. Dependency versionsの通りとなる。

Type

GroupId

ArtifactId

Version

Spring Boot

Remarks

Spring

org.springframework

spring-aop

5.3.31

*

Spring

org.springframework

spring-aspects

5.3.31

*

Spring

org.springframework

spring-beans

5.3.31

*

Spring

org.springframework

spring-context

5.3.31

*

Spring

org.springframework

spring-context-support

5.3.31

*

Spring

org.springframework

spring-core

5.3.31

*

Spring

org.springframework

spring-expression

5.3.31

*

Spring

org.springframework

spring-jdbc

5.3.31

*

Spring

org.springframework

spring-orm

5.3.31

*

Spring

org.springframework

spring-oxm

5.3.31

*

Spring

org.springframework

spring-tx

5.3.31

*

Spring

org.springframework

spring-web

5.3.31

*

Spring

org.springframework

spring-webmvc

5.3.31

*

Spring

org.springframework

spring-jms

5.3.31

*

Spring

org.springframework

spring-messaging

5.3.31

*

Spring

org.springframework.data

spring-data-commons

2.7.18

*

Spring

org.springframework.security

spring-security-acl

5.7.11

*

Spring

org.springframework.security

spring-security-config

5.7.11

*

Spring

org.springframework.security

spring-security-core

5.7.11

*

Spring

org.springframework.security

spring-security-taglibs

5.7.11

*

Spring

org.springframework.security

spring-security-web

5.7.11

*

Spring

org.springframework.security

spring-security-oauth2-client

5.7.11

*

Spring

org.springframework.security

spring-security-oauth2-resource-server

5.7.11

*

Spring

org.springframework.security

spring-security-oauth2-jose

5.7.11

*

MyBatis3

org.mybatis

mybatis

3.5.15

*1

MyBatis3

org.mybatis

mybatis-spring

2.1.2

*1

JPA(Hibernate)

org.hibernate

hibernate-core

5.6.15.Final

*

*2

JPA(Hibernate)

org.springframework.data

spring-data-jpa

2.7.18

*

*2

DI

jakarta.inject

jakarta.inject-api

1.0.5

AOP

org.aspectj

aspectjrt

1.9.7

*

AOP

org.aspectj

aspectjweaver

1.9.7

*

ログ出力

ch.qos.logback

logback-core

1.3.14

*4

ログ出力

ch.qos.logback

logback-classic

1.3.14

*4

ログ出力

org.slf4j

slf4j-api

2.0.12

*4

JSON

com.fasterxml.jackson.core

jackson-databind

2.13.5

*

JSON

com.fasterxml.jackson.datatype

jackson-datatype-joda

2.13.5

*

JSON

com.fasterxml.jackson.datatype

jackson-datatype-jsr310

2.13.5

*

入力チェック

org.hibernate.validator

hibernate-validator

6.2.5.Final

*

Bean変換

commons-beanutils

commons-beanutils

1.9.4

Bean変換

com.github.dozermapper

dozer-core

6.5.2

Bean変換

com.github.dozermapper

dozer-spring4

6.5.2

*3

Bean変換

org.apache.commons

commons-lang3

3.12.0

*

日付操作

joda-time

joda-time

2.12.5

日付操作

joda-time

joda-time-jsptags

1.1.1

日付操作

org.jadira.usertype

usertype.core

6.0.1.GA

*2

コネクションプール

org.apache.commons

commons-dbcp2

2.9.0

*

Tiles

org.apache.tiles

tiles-core

3.0.8

Tiles

org.apache.tiles

tiles-jsp

3.0.8

ファイルダウンロード

com.github.librepdf

openpdf

1.3.35

ファイルダウンロード

org.apache.poi

poi-ooxml

5.2.5

E-mail送信(SMTP)

com.sun.mail

jakarta.mail

1.6.7

*

HTTP通信

org.apache.httpcomponents

httpclient

4.5.14

*

ユーティリティ

com.google.guava

guava

33.0.0-jre

ユーティリティ

commons-collections

commons-collections4

4.4

ユーティリティ

commons-io

commons-io

2.15.1

サーブレット

org.apache.taglibs

taglibs-standard-jstlel

1.2.5

コーディングサポート

org.projectlombok

lombok

1.18.30

*

  1. データアクセスに、MyBatis3を使用する場合に依存するライブラリ
  2. データアクセスに、JPAを使用する場合に依存するライブラリ
  3. Spring Framework 4.xに依存するが、ガイドラインで記述している内容においては、Spring Framework 5.xで動作する事を確認しているライブラリ
  4. Spring Bootで管理されているバージョンから、TERASOLUNA Server Framework for Java (5.x)で使用するバージョンを変更しているライブラリ

2.1.4. 共通ライブラリの構成要素

共通ライブラリは、TERASOLUNA Server Framework for Java (5.x)が含むSpring Ecosystem や、その他依存ライブラリでは足りない+αな機能を提供するライブラリである。 基本的には、このライブラリがなくてもTERASOLUNA Server Framework for Java (5.x)によるアプリケーション開発は可能であるが、”あると便利”な存在である。 また、提供している2種類の マルチプロジェクト構成のブランクプロジェクトおよび シングルプロジェクト構成のブランクプロジェクトの共通ライブラリの標準の組込状況は以下の通りである。

項番

プロジェクト名

概要

Javaソースコード有無

マルチプロジェクト構成のブランクプロジェクト組込

シングルプロジェクト構成のブランクプロジェクト組込

(1)

terasoluna-gfw-parent

依存ライブラリの管理とビルド用プラグインの推奨設定を提供する。

有*1

有*1

(2)

terasoluna-gfw-common-libraries

共通ライブラリのうち、Javaソースコードを含むプロジェクトの構成を定義する。依存関係としてpom.xmlに追加する必要はない。(5.2.0から追加)

(3)

terasoluna-gfw-dependencies

共通ライブラリのうち、依存関係定義のみを提供するプロジェクト(terasoluna-gfw-parent以外)の構成を定義する。依存関係としてpom.xmlに追加する必要はない。(5.2.0から追加)

(4)

terasoluna-gfw-common

Webに依存しない汎用的に使用できる機能を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-common-dependenciesをpom.xmlに追加する。

有*2

有*2

(5)

terasoluna-gfw-common-dependencies

terasoluna-gfw-commonプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。(5.2.0から追加)

(6)

terasoluna-gfw-jodatime

Joda Timeに依存する機能を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-jodatime-dependenciesをpom.xmlに追加する。(5.0.0から追加)

有*2

有*2

(7)

terasoluna-gfw-jodatime-dependencies

terasoluna-gfw-jodatimeプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。(5.2.0から追加)

(8)

terasoluna-gfw-web

Webアプリケーションを作成する場合に使用する機能を提供する。Viewに依存しない機能を集約している。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-web-dependenciesをpom.xmlに追加する。

有*2

有*2

(9)

terasoluna-gfw-web-dependencies

terasoluna-gfw-webプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。(5.2.0から追加)

(10)

terasoluna-gfw-web-jsp

ViewにJSPを採用するWebアプリケーションを作成する場合に使用する機能を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-web-jsp-dependenciesをpom.xmlに追加する。

有*2

有*2

(11)

terasoluna-gfw-web-jsp-dependencies

terasoluna-gfw-web-jspプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。(5.2.0から追加)

(12)

terasoluna-gfw-security-web

Spring Securityの拡張部品を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-security-web-dependenciesをpom.xmlに追加する。

有*2

有*2

(13)

terasoluna-gfw-security-web-dependencies

Spring Securityを使用する場合の依存関係定義(Web関連)と、terasoluna-gfw-security-webプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。(5.2.0から追加)

(14)

terasoluna-gfw-string

文字列処理に関連する機能を提供する。(5.1.0から追加)

(15)

terasoluna-gfw-codepoints

対象の文字列を構成するコードポイントがコードポイント集合に含まれることをチェックする機能を提供する。(5.1.0から追加)

無*3

無*3

(16)

terasoluna-gfw-validator

汎用的なBean Validationの制約アノテーションを追加して提供する。(5.1.0から追加)

(17)

terasoluna-gfw-security-core-dependencies

Spring Securityを使用する場合の依存関係定義(Web以外)を提供する。(5.2.0から追加)

(18)

terasoluna-gfw-mybatis3-dependencies

MyBatis3を使用する場合の依存関係定義を提供する。(5.2.0から追加)

有*4

有*4

(19)

terasoluna-gfw-jpa-dependencies

JPAを使用する場合の依存関係定義を提供する。(5.2.0から追加)

有*5

有*5

(20)

terasoluna-gfw-recommended-dependencies

Webに依存しない推奨ライブラリへの依存関係定義を提供する。

(21)

terasoluna-gfw-recommended-web-dependencies

Webに依存する推奨ライブラリへの依存関係定義を提供する。

  1. <dependency>要素ではないが、各プロジェクトの<parent>要素として組み込まれる。
  2. <dependency>要素ではないが、<dependency>要素からの推移的依存関係として組み込まれる。
  3. 使用するコードポイント集合に応じて複数のアーティファクトを提供している。詳細は 共通ライブラリから提供しているコードポイント集合クラス を参照されたい。
  4. データアクセスに、MyBatis3を使用する場合に標準で組み込まれる共通ライブラリ
  5. データアクセスに、JPAを使用する場合に標準で組み込まれる共通ライブラリ

Javaソースコードを含まないものは、ライブラリの依存関係のみ定義しているプロジェクトである。

なお、プロジェクトの依存関係は以下の通りである。

../_images/FrameworkStackProjectDependencies.png

Note

一部を除き、共通ライブラリにはプロジェクト名末尾に”dependencies”が付与されたプロジェクトが存在する。 (例えば、terasoluna-gfw-commonに対応するterasoluna-gfw-common-dependenciesなどである)

このようなプロジェクトでは、共通ライブラリへの依存関係定義の他に、利用を推奨するOSSライブラリへの依存関係定義を提供している為、 共通ライブラリを利用する際は”dependencies”が付与されたプロジェクトの方を、依存関係としてpom.xmlに追加することを推奨する。

2.1.4.1. terasoluna-gfw-common

terasoluna-gfw-commonは以下の部品を提供している。

分類

部品名

説明

例外ハンドリング

例外クラス

汎用的に使用できる例外クラスを提供する。

例外ロガー

アプリケーション内で発生した例外をログに出力するためのロガークラスを提供する。

例外コード

例外クラスに対応する例外コード(メッセージID)を解決するための仕組み(クラス)を提供する。

例外ログ出力インターセプタ

ドメイン層で発生した例外をログ出力するためのインターセプタクラス(AOP)を提供する。

システム時刻

システム時刻ファクトリ

システム時刻を取得するためのクラスを提供する。

コードリスト

コードリスト

コードリストを生成するためのクラスを提供する。

データベースアクセス(共通編)

クエリエスケープ

SQL及びJPQLにバインドする値のエスケープ処理を行うクラスを提供する。

シーケンサ

シーケンス値を取得するためのクラスを提供する。

2.1.4.2. terasoluna-gfw-string

terasoluna-gfw-stringは以下の部品を提供している。

分類

部品名

説明

文字列処理

半角全角変換

半角文字列と全角文字列のマッピングテーブルに基づき、入力文字列の半角文字を全角に変換する処理と全角文字を半角に変換する処理を行うクラスを提供する。

2.1.4.3. terasoluna-gfw-codepoints

terasoluna-gfw-codepointsは以下の部品を提供している。

分類

部品名

説明

文字列処理

コードポイントチェック

対象の文字列を構成するコードポイントが、定義されたコードポイント集合に含まれることをチェックするクラスを提供する。

入力チェック

コードポイントチェック用Bean Validation制約アノテーション

コードポイントチェックをBean Validationで行うための制約アノテーションを提供する。

2.1.4.4. terasoluna-gfw-validator

terasoluna-gfw-validatorは以下の部品を提供している。

分類

部品名

説明

入力チェック

バイト長チェック用Bean Validation制約アノテーション

入力文字列の文字コードにおけるバイト長が、指定した最大値以下であること、最小値以上であることのチェックをBean Validationで行うための制約アノテーションを提供する。

プロパティ値比較チェック用Bean Validation制約アノテーション

2つのプロパティ値の比較チェックをBean Validationで行うための制約アノテーションを提供する。

2.1.4.5. terasoluna-gfw-jodatime

terasoluna-gfw-jodatimeは以下の部品を提供している。

分類

部品名

説明

システム時刻

Joda Time用システム時刻ファクトリ

Joda TimeのAPIを利用してシステム時刻を取得するためのクラスを提供する。

2.1.4.6. terasoluna-gfw-web

terasoluna-gfw-webは以下の部品を提供している。

分類

部品名

説明

二重送信防止

トランザクショントークンチェック

リクエストの二重送信からWebアプリケーションを守るための仕組み(クラス)を提供する。

例外ハンドリング

例外ハンドラ

共通ライブラリが提供する例外ハンドリングの部品と連携するための例外ハンドラクラス(Spring MVC提供のクラスのサブクラス)を提供する。

例外ログ出力インターセプタ

Spring MVCの例外ハンドラがハンドリングした例外をログ出力するためのインターセプタクラス(AOP)を提供する。

コードリスト

コードリスト埋込インターセプタ

Viewからコードリストを取得できるようにするために、コードリストの情報をリクエストスコープに格納するためのインターセプタクラス(Spring MVC Interceptor)を提供する。

ファイルダウンロード

汎用ダウンロードView

ストリームから取得したデータを、ダウンロード用のストリームに出力するための抽象クラスを提供する。

ロギング

トラッキングID格納用サーブレットフィルタ

トレーサビリティを向上させるために、 クライアントから指定されたトラッキングIDを、ロガーのMDC(Mapped Diagnostic Context)、リクエストスコープ、レスポンスヘッダに設定するためのサーブレットフィルタクラスを提供する。 (クライアントからトラッキングIDの指定がない場合は、本クラスでトラッキングIDを生成する)

汎用MDC格納用サーブレットフィルタ

ロガーのMDCに任意の値を設定するための抽象クラスを提供する。

MDCクリア用サーブレットフィルタ

ロガーのMDCに格納されている情報をクリアするためのサーブレットフィルタクラスを提供する。

2.1.4.7. terasoluna-gfw-web-jsp

terasoluna-gfw-web-jspは以下の部品を提供している。

分類

部品名

説明

二重送信防止

トランザクショントークン出力用のJSPタグ

トランザクショントークンをhidden項目として出力するためのJSPタグライブラリを提供する。

ページネーション

ページネーションリンク表示用のJSPタグ

Spring Data Commons提供のクラスと連携してページネーションリンクを表示するためのJSPタグライブラリを提供する。

メッセージ管理

結果メッセージ表示用のJSPタグ

処理結果を表示するためのJSPタグライブラリを提供する。

EL Functions

XSS対策用EL関数

XSS対策用のEL関数を提供する。

URL用EL関数

URLエンコーディングなどのURL用のEL関数を提供する。

DOM変換用EL関数

DOM文字列に変換するためのEL関数を提供する。

ユーティリティEL関数

汎用的なユーティリティ処理を行うためのEL関数を提供する。

2.1.4.8. terasoluna-gfw-security-web

terasoluna-gfw-security-webは以下の部品を提供している。

分類

部品名

説明

ロギング

認証ユーザ名格納用サーブレットフィルタ

トレーサビリティを向上させるために、 認証ユーザ名をロガーのMDCに設定するためのサーブレットフィルタクラスを提供する。