2.1. TERASOLUNA Global Frameworkのスタック

Caution

本バージョンの内容は既に古くなっています。最新のガイドラインはこちらからご参照ください。

2.1.1. TERASOLUNA Global FrameworkのSoftware Framework概要

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

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

2.1.2. Software Frameworkの主な構成要素

TERASOLUNA Global Frameworkを構成するライブラリを以下に示す。

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

2.1.2.1. DIコンテナ

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

2.1.2.2. MVCフレームワーク

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

2.1.2.3. O/R Mapper

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

Todo

今後、MyBatis 3にも対応する予定である。

Note

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

Warning

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

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

2.1.2.4. View

ViewにはJSPを利用する。

JSPをTiles化する場合は、

を利用する。

2.1.2.5. セキュリティ

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

Todo

今後、Spring Security 3.2にupdateする予定である。

2.1.2.6. バリデーション

2.1.2.7. ロギング

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

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

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

Type GroupId ArtifactId Version Remarks
Spring org.springframework spring-aop 3.2.10.RELEASE  
Spring org.springframework spring-aspects 3.2.10.RELEASE  
Spring org.springframework spring-beans 3.2.10.RELEASE  
Spring org.springframework spring-context 3.2.10.RELEASE  
Spring org.springframework spring-context-support 3.2.10.RELEASE  
Spring org.springframework spring-core 3.2.10.RELEASE  
Spring org.springframework spring-expression 3.2.10.RELEASE  
Spring org.springframework spring-jdbc 3.2.10.RELEASE  
Spring org.springframework spring-orm 3.2.10.RELEASE  
Spring org.springframework spring-tx 3.2.10.RELEASE  
Spring org.springframework spring-web 3.2.10.RELEASE  
Spring org.springframework spring-webmvc 3.2.10.RELEASE  
Spring org.springframework.data spring-data-commons 1.6.4.RELEASE  
Spring org.springframework.security spring-security-acl 3.1.4.RELEASE  
Spring org.springframework.security spring-security-config 3.1.4.RELEASE  
Spring org.springframework.security spring-security-core 3.1.4.RELEASE  
Spring org.springframework.security spring-security-taglibs 3.1.4.RELEASE  
Spring org.springframework.security spring-security-web 3.1.4.RELEASE  
JPA(Hibernate) antlr antlr 2.7.7 *1
JPA(Hibernate) dom4j dom4j 1.6.1 *1
JPA(Hibernate) org.hibernate hibernate-core 4.2.3.Final *1
JPA(Hibernate) org.hibernate hibernate-entitymanager 4.2.3.Final *1
JPA(Hibernate) org.hibernate.common hibernate-commons-annotations 4.0.2.Final *1
JPA(Hibernate) org.hibernate.javax.persistence hibernate-jpa-2.0-api 1.0.1.Final *1
JPA(Hibernate) org.javassist javassist 3.15.0-GA *1
JPA(Hibernate) org.jboss.spec.javax.transaction jboss-transaction-api_1.1_spec 1.0.1.Final *1
JPA(Hibernate) org.springframework.data spring-data-jpa 1.4.3.RELEASE *1
MyBatis2 jp.terasoluna.fw terasoluna-dao 2.0.5.0 *2
MyBatis2 jp.terasoluna.fw terasoluna-ibatis 2.0.5.0 *2
MyBatis2 org.mybatis mybatis 2.3.5 *2
DI javax.inject javax.inject 1  
AOP aopalliance aopalliance 1  
AOP org.aspectj aspectjrt 1.7.4  
AOP org.aspectj aspectjweaver 1.7.4  
ログ出力 ch.qos.logback logback-classic 1.0.13  
ログ出力 ch.qos.logback logback-core 1.0.13  
ログ出力 org.lazyluke log4jdbc-remix 0.2.7  
ログ出力 org.slf4j jcl-over-slf4j 1.7.5  
ログ出力 org.slf4j slf4j-api 1.7.5  
JSON org.codehaus.jackson jackson-core-asl 1.9.7  
JSON org.codehaus.jackson jackson-mapper-asl 1.9.7  
入力チェック javax.validation validation-api 1.0.0.GA  
入力チェック org.hibernate hibernate-validator 4.3.1.Final  
入力チェック org.jboss.logging jboss-logging 3.1.0.GA  
Bean変換 commons-beanutils commons-beanutils 1.8.3 *3
Bean変換 net.sf.dozer dozer 5.4.0 *3
Bean変換 org.apache.commons commons-lang3 3.1 *3
日付操作 joda-time joda-time 2.2  
日付操作 joda-time joda-time-jsptags 1.1.1 *3
日付操作 org.jadira.usertype usertype.core 3.0.0.GA *1
日付操作 org.jadira.usertype usertype.spi 3.0.0.GA *1
コネクションプール commons-dbcp commons-dbcp 1.2.2.patch_DBCP264_DBCP372 *3
コネクションプール commons-pool commons-pool 1.6 *3
Tiles commons-digester commons-digester 2 *3
Tiles org.apache.tiles tiles-api 2.2.2 *3
Tiles org.apache.tiles tiles-core 2.2.2 *3
Tiles org.apache.tiles tiles-jsp 2.2.2 *3
Tiles org.apache.tiles tiles-servlet 2.2.2 *3
Tiles org.apache.tiles tiles-template 2.2.2 *3
ユーティリティ com.google.guava guava 13.0.1  
ユーティリティ commons-collections commons-collections 3.2.1 *3
ユーティリティ commons-io commons-io 2.4 *3
サーブレット javax.servlet jstl 1.2  
  1. データアクセスに、JPAを使用する場合に依存するライブラリ
  2. データアクセスに、MyBatis2を使用する場合に依存するライブラリ
  3. 共通ライブラリに依存しないが、TERASOLUNA Global Frameworkでアプリケーションを開発する場合に、利用することを推奨しているライブラリ

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

