0. はじめに
最近、研修等で「TERASOLUNA Server Framework for Java (5.x)」について説明する機会が増えてきました。公式ガイドライン は詳細に書かれていて概要(全体像)を理解するには難しいため、毎回ホワイトボードに概要を書いて説明していました。
せっかくなので今回TERASOLUNA5.xの概要を記事としてまとめました。これからTERASOLUNA5.xを使ってみたい人の理解に少しでも役立ては幸いです。
1. TERASOLUNA5.xとは?
TERASOLUNA5.xとはNTTデータが無償で公開しているフレームワーク&ガイドラインで、エンタープライズ開発で広く使われているOSSを組み合わせた動作検証済みのノウハウ集みたいなものです。
利用しているOSSの概要は以下の通りです。
項番 | 機能 | OSS |
---|---|---|
1 | DIコンテナ | Spring Framework 4.3 |
2 | MVCフレームワーク | Spring MVC 4.3 |
3 | DBアクセス | MyBatis 3.4 または JPA2.1(プロバイダは Hibernate 5.0) |
4 | 入力チェック | BeanValidation 1.1(実装は Hibernate Validator 5.2) |
5 | セキュリティ(認証、認可) | Spring Security 4.1 |
スタックの詳細については公式ガイドラインの「2.1. TERASOLUNA Server Framework for Java (5.x)のスタック」を参照ください。
2. コンポーネントの概要
TERASOLUNA5.xのアプリケーションを実装する際の主要なコンポーネントについて、レイヤ毎に概要を説明したいと思います。
2.1. アプリケーション層のコンポーネント(Webプロジェクトの資材)
いわゆるプレゼンテーション層を担当するコンポーネントです。
Controller | Form | JSP | Helper | Validation | |
---|---|---|---|---|---|
説明 | 画面遷移を制御するクラス | 入力データを保持するクラス 入力チェックを設定するクラス |
画面を構成するファイル | Controllerのサポートクラス | 独自の入力チェッククラス |
必須 | ○ | ○ | ○ | - | - |
工数 | 大きい | 小さい | 大きい | 小さい | 普通 |
2.2. ドメイン層のコンポーネント(Domainプロジェクトの資材)
業務ロジックや永続化を担当するコンポーネントです。
今回はMyBatisを利用する場合について以下に示します。JPAを利用する場合は構成が異なるので注意してください。
Service インターフェース |
ServiceImpl 【業務ロジック】 |
モデル、エンティティ、入出力ビーン | Repository インターフェース |
Mapperファイル 【業務ロジック】 |
|
---|---|---|---|---|---|
説明 | 業務ロジックのインターフェース | 業務ロジックを実装するクラス | 業務データを格納するクラス | DBアクセスのインターフェース | SQLを記述するXMLファイル |
必須 | ○ | ○ | ○ | ○ | ○ |
工数 | 小さい | 大きい | 小さい | 小さい | 大きい |
(依存関係について)
レイヤ間の依存関係(ライブラリの依存関係)として、アプリケーション層はドメイン層に依存します。
アプリケーション層からドメイン層のコンポーネントを利用することができますが、反対にドメイン層からアプリケーション層のコンポーネントを利用することはできません。
3. 各コンポーネントとデータと処理の流れ
3.1. イメージ
3.2. データと処理の流れ
- 入力したデータはFormに格納される。
必要ならその際、入力チェックを実施する。 - ControllerのメソッドでFormを引数として受け取る。
業務ロジックを実行するためServiceのメソッドを呼び出す。
トランザクション境界はServiceのメソッドである。 - ServiceはRepositoryを利用してDBアクセスを行う。
Repositoryのメソッドを呼び出すと、Mapperファイルに記述したメソッドに対応するSQLが実行される。
必要なら複数のRepositoryを利用する。 - Controllerは画面に表示するデータをSpring MVCの
Model
に格納する。
JSPはModel
に格納されているデータを利用し、画面を構築する。
JSPがHTMLに変換されてHTTPレスポンスとして返却される。
4. アプリケーション層のコンポーネントの詳細
4.1. Controller
- 画面遷移を制御するクラス
- 普通のJavaクラス
- Struts1のstruts-config.xml相当の内容を担当
-
@Contoller
アノテーションや@RequestMapping
アノテーションが付与されているのがポイント
4.2. Form
- 入力データを保持するクラス
- 普通のJavaクラス
- 入力チェックのルールを設定するクラス
- Struts1のvalidation.xml相当の内容を担当
-
@Max
、@Size
、@NotEmpty
等々の入力チェックのアノテーションが付与されているのがポイント
4.3. JSP
- 画面を実装するファイル
- 普通のJSP
- Spring MVCのタグもあるが、ほとんどEL式とJSPタグを利用
4.4. Helper(オプション)
- Controllerのサポートクラス
- 普通のJavaクラス
- Controllerの処理が大きくなった場合に作成したり、複数のControllerの共通的な処理として作成
- DIコンテナに登録するため
@Component
アノテーションを付与する -
@Component
=Helperではないので注意すること
4.5. Validation(オプション)
- 独自の入力チェックを実装するクラス
- Bean Validationの仕様に沿って作成
- チェック用のアノテーションとチェック処理の実装クラスの2つで構成される
5. ドメイン層のコンポーネントの詳細
5.1. Serviceインターフェース
- 業務ロジックのインターフェース
- 普通のJavaインターフェース
5.2. ServiceImpl
- 業務ロジックを実装するクラス
- 普通のJavaクラス
-
@Service
アノテーションが付与されているのがポイント - DBアクセスが必要な場合、
@Transactional
アノテーションを付与する - DBアクセスが必要な場合、Repositoryインターフェースをインジェクションして利用
5.3. モデル、エンティティ、入出力ビーン
- 業務データを格納するクラス
- 普通のJavaクラス
- DTOやDBのテーブルに対応したEntityのクラス等
5.4 Repositoryインターフェース
- DBアクセスのインターフェース
- 普通のJavaインターフェース
- 引数や戻り値の型変換やオブジェクトとレコードのマッピングをMyBatisが簡単にやってくれる
5.5. Mapperファイル
- SQLを記述するXMLファイル
- MyBatisのルールに従って作成
- バインド変数(入力パラメータ)の状況に応じて動的にSQLを変更する動的SQLが便利
6. さいごに
今回はTERASOLUNA5.xの概要について説明しました。ここではなんとなく全体像を分かってもらえれば十分です。
実際にTERASOLUNA5.xを利用してWebアプリを実装するには各コンポーネントの実装方法、環境構築、ツールの使い方、テストの実施方法等々を覚える必要があります。「TERASOLUNA5.x記事のまとめページ」に記事をまとめていますので、興味のある方は参照ください。