入出力中心のアプリケーションの場合 入出力中心のアプリケーションの場合
•
業務ロジックがほとんどない–
バリデーションやデータの型変換などはある•
キャッシュの仕組みは不要–
入力時は、更新メソッドを呼べばよい–
出力時は、画面に合わせて必要なデータを取得すればよい• 2
種類のマッピングがあればOK
–
テーブルとオブジェクトのマッピング–
任意の結果セットとオブジェクトのマッピングS2Dao DB
プレゼン テーション
DTO
をロジックロジック
評価・加工が中心のアプリケーションの場合 評価・加工が中心のアプリケーションの場合
•
同一テーブルの同一レコードがトランザクション内で複数のロジックにまた がって何度もアクセスされる–
必要毎のDB
アクセスは避けたい→永続永続永続永続コンテキストコンテキストコンテキストコンテキストでのキャッシュ•
同一テーブルの同一レコードがトランザクション内でさまざまに変更される–
変更毎のDB
アクセスは避けたい→コミット時の永続永続永続永続コンテキストコンテキストコンテキストコンテキストのフラッシュ•
データにグループ化や階層構造が必要–
リレーションシップリレーションシップリレーションシップリレーションシップののののマッピングマッピングマッピングマッピングJPA
実装Kuina-Dao DB
永続コンテキスト プレゼン
テーション ロジック
エンティティを管理
トランザクション境界
ロジック
評価・加工が中心のアプリケーションの例 評価・加工が中心のアプリケーションの例
• シミュレーション系アプリ(例えば生産管理のスケジューリング)
–
一度のトランザクションで何度も変更されるエンティティ•
所要量•
タスク•
スケジュール•
在庫–
一度のトランザクションで何度もアクセスされるエンティティ•
スケジュール•
タスク•
リソース•
能力•
部品•
部品構成•
在庫• JPA が効果的なアプリケーションには Kuina-Dao も効果的
– Kuina-Dao
はJPA
を使いやすくするフレームワーク• JPA の使いどころ
–
永続コンテキスト• DB
アクセスを減らすための仕組み(キャッシュ・コミット時のフラッシュ)が備 わっている–
アプリケーションをシンプルに保てる–
管理すべきSQL
を減らせる–
リレーションシップのマッピング•
データのまとまりや階層構造(1
対多・多対1
)をロジックで扱える–
ツール(IDE
やIDE
のプラグインなど)のサポート•
エンティティの自動生成•
エンティティの編集補完•
設定ファイルの自動生成Kuina
Kuina - - Dao Dao の使いどころ の使いどころ – – まとめ まとめ
評価・加工が中心ならば
評価・加工が中心ならば Kuina Kuina - - Daoで Dao で
Kuina
Kuina - - Dao Dao の の の の使 の の の の使 使 使 使いどころ 使 使 使いどころ いどころ いどころ いどころ いどころ いどころ いどころ アドバンスド アドバンスド アドバンスド アドバンスド アドバンスド アドバンスド アドバンスド アドバンスド
Kuina
Kuina - - Dao Dao の使いどころ の使いどころ アドバンスド アドバンスド
S2Dao
S2Dao で入出力中心のアプリケーション で入出力中心のアプリケーション
• DTO の管理が煩雑
–
画面が増えると対応してDTO
とDAO
が増えるS2Dao DB
プレゼン テーション
DTO
を やり取りするトランザクション境界
ロジック
プレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーション
Kuina
Kuina - - Dao Dao で入出力中心のアプリケーション で入出力中心のアプリケーション
• エンティティをそのまま表示すれば OK
–
画面が増えてもDTO
を管理する必要がない。でも…
ロジック
プレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーション
JPA
実装Kuina-Dao DB
永続コンテキスト
エンティティを管理
トランザクション境界
エンティティを表示
遅延ローディングにどう対応するか 遅延ローディングにどう対応するか
a. あらかじめアクセスしておく
b. フェッチタイプを Eager に設定しておく c. Transaction View
d. Entity Manager per Request
e. DTO に変換
遅延ローディングにどう対応するか
遅延ローディングにどう対応するか ‐‐ ベストプラクティスベストプラクティス
• フェッチタイプはすべて Lazy に設定しておく
– @ManyToOne(fetch = FetchType. LAZY )
• 必要なものだけ Fetch Join で取得する
– Kuina-Dao では簡単に Fetch Join するための仕組みを提供
• @Distinct
@FetchJoin(joinSpec = JoinSpec.LEFT_OUTER_JOIN, value = “emps”) List<Dept> findByLoc(String loc);
– もちろん JPQL を書いても OK
• SELECT DISTINCT dept FROM Dept AS dept LEFT OUTER JOIN FETCH
dept.emps WHERE (dept.loc = :loc)
Kuina
Kuina- - Dao Dao の使いどころ の使いどころ アドバンスド アドバンスド – – まとめ まとめ
エンティティを直接参照する形は今後 Teeda がサポート
ロジック
プレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーションプレゼン
テーションプレゼン テーション
Teeda
のPage
クラスJPA
実装Kuina-Dao DB
永続コンテキスト
エンティティを管理
トランザクション境界
エンティティを表示
@FetchJoinで必要なエ ンティティだけを取得
ロードマップ ロードマップ ロードマップ ロードマップ ロードマップ ロードマップ ロードマップ ロードマップ
ロードマップ
ロードマップ
Kuina
Kuina -Dao - Dao 関連プロダクトのロードマップ 関連プロダクトのロードマップ
• 現在
– 2007 年 5 月 S2TopLink-JPA 1.0-r3 リリース – 2007 年 5 月 S2Hibernate-JPA 1.0 リリース – 2007 年 5 月 Kuina-Dao 1.0 リリース
• 予定
– 2007 年 9 月 S2TopLink-JPA 1.0 リリース予定 – 2007 年 x 月 S2OpenJPA 1.0 リリース予定
– 2007 年 x 月 S2Cayenne-JPA 1.0 リリース予定 皆
皆 皆
皆さんの さんの さんの さんの要望 要望 要望を 要望 を を受 を 受 受 受け け け け付 付 付 付けています けています けています けています! ! ! !
Kuina
Kuina - - Dao Dao の関連情報 の関連情報
•
ドキュメント– http://kuina.seasar.org/ja/
•
書籍– Java Expert #01
• http://www.amazon.co.jp/Java-Expert-01-
編集部/dp/4774130702/
•
メーリングリスト– Seasar user
メーリングリスト• [email protected]
– JPA
メーリングリスト• [email protected]
•
サンプル(テストコード)– SVN
リポジトリ• https://www.seasar.org/svn/kuina/trunk/kuina-dao-it
•
ツール– Dolteng
(どぅるてん)• http://www.seasar.org/wiki/index.php?Dolteng
ドキュメント内
Microsoft PowerPoint - sc2007spring_Aa1_Kuina.ppt
(ページ 47-60)