\ |framework_name|\のスタック
================================================================================

.. only:: html

.. contents:: 目次
  :depth: 3
  :local:

|

\ |framework_name|\のSoftware Framework概要
--------------------------------------------------------------------------------

\ |framework_name|\で使用するSoftware Frameworkは独自のフレームワークではなく、\ :url_spring_io:`Spring Framework </projects/spring-framework>`\ を中心としたOSSの組み合わせである。

.. figure:: images_FrameworkStack/introduction-software-framework.png
  :width: 95%

|

Software Frameworkの主な構成要素
--------------------------------------------------------------------------------

\ |framework_name|\を構成するライブラリを以下に示す。

.. figure:: images_FrameworkStack/introduction-software-stack.png
  :width: 95%

|

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

* \ :url_spring_reference:`Spring Framework </core/beans.html>`\  \ |spring_major_minor_version|\

|

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

* \ :url_spring_reference:`Spring MVC</web/webmvc.html>`\  \ |spring_major_minor_version|\

|

O/R Mapper
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

* \ :url_mybatis3:`MyBatis</>`\  \ |mybatis_major_minor_version|\

  * Spring Frameworkとの連携ライブラリとして、\ :url_mybatis_spring:`MyBatis-Spring <>`\ を使用する。

* \ :url_jakarta_persistence:`JPA<>`\  \ |jakarta_persistence_version|\

  * プロバイダは、\ :url_hibernate_orm:`Hibernate</userguide/html_single/Hibernate_User_Guide.html>`\  \ |hibernate_orm_major_minor_version|\ を使用する。

.. note::

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

.. warning::

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

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

|

View
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

* JSP
* Thymeleaf

.. tip:: 

  \ |framework_name|\ 5.7 まではViewのレイアウトの共通化として\ :url_tiles:`Apache Tiles <>`\ を利用していたが、Jakarta EE 9 以降のライブラリバージョンが存在しておらず、代替ライブラリも存在していない。そのため、\ |framework_name|\ 5.8以降では、JSPのレイアウトの共通化は行っていない。  

  画面レイアウトを行いたい場合は、Thymeleafの使用を検討されたい。


|

セキュリティ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
認証・認可のフレームワークとしてSpring Securityを利用する。

* \ :url_spring_io:`Spring Security</projects/spring-security>`\  \ |spring_security_major_minor_version|\

.. tip::

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

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

  * \ :doc:`../Security/CSRF`\
  * \ :doc:`../Security/LinkageWithBrowser`\

  を参照されたい。

|

バリデーション
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* 単項目チェックには\ :url_jakarta_validation:`Bean Validation<>`\  \ |jakarta_validation_version|\ を利用する。

  * 実装は、\ :url_hibernate_validator:`Hibernate Validator</reference/en-US/html_single/>`\  \ |hibernate_validator_major_minor_version|\ を利用する。

* 相関チェックには\ :url_jakarta_validation:`Bean Validation<>`\   \ |jakarta_validation_version|\ 、もしくは\ :url_spring_reference:`Spring Validation </core/validation/validator.html>`\ を利用する。

  * 使い分けについては\ :doc:`../ArchitectureInDetail/WebApplicationDetail/Validation`\ を参照されたい。

|

ロギング
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

* ロガーのAPIは\ :url_slf4j:`SLF4J </>`\ を使用する。

  * ロガーの実装は、\ :url_logback:`Logback </>`\ を利用する。