共通ライブラリは、TERASOLUNA Global Frameworkが含むSpring Ecosystem や、その他依存ライブラリでは足りない+αな機能を提供するライブラリである。 基本的には、このライブラリがなくてもTERASOLUNA Global Frameworkによるアプリケーション開発は可能であるが、”あると便利”な存在である。

項番 プロジェクト名 概要 Javaソースコード有無
(1)
terasoluna-gfw-common
Webに限らず、汎用的に使用できる機能
(2)
terasoluna-gfw-web
Webアプリケーションを作成する場合に使用する機能群
(3)
terasoluna-gfw-jpa
JPAを使用する場合の、依存関係定義
(4)
terasoluna-gfw-mybatis2
MyBatis2を使用する場合の、依存関係定義
(5)
terasoluna-gfw-security-core
Spring Securityを使用する場合の、依存関係定義(Web以外)
(6)
terasoluna-gfw-security-web
Spring Securityを使用する場合の依存関係定義(Web関連)、およびSpring Securityの拡張

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

2.1.4.1. terasoluna-gfw-common

  • 共通例外機構
    • 例外クラス
    • 例外ロガー
    • 例外コード
    • 例外ログ出力インターセプタ
  • システム日付
  • コードリスト
  • 処理結果メッセージ
  • クエリー(SQL, JPQL)エスケープ
  • シーケンサ

2.1.4.2. terasoluna-gfw-web

  • トランザクショントークン機構
  • 共通例外ハンドラ
  • コードリスト埋込インターセプタ
  • 汎用ダウンロードView
  • MDC情報ログ出力用サーブレットフィルタ群
    • 親サーブレットフィルタ
    • トラッキングIDログ出力用サーブレットフィルタ
    • MDCクリアサーブレットフィルタ
  • EL関数群
    • XSS対策
    • URLエンコーディング
    • JavaBeansのクエリパラメータ展開
  • ページネーション出力JSPタグ
  • 結果メッセージ出力JSPタグ

2.1.4.3. terasoluna-gfw-security-web

  • 認証ユーザ名ログ出力用サーブレットフィルタ
  • オープンリダイレクト脆弱性対策リダイレクトハンドラ
  • CSRF対策 (Spring Security 3.2を導入するまでの暫定措置)