議事録
第56回 Java EE勉強会 †
- 日時: 2009年07月25日(土) 13:00〜
ポジペ:生産性が向上したツール・フレームワーク †
遅れていったのであんまりわかんなかった…
- モチベ重要
- VisualStudio?のプラグイン、JetBrains?から出てるやつ
- iPhone
- DropBox?
- XlsBeans?
- Aptina(後で追加)
スイーツ †
スタイル †
- Wikiに要約
- 公開不可なので要約が全訳になってしまわないように気をつける
- Google Translator Toolkitで全訳
- 要約はマスト
- 全訳はオプション
要約の順序 †
- NarrativeとPatternを同時にやるか?
- 管理はNarrative->Patternのが楽だが、PoEAAの経験からすると後半をやる気がなくなるので、一緒に進めた方がいい。
進め方はやってみないとわからない部分があるので、とりあえず次回を決めて進めてみることにする。
その他 †
- 本体のアップデートに対するポリシーはどうする?
- アップデートは試みる。Translator Toolkitが足引っ張らないかどうかは試しながら考えていく。
参加の方法 †
- 参加したい人は角田さんまで(Google Groups経由で)連絡
- 翻訳する人は、その旨連絡(Google Groups経由もしくは勉強会で、でOK?)
Aptina †
特徴 †
- aptの開発を支援
- aptでは主にjavax.annotation.processor.Processorインタフェースを実装
- javax.lang.model.*を参照できる
- 例外が起きたらどうなる?
- javacのコンパイルはもう終わってるので、そこまでは終わり。
- ここで新たにjavaソースを作ると、さらにjavacが走り、再帰的に繰り返される。
- このひとまわりとラウンドと言う。ラウンドコンテキストというのがある。
動機 †
- Processorの開発では、単体テストが大変。
- コンパイラが用意してくれるモデルが必要だが、たくさんあってモック作るのも大変。
- デバッグも大変。
- Eclipse上だと、プラグインのデバッグと同じようにしなければならない。JARつくって、ランタイムワークベンチ立ち上げて…
- Compiler APIでRecord&Playできないのか?というアイディアが発端
- Compiler APIでjavac呼び出したらAnnotation Processorが呼び出される…なら、テストできる!抽象クラス作ってみたら便利だった。
名前 †
- Annotation Processing Tools in a New Ageの略。
種類 †
- Unit
- JUnit3 TestCase?拡張
- TestCase?の実行中に本当にコンパイル
- 本物のjavax.lang.modelが使えるのでモック不要
- 生成したソースをassertで検証
- 試行錯誤に最適、フィードバックがはやい、デバッグして中身見れる
- Beans
- 習作
- PropertyInterType?はAOPで実行時
- ラウンド初期ではエラーになるが、その後のコンパイルはエラーが消える
- # コンパイル時間ってどれくらい変わるんだろ?
- constraintとかboundとかサポート
- Eclipseではプロジェクトプロパティ->Java Compiler -> Annotation Processingで色々設定できる
DOMA †
- Seasar Sandboxプロジェクトで開発しているが、Seasarには依存していない
特徴 †
- ドメイン使う
- 意図を明確に
- Relational Domainの概念を利用する
- DomainAbstractClass?を継承したDomainをEntityのproperty型として使う
- 宣言的
- メソッドに対してもアノテーションで意図を明確に
- fetchSizeとかnullの扱いとかS2DAOと違って設定ファイルに書かなくていい
- @Selectとか
- 次世代
- Java6対応
- APT使っている
- Eclipse上にエラーメッセージ表示してくれる
- 実行時ではなくコンパイル時に確定、パフォーマンスの向上やデバッグのしやすさ向上
DAOフレームワークとしての機能 †
- 複数RDBMS対応+Dialect
- 2WaySQL
- S2Daoみたいな感じ
- メソッド呼び出しも可
- # この辺、AntlrとかStringTemplate?とか使ったら結構幸せなのかなぁ…
- Entityリスナー
- コンパイル時エラーチェック
- 各メソッドの詳細
- 検索系は、基本的にはSQLファイルを書く。ただし、ページングや悲観ロック(として定義されたSQL)への自動変換はサポート。
- パラメータ名をマッピング名に使えるので、@いらない。これいいかも。
デモ †
- Eclipse上で動かすと、対話的に構築できるのでかなり良い感じ。プロパティは必ずDomain(インタフェースの実装クラス)でないといけない。そういうポリシー。
良いところ †
- Domainの利用で意図が明確、型安全
- 明示的な設定、命名規約なし
- EmptyやDaoがすっきりする
- SQLを生かしている、2WaySQLとか
- 特定のライブラリに依存しない
- S2Daoの多くの問題を解決
質問 †
- 1メソッド1SQLファイル?
- そうです、命名規約。ただオーバーロードができるので、正確にはnメソッド1SQLファイル。
- メソッド名と違うファイルにマッピングはできません。
- コンパイル性能は大丈夫?
- やったことないからわからないが、インクリメンタルコンパイルでうまくやってくれる?
- 依存関係の解決があるのでなんとかなるんじゃない(無駄な再コンパイルがされることはない)?
- 組み込み型はどういうのがあるの?
- プリミティブ型の拡張Domainが用意されている。が、あんまりおすすめはしない。
- 1対n等の関係はサポートしていない
- Entityにはメソッド追加できない?
- できない。いらないかなと思って。
- DomainやDaoには追加できるようになっている。
- ショータローさんの倉庫管理システム要件をネタに、実際にアプリ開発していく。
- まずは、ddd-wms(Domain-Driven Design Warehouse Management System)プロジェクトをGoogle Codeに作り、その上で開発していく。
- 作ったらJavaEEMLに流し、参加希望者はレス=>メンバに追加
- 要件をつめるのは、まずはMLベースでやってみる
- ショータローさんに顧客(ドメインエキスパート)ロールを演じてもらう
次回 †
- 2009年8月15日(土)
- 次回ポジペ「私とファウラー」