.. tip::

  \ :url_cve:`CVE-2021-42550 <?name=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

|

共通ライブラリ
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
* \ :url_gfw:`共通ライブラリ <>`\
* 詳細は\ :ref:`frameworkstack_common_library`\ を参照されたい。

.. note::

  単体テストで利用するOSSライブラリについては、本章とは別に\ :doc:`../UnitTest/UnitTestOverview`\ で解説している。

|

.. _frameworkstack_using_oss_version:

利用するOSSのバージョン
--------------------------------------------------------------------------------

version \ |release|\で利用するOSSの一覧を以下に示す。

.. note::

  version 5.5.1.RELEASEより、\ :url_spring_io:`Spring Boot </projects/spring-boot>`\ が提供する\ :url_spring_boot_reference:`spring-boot-dependencies </reference/using/build-systems.html#using.build-systems.dependency-management>`\ の\ ``<dependencyManagement>``\ をインポートする構成を採用している。

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

  * Spring Frameworkが提供しているライブラリ
  * Spring Frameworkが依存しているOSSライブラリ
  * Spring Frameworkと相性のよいOSSライブラリ

  への依存関係を解決しており、\ |framework_name|\で使用するOSSのバージョンは、原則として、Spring Bootで管理されているバージョンに準ずる。

  なお、version \ |release|\では\ :url_spring_boot_reference:`Spring Boot <>`\  \ |boot_version|\ に依存しており、管理されるライブラリは\ :url_spring_boot_reference:`Spring Boot Reference Guide - Appendix F. Dependency versions </appendix/dependency-versions/coordinates.html>`\ の通りとなる。

.. tabularcolumns:: |p{0.15\linewidth}|p{0.27\linewidth}|p{0.25\linewidth}|p{0.15\linewidth}|p{0.05\linewidth}|p{0.08\linewidth}|
.. list-table::
  :header-rows: 1
  :stub-columns: 1
  :widths: 15 25 25 15 5 8

  * - Type
    - GroupId
    - ArtifactId
    - Version
    - Spring Boot
    - Remarks
  * - Spring
    - org.springframework
    - spring-aop
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-aspects
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-beans
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-context
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-context-support
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-core
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-expression
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-jdbc
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-orm
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-oxm
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-tx
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-web
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-webmvc
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-jms
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework
    - spring-messaging
    - |spring_version|
    - \*
    -
  * - Spring
    - org.springframework.data
    - spring-data-commons
    - |spring_data_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-acl
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-config
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-core
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-taglibs
    - |spring_security_version|
    - \*
    - \*1
  * - Spring
    - org.springframework.security
    - spring-security-web
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-oauth2-client
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-oauth2-resource-server
    - |spring_security_version|
    - \*
    -
  * - Spring
    - org.springframework.security
    - spring-security-oauth2-jose
    - |spring_security_version|
    - \*
    -
  * - MyBatis3
    - org.mybatis
    - mybatis
    - |mybatis_version|
    -
    - \*3
  * - MyBatis3
    - org.mybatis
    - mybatis-spring
    - |mybatis_spring_version|
    -
    - \*3
  * - JPA(Hibernate)
    - org.hibernate.orm
    - hibernate-core
    - |hibernate_orm_version|
    - \*
    - \*4
  * - JPA(Hibernate)
    - org.springframework.data
    - spring-data-jpa
    - |spring_data_version|
    - \*
    - \*4
  * - DI
    - jakarta.inject
    - jakarta.inject-api
    - |jakarta_inject_version|
    - \*
    -
  * - AOP
    - org.aspectj
    - aspectjrt
    - |aspectj_version|
    - \*
    -
  * - AOP
    - org.aspectj
    - aspectjweaver
    - |aspectj_version|
    - \*
    -
  * - ログ出力
    - ch.qos.logback
    - logback-classic
    - |logback_version|
    - \*
    -
  * - ログ出力
    - org.slf4j
    - slf4j-api
    - |slf4j_version|
    - \*
    -
  * - JSON
    - com.fasterxml.jackson.core
    - jackson-databind
    - |jackson_databind_version|
    - \*
    -
  * - JSON
    - com.fasterxml.jackson.datatype
    - jackson-datatype-jsr310
    - |jackson_databind_version|
    - \*
    -
  * - Thymeleaf
    - org.thymeleaf
    - thymeleaf
    - |thymeleaf_version|
    - \*
    - \*2
  * - Thymeleaf
    - org.thymeleaf
    - thymeleaf-spring6
    - |thymeleaf_version|
    - \*
    - \*2
  * - Thymeleaf
    - org.thymeleaf.extras
    - thymeleaf-extras-springsecurity6
    - |thymeleaf_version|
    - \*
    - \*2
  * - 入力チェック
    - org.hibernate.validator
    - hibernate-validator
    - |hibernate_validator_version|
    - \*
    -
  * - Bean変換
    - commons-beanutils
    - commons-beanutils
    - |commons_beanutils_version|
    -
    -
  * - Bean変換
    - org.mapstruct
    - mapstruct
    - |mapstruct_version|
    -
    -
  * - Bean変換
    - org.apache.commons
    - commons-lang3
    - |commons_lang3_version|
    - \*
    -
  * - 日付操作
    - net.sargue
    - java-time-jsptags
    - |java_time_jsptags_version|
    -
    -
  * - コネクションプール
    - org.apache.commons
    - commons-dbcp2
    - |commons_dbcp_version|
    - \*
    -
  * - ファイルダウンロード
    - com.github.librepdf
    - openpdf
    - |openpdf_version|
    -
    -
  * - ファイルダウンロード
    - org.apache.poi
    - poi-ooxml
    - |poi_version|
    -
    -
  * - E-mail送信(SMTP)
    - org.eclipse.angus
    - jakarta.mail
    - |jakarta_mail_version|
    - \*
    -
  * - HTTP通信
    - org.apache.httpcomponents.client5
    - httpclient5
    - |httpclient_version|
    - \*
    -
  * - ユーティリティ
    - com.google.guava
    - guava
    - |guava_version|
    -
    -
  * - ユーティリティ
    - org.apache.commons
    - commons-collections4
    - |commons_collections_version|
    -
    -
  * - ユーティリティ
    - commons-io
    - commons-io
    - |commons_io_version|
    -
    -
  * - サーブレット
    - org.glassfish.web
    - jakarta.servlet.jsp.jstl
    - |glassfish_jstl_version|
    - \*
    - \*1
  * - コーディングサポート
    - org.projectlombok
    - lombok
    - |lombok_version|
    - \*
    -

