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の組み合わせである。
2.1.2. Software Frameworkの主な構成要素¶
TERASOLUNA Server Framework for Java (5.x)を構成するライブラリを以下に示す。
2.1.2.3. O/R Mapper¶
本ガイドラインでは、以下のいずれかを想定している。
- MyBatis 3.3
- Spring Frameworkとの連携ライブラリとして、MyBatis-Springを使用する。
- JPA2.1
- プロバイダは、Hibernate 4.3を使用する。
Note
MyBatisは正確には「SQL Mapper」であるが、本ガイドラインでは「O/R Mapper」に分類する。
Warning
どんなプロジェクトでもJPAを採用できるわけではない。”テーブルがほとんど正規化されいない”、”テーブルのカラム数が多すぎる”というテーブル設計がされている場合に、JPAの利用は難しい。
また、本ガイドラインではJPAの基本的な説明は行っておらず、JPA利用経験者がチーム内にいることが前提である。
2.1.2.5. セキュリティ¶
認証・認可のフレームワークとしてSpring Securityを利用する。
Tip
Spring Security 3.2 から、認証・認可の仕組みの提供に加えて、 悪意のある攻撃者からWebアプリケーションを守るための仕組みが強化されている。
悪意のある攻撃者からWebアプリケーションを守るための仕組みについては、
を参照されたい。
2.1.2.6. バリデーション¶
- 単項目チェックにはBeanValidation 1.1を利用する。
- 実装は、Hibernate Validator 5.1を利用する。
- 相関チェックにはBean Validation、もしくはSpring Validationを利用する。
- 使い分けについては入力チェックを参照されたい。
2.1.3. 利用するOSSのバージョン¶
version 5.0.2.RELEASEで利用するOSSの一覧を以下に示す。
Tip
version 5.0.0.RELEASEより、
Spring IO platformの<dependencyManagement>
をインポートする構成を採用している。
Spring IO platformの<dependencyManagement>
をインポートすることで、
- Spring Frameworkが提供しているライブラリ
- Spring Frameworkが依存しているOSSライブラリ
- Spring Frameworkと相性のよいOSSライブラリ
への依存関係を解決しており、 TERASOLUNA Server Framework for Java (5.x)で使用するOSSのバージョンは、原則として、Spring IO platformの定義に準じている。
なお、version 5.0.2.RELEASEで指定しているSpring IO platformのバージョンは、1.1.5.RELEASEである。
Type | GroupId | ArtifactId | Version | Spring IO platform | Remarks |
---|---|---|---|---|---|
Spring | org.springframework | spring-aop | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-aspects | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-beans | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-context | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-context-support | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-core | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-expression | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-jdbc | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-orm | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-tx | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-web | 4.1.9.RELEASE | * | |
Spring | org.springframework | spring-webmvc | 4.1.9.RELEASE | * | |
Spring | org.springframework.data | spring-data-commons | 1.9.4.RELEASE | * | |
Spring | org.springframework.security | spring-security-acl | 3.2.9.RELEASE | * | |
Spring | org.springframework.security | spring-security-config | 3.2.9.RELEASE | * | |
Spring | org.springframework.security | spring-security-core | 3.2.9.RELEASE | * | |
Spring | org.springframework.security | spring-security-taglibs | 3.2.9.RELEASE | * | |
Spring | org.springframework.security | spring-security-web | 3.2.9.RELEASE | * | |
MyBatis3 | org.mybatis | mybatis | 3.3.0 | *1 | |
MyBatis3 | org.mybatis | mybatis-spring | 1.2.3 | *1 | |
JPA(Hibernate) | antlr | antlr | 2.7.7 | * | *2 |
JPA(Hibernate) | dom4j | dom4j | 1.6.1 | * | *2 |
JPA(Hibernate) | org.hibernate | hibernate-core | 4.3.11.Final | * | *2 |
JPA(Hibernate) | org.hibernate | hibernate-entitymanager | 4.3.11.Final | * | *2 |
JPA(Hibernate) | org.hibernate.common | hibernate-commons-annotations | 4.0.5.Final | * | *2 *4 |
JPA(Hibernate) | org.hibernate.javax.persistence | hibernate-jpa-2.1-api | 1.0.0.Final | * | *2 *4 |
JPA(Hibernate) | org.javassist | javassist | 3.18.1-GA | * | *2 |
JPA(Hibernate) | org.jboss | jandex | 1.1.0.Final | * | *2 *4 |
JPA(Hibernate) | org.jboss.logging | jboss-logging-annotations | 1.2.0.Final | * | *2 *4 *5 |
JPA(Hibernate) | org.jboss.spec.javax.transaction | jboss-transaction-api_1.2_spec | 1.0.0.Final | * | *2 *4 |
JPA(Hibernate) | org.springframework.data | spring-data-jpa | 1.7.4.RELEASE | * | *2 |
DI | javax.inject | javax.inject | 1 | * | |
AOP | aopalliance | aopalliance | 1 | * | |
AOP | org.aspectj | aspectjrt | 1.8.7 | * | |
AOP | org.aspectj | aspectjweaver | 1.8.7 | * | |
ログ出力 | ch.qos.logback | logback-classic | 1.1.3 | * | |
ログ出力 | ch.qos.logback | logback-core | 1.1.3 | * | *4 |
ログ出力 | org.lazyluke | log4jdbc-remix | 0.2.7 | ||
ログ出力 | org.slf4j | jcl-over-slf4j | 1.7.13 | * | |
ログ出力 | org.slf4j | slf4j-api | 1.7.13 | * | |
JSON | com.fasterxml.jackson.core | jackson-annotations | 2.4.6 | * | |
JSON | com.fasterxml.jackson.core | jackson-core | 2.4.6 | * | |
JSON | com.fasterxml.jackson.core | jackson-databind | 2.4.6 | * | |
JSON | com.fasterxml.jackson.datatype | jackson-datatype-joda | 2.4.6 | * | |
入力チェック | javax.validation | validation-api | 1.1.0.Final | * | |
入力チェック | org.hibernate | hibernate-validator | 5.1.3.Final | * | |
入力チェック | org.jboss.logging | jboss-logging | 3.1.3.GA | * | *4 |
入力チェック | com.fasterxml | classmate | 1.0.0 | * | *4 |
Bean変換 | commons-beanutils | commons-beanutils | 1.9.2 | * | *3 |
Bean変換 | net.sf.dozer | dozer | 5.5.1 | *3 | |
Bean変換 | net.sf.dozer | dozer-spring | 5.5.1 | *3 | |
Bean変換 | org.apache.commons | commons-lang3 | 3.3.2 | * | *3 |
日付操作 | joda-time | joda-time | 2.5 | * | |
日付操作 | joda-time | joda-time-jsptags | 1.1.1 | *3 | |
日付操作 | org.jadira.usertype | usertype.core | 3.2.0.GA | *2 | |
日付操作 | org.jadira.usertype | usertype.spi | 3.2.0.GA | *2 | |
コネクションプール | org.apache.commons | commons-dbcp2 | 2.0.1 | * | *3 |
コネクションプール | org.apache.commons | commons-pool2 | 2.2 | * | *3 |
Tiles | commons-digester | commons-digester | 2.1 | * | *3 |
Tiles | org.apache.tiles | tiles-api | 3.0.5 | * | *3 |
Tiles | org.apache.tiles | tiles-core | 3.0.5 | * | *3 |
Tiles | org.apache.tiles | tiles-jsp | 3.0.5 | * | *3 |
Tiles | org.apache.tiles | tiles-servlet | 3.0.5 | * | *3 |
Tiles | org.apache.tiles | tiles-template | 3.0.5 | * | *3 *4 |
Tiles | org.apache.tiles | tiles-autotag-core-runtime | 1.1.0 | * | *3 *4 |
Tiles | org.apache.tiles | tiles-request-servlet | 1.0.6 | * | *3 *4 |
Tiles | org.apache.tiles | tiles-request-api | 1.0.6 | * | *3 |
Tiles | org.apache.tiles | tiles-request-jsp | 1.0.6 | * | *3 *4 |
ユーティリティ | com.google.guava | guava | 17.0 | * | |
ユーティリティ | commons-collections | commons-collections | 3.2.2 | * | *3 |
ユーティリティ | commons-io | commons-io | 2.4 | * | *3 |
サーブレット | org.apache.taglibs | taglibs-standard-jstlel | 1.2.5 | * | |
サーブレット | org.apache.taglibs | taglibs-standard-spec | 1.2.5 | * | *4 |
サーブレット | org.apache.taglibs | taglibs-standard-impl | 1.2.5 | * | *4 |
- データアクセスに、MyBatis3を使用する場合に依存するライブラリ
- データアクセスに、JPAを使用する場合に依存するライブラリ
- 共通ライブラリに依存しないが、TERASOLUNA Server Framework for Java (5.x)でアプリケーションを開発する場合に、利用することを推奨しているライブラリ
- Spring IO platformでサポートしているライブラリが個別に依存しているライブラリ(Spring IO platformとしては依存関係の管理は行っていないライブラリ)
- Spring IO platformで適用されるバージョンが、BetaやRC(Release Candidate)であるライブラリ(TERASOLUNA Server Framework for Java (5.x)側でGAのバージョンを明示的に指定しているライブラリ)
2.1.4. 共通ライブラリの構成要素¶
共通ライブラリは、TERASOLUNA Server Framework for Java (5.x)が含むSpring Ecosystem や、その他依存ライブラリでは足りない+αな機能を提供するライブラリである。 基本的には、このライブラリがなくてもTERASOLUNA Server Framework for Java (5.x)によるアプリケーション開発は可能であるが、”あると便利”な存在である。
項番 | プロジェクト名 | 概要 | Javaソースコード有無 |
---|---|---|---|
(1) | terasoluna-gfw-common | Webに依存しない汎用的に使用できる機能と依存関係定義を提供する。 | 有 |
(2) | terasoluna-gfw-jodatime | Joda Timeに依存する機能と依存関係定義を提供する。 | 有 |
(3) | terasoluna-gfw-web | Webアプリケーションを作成する場合に使用する機能と依存関係定義を提供する。 | 有 |
(4) | terasoluna-gfw-mybatis3 | MyBatis3を使用する場合の依存関係定義を提供する。 | 無 |
(5) | terasoluna-gfw-jpa | JPAを使用する場合の依存関係定義を提供する。 | 無 |
(6) | terasoluna-gfw-security-core | Spring Securityを使用する場合の依存関係定義(Web以外)を提供する。 | 無 |
(7) | terasoluna-gfw-security-web | Spring Securityを使用する場合の依存関係定義(Web関連)とSpring Securityの拡張部品を提供する。 | 有 |
(8) | terasoluna-gfw-recommended-dependencies | Webに依存しない推奨ライブラリへの依存関係定義を提供する。 | 無 |
(9) | terasoluna-gfw-recommended-web-dependencies | Webに依存する推奨ライブラリへの依存関係定義を提供する。 | 無 |
(10) | terasoluna-gfw-parent | 依存ライブラリの管理とビルド用プラグインの推奨設定を提供する。 | 無 |
Javaソースコードを含まないものは、ライブラリの依存関係のみ定義しているプロジェクトである。
なお、プロジェクトの依存関係は以下の通りである。
2.1.4.1. terasoluna-gfw-common¶
terasoluna-gfw-commonは以下の部品を提供している。
分類 | 部品名 | 説明 |
---|---|---|
例外ハンドリング | 例外クラス | 汎用的に使用できる例外クラスを提供する。 |
例外ロガー | プリケーション内で発生した例外をログに出力するためのロガークラスを提供する。 | |
例外コード | 例外クラスに対応する例外コード(メッセージID)を解決するための仕組み(クラス)を提供する。 | |
例外ログ出力インターセプタ | ドメイン層で発生した例外をログ出力するためのインターセプタクラス(AOP)を提供する。 | |
システム時刻 | システム時刻ファクトリ | システム時刻を取得するためのクラスを提供する。 |
コードリスト | コードリスト | コードリストを生成するためのクラスを提供する。 |
データベースアクセス(共通編) | クエリエスケープ | SQL及びJPQLにバインドする値のエスケープ処理を行うクラスを提供する。 |
シーケンサ | シーケンス値を取得するためのクラスを提供する。 |
2.1.4.2. terasoluna-gfw-jodatime¶
terasoluna-gfw-jodatimeは以下の部品を提供している。
分類 | 部品名 | 説明 |
---|---|---|
システム時刻 | Joda Time用システム時刻ファクトリ | Joda TimeのAPIを利用してシステム時刻を取得するためのクラスを提供する。 |
2.1.4.3. 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に格納されている情報をクリアするためのサーブレットフィルタクラスを提供する。 | |
ページネーション | ページネーションリンク表示用の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.4. terasoluna-gfw-security-web¶
terasoluna-gfw-security-webは以下の部品を提供している。
分類 | 部品名 | 説明 |
---|---|---|
ロギング | 認証ユーザ名格納用サーブレットフィルタ | トレーサビリティを向上させるために、 認証ユーザ名をロガーのMDCに設定するためのサーブレットフィルタクラスを提供する。 |
認証 | リダイレクト先の指定が可能な認証成功ハンドラ | 認証が成功した際に、Webアプリケーション内の任意のパスにリダイレクトするためのハンドラクラスを提供する。 |