#. | Viewに、JSPを使用する場合に依存するライブラリ
#. | Viewに、Thymeleafを使用する場合に依存するライブラリ
#. | データアクセスに、MyBatis3を使用する場合に依存するライブラリ
#. | データアクセスに、JPAを使用する場合に依存するライブラリ

|

.. _frameworkstack_terasoluna-dependencies:

TERASOLUNA Framework For Java (5.x) Dependencies
--------------------------------------------------------------------------------

| TERASOLUNA Framework For Java (5.x) Dependencies (\ :url_terasoluna_dependencies:`terasoluna-dependencies <>`\ )は\ |framework_name|\ で使用するOSSライブラリのバージョンを一元管理するためのBOM(Project Object Model)プロジェクトである。
| terasoluna-dependenciesでは以下を定義している。

- \ |framework_name|\ が参照する\ :url_spring_boot_reference:`spring-boot-dependencies </reference/using/build-systems.html#using.build-systems.dependency-management>`\ のバージョン
- spring-boot-dependenciesが管理しているライブラリ以外で\ |framework_name|\ が参照するライブラリのバージョン

| ブランクプロジェクトを利用して開発を行う場合、terasoluna-dependenciesは、後述するterasoluna-gfw-parentによってimportされるため、アプリケーション側でpom.xmlに定義を追加する必要はない。また、terasoluna-dependenciesで管理されているライブラリのバージョンをそのまま利用する場合は、アプリケーション側のpom.xmlにおいて、ライブラリのバージョンを定義する必要はない。

| terasoluna-dependenciesで定義しているライブラリとそのバージョンについては、\ :url_terasoluna_dependencies_wiki:`Managed Dependency Coordinates <#managed-dependency-coordinates>`\ で公開している。
| なお、プロジェクトの依存関係については\ :ref:`frameworkstack_dependencies`\ を参照されたい。

|

.. _frameworkstack_common_library:

共通ライブラリの構成要素
--------------------------------------------------------------------------------

| \ :url_gfw:`共通ライブラリ <>`\ は、\ |framework_name|\ が含むSpring Ecosystem や、その他依存ライブラリでは足りない+αな機能を提供するライブラリである。
| 基本的には、このライブラリがなくても\ |framework_name|\ によるアプリケーション開発は可能であるが、"あると便利"な存在である。
| また、提供している2種類の \ :url_multi_blank:`マルチプロジェクト構成のブランクプロジェクト <>`\ および \ :url_single_blank:`シングルプロジェクト構成のブランクプロジェクト <>`\ の共通ライブラリの標準の組込状況は以下の通りである。なお、マルチプロジェクト構成およびシングルプロジェクト構成の共通ライブラリの標準の組込状況は同じである。

.. tabularcolumns:: |p{0.05\linewidth}|p{0.15\linewidth}|p{0.40\linewidth}|p{0.10\linewidth}|p{0.10\linewidth}|p{0.10\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 5 15 40 20 10 10
  :class: longtable

  * - 項番
    - プロジェクト名
    - 概要
    - Javaソースコード有無
    - ViewにJSPを使用したブランクプロジェクトの組込
    - ViewにThymeleafを使用したブランクプロジェクトの組込
  * - \ (1)
    - terasoluna-gfw-parent
    - 依存ライブラリの管理とビルド用プラグインの推奨設定を提供する。
    - 無
    - 有*1
    - 有*1
  * - \ (2)
    - terasoluna-gfw-common-libraries
    - 共通ライブラリのうち、Javaソースコードを含むプロジェクトの構成を定義する。依存関係としてpom.xmlに追加する必要はない。
    - 無
    - 無
    - 無
  * - \ (3)
    - terasoluna-gfw-dependencies
    - 共通ライブラリのうち、依存関係定義のみを提供するプロジェクト(terasoluna-gfw-parent以外)の構成を定義する。依存関係としてpom.xmlに追加する必要はない。
    - 無
    - 無
    - 無
  * - \ (4)
    - terasoluna-gfw-common
    - Webに依存しない汎用的に使用できる機能を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-common-dependenciesをpom.xmlに追加する。
    - 有
    - 有*2
    - 有*2
  * - \ (5)
    - terasoluna-gfw-common-dependencies
    - terasoluna-gfw-commonプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (6)
    - terasoluna-gfw-web
    - Webアプリケーションを作成する場合に使用する機能を提供する。Viewに依存しない機能を集約している。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-web-dependenciesをpom.xmlに追加する。
    - 有
    - 有*2
    - 有*2
  * - \ (7)
    - terasoluna-gfw-web-dependencies
    - terasoluna-gfw-webプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (8)
    - terasoluna-gfw-web-jsp
    - ViewにJSPを採用するWebアプリケーションを作成する場合に使用する機能を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-web-jsp-dependenciesをpom.xmlに追加する。
    - 有
    - 有*2
    - 無
  * - \ (9)
    - terasoluna-gfw-web-jsp-dependencies
    - terasoluna-gfw-web-jspプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 無
  * - \ (10)
    - terasoluna-gfw-security-web
    - Spring Securityの拡張部品を提供する。本ライブラリを利用する場合は、依存関係としてterasoluna-gfw-security-web-dependenciesをpom.xmlに追加する。
    - 有
    - 有*2
    - 有*2
  * - \ (11)
    - terasoluna-gfw-security-web-dependencies
    - Spring Securityを使用する場合の依存関係定義(Web関連)と、terasoluna-gfw-security-webプロジェクトが提供する機能を使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (12)
    - terasoluna-gfw-string
    - 文字列処理に関連する機能を提供する。
    - 有
    - 無
    - 無
  * - \ (13)
    - terasoluna-gfw-codepoints
    - 対象の文字列を構成するコードポイントがコードポイント集合に含まれることをチェックする機能を提供する。
    - 有
    - 無*3
    - 無*3
  * - \ (14)
    - terasoluna-gfw-validator
    - 汎用的なBean Validationの制約アノテーションを追加して提供する。
    - 有
    - 無
    - 無
  * - \ (15)
    - terasoluna-gfw-security-core-dependencies
    - Spring Securityを使用する場合の依存関係定義(Web以外)を提供する。
    - 無
    - 有
    - 有
  * - \ (16)
    - terasoluna-gfw-mybatis3-dependencies
    - MyBatis3を使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (17)
    - terasoluna-gfw-jpa-dependencies
    - JPAを使用する場合の依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (18)
    - terasoluna-gfw-recommended-dependencies
    - Webに依存しない推奨ライブラリへの依存関係定義を提供する。
    - 無
    - 有
    - 有
  * - \ (19)
    - terasoluna-gfw-recommended-web-dependencies
    - Webに依存する推奨ライブラリへの依存関係定義を提供する。
    - 無
    - 有
    - 有

#. | \ ``<dependency>``\ 要素ではないが、各プロジェクトの\ ``<parent>``\ 要素として組み込まれる。
#. | \ ``<dependency>``\ 要素ではないが、\ ``<dependency>``\ 要素からの推移的依存関係として組み込まれる。
#. | 使用するコードポイント集合に応じて複数のアーティファクトを提供している。詳細は\ :ref:`StringProcessingHowToUseCodePointsClasses`\ を参照されたい。

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

プロジェクトの依存関係は\ :ref:`frameworkstack_dependencies`\ を参照されたい。

|

terasoluna-gfw-common
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/ExceptionHandling`\
    - 例外クラス
    - 汎用的に使用できる例外クラスを提供する。
  * -
    - 例外ロガー
    - アプリケーション内で発生した例外をログに出力するためのロガークラスを提供する。
  * -
    - 例外コード
    - 例外クラスに対応する例外コード(メッセージID)を解決するための仕組み(クラス)を提供する。
  * -
    - 例外ログ出力インターセプタ
    - ドメイン層で発生した例外をログ出力するためのインターセプタクラス(AOP)を提供する。
  * - \ :doc:`../ArchitectureInDetail/GeneralFuncDetail/SystemDate`\
    - システム時刻ファクトリ
    - JSR-310 Date and Time APIを利用してシステム時刻を取得するためのクラスを提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/Codelist`\
    - コードリスト
    - コードリストを生成するためのクラスを提供する。
  * - \ :doc:`../ArchitectureInDetail/DataAccessDetail/DataAccessCommon`\
    - クエリエスケープ
    - SQL及びJPQLにバインドする値のエスケープ処理を行うクラスを提供する。
  * -
    - シーケンサ
    - シーケンス値を取得するためのクラスを提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/MessageManagement`\
    - メッセージ管理機能
    - 結果メッセージを格納するクラスを提供する。

|

terasoluna-gfw-string
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/GeneralFuncDetail/StringProcessing`\
    - 半角全角変換
    - 半角文字列と全角文字列のマッピングテーブルに基づき、入力文字列の半角文字を全角に変換する処理と全角文字を半角に変換する処理を行うクラスを提供する。

|

terasoluna-gfw-codepoints
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/GeneralFuncDetail/StringProcessing`\
    - コードポイントチェック
    - 対象の文字列を構成するコードポイントが、定義されたコードポイント集合に含まれることをチェックするクラスを提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/Validation`\
    - コードポイントチェック用Bean Validation制約アノテーション
    - コードポイントチェックをBean Validationで行うための制約アノテーションを提供する。

|

terasoluna-gfw-validator
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/Validation`\
    - バイト長チェック用Bean Validation制約アノテーション
    - 入力文字列の文字コードにおけるバイト長が、指定した最大値以下であること、最小値以上であることのチェックをBean Validationで行うための制約アノテーションを提供する。
  * -
    - プロパティ値比較チェック用Bean Validation制約アノテーション
    - 2つのプロパティ値の比較チェックをBean Validationで行うための制約アノテーションを提供する。

|

terasoluna-gfw-web
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/DoubleSubmitProtection`\
    - トランザクショントークンチェック
    - リクエストの二重送信からWebアプリケーションを守るための仕組み(クラス)を提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/ExceptionHandling`\
    - 例外ハンドラ
    - 共通ライブラリが提供する例外ハンドリングの部品と連携するための例外ハンドラクラス(Spring MVC提供のクラスのサブクラス)を提供する。
  * -
    - 例外ログ出力インターセプタ
    - Spring MVCの例外ハンドラがハンドリングした例外をログ出力するためのインターセプタクラス(AOP)を提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/Codelist`\
    - コードリスト埋込インターセプタ
    - Viewからコードリストを取得できるようにするために、コードリストの情報をリクエストスコープに格納するためのインターセプタクラス(Spring MVC Interceptor)を提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/FileDownload`\
    - 汎用ダウンロードView
    - ストリームから取得したデータを、ダウンロード用のストリームに出力するための抽象クラスを提供する。
  * - \ :doc:`../ArchitectureInDetail/GeneralFuncDetail/Logging`\
    - トラッキングID格納用サーブレットフィルタ
    - トレーサビリティを向上させるために、
      クライアントから指定されたトラッキングIDを、ロガーのMDC(Mapped Diagnostic Context)、リクエストスコープ、レスポンスヘッダに設定するためのサーブレットフィルタクラスを提供する。
      (クライアントからトラッキングIDの指定がない場合は、本クラスでトラッキングIDを生成する)
  * -
    - 汎用MDC格納用サーブレットフィルタ
    - ロガーのMDCに任意の値を設定するための抽象クラスを提供する。
  * -
    - MDCクリア用サーブレットフィルタ
    - ロガーのMDCに格納されている情報をクリアするためのサーブレットフィルタクラスを提供する。

|

terasoluna-gfw-web-jsp
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/DoubleSubmitProtection`\
    - トランザクショントークン出力用のJSPタグ
    - トランザクショントークンをhidden項目として出力するためのJSPタグライブラリを提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/Pagination`\
    - ページネーションリンク表示用のJSPタグ
    - Spring Data Commons提供のクラスと連携してページネーションリンクを表示するためのJSPタグライブラリを提供する。
  * - \ :doc:`../ArchitectureInDetail/WebApplicationDetail/MessageManagement`\
    - 結果メッセージ表示用のJSPタグ
    - 処理結果を表示するためのJSPタグライブラリを提供する。
  * - \ :ref:`TagLibAndELFunctionsOverviewELFunctions`\
    - XSS対策用EL関数
    - XSS対策用のEL関数を提供する。
  * -
    - URL用EL関数
    - URLエンコーディングなどのURL用のEL関数を提供する。
  * -
    - DOM変換用EL関数
    - DOM文字列に変換するためのEL関数を提供する。
  * -
    - ユーティリティEL関数
    - 汎用的なユーティリティ処理を行うためのEL関数を提供する。

|

terasoluna-gfw-security-web
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

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

.. tabularcolumns:: |p{0.20\linewidth}|p{0.30\linewidth}|p{0.50\linewidth}|
.. list-table::
  :header-rows: 1
  :widths: 20 30 50

  * - 分類
    - 部品名
    - 説明
  * - :doc:`../ArchitectureInDetail/GeneralFuncDetail/Logging`
    - 認証ユーザ名格納用サーブレットフィルタ
    - トレーサビリティを向上させるために、
      認証ユーザ名をロガーのMDCに設定するためのサーブレットフィルタクラスを提供する。

|

.. _frameworkstack_Appendix:

Appendix
--------------------------------------------------------------------------------

.. _frameworkstack_dependencies:

プロジェクトの依存関係
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^

\ :url_terasoluna_dependencies:`terasoluna-dependencies <>`\ および\ :url_gfw:`terasoluna-gfw <>`\ の依存関係を以下に示す。

.. figure:: images_FrameworkStack/terasoluna-dependencies.png
  :width: 75%

| 一部のプロジェクトを除き、共通ライブラリにはプロジェクト名末尾に"dependencies"が付与されたプロジェクトが存在する。(例えば、terasoluna-gfw-commonに対応するterasoluna-gfw-common-dependenciesなどである)
| このようなプロジェクトでは、共通ライブラリへの依存関係定義の他に、利用を推奨するOSSライブラリへの依存関係定義を提供しているため、共通ライブラリを利用する際は"dependencies"が付与されたプロジェクトの方を依存関係としてpom.xmlに追加することを推奨する。

|

.. raw:: latex

  \newpage
