議事録 / 第56回


議事録

第56回 Java EE勉強会

  • 日時: 2009年07月25日(土) 13:00〜

ポジペ:生産性が向上したツール・フレームワーク

遅れていったのであんまりわかんなかった…

  • モチベ重要
  • VisualStudio?のプラグイン、JetBrains?から出てるやつ
  • iPhone
  • DropBox?
  • XlsBeans?
  • Aptina(後で追加)

スイーツ

  • だんご

DSL勉強会の進め方

スタイル

  • 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とかサポート
  • Commons
    • 共通機能群
  • Eclipseではプロジェクトプロパティ->Java Compiler -> Annotation Processingで色々設定できる

DOMA

  • Seasar Sandboxプロジェクトで開発しているが、Seasarには依存していない

特徴

  • ドメイン使う
    • 意図を明確に
    • Relational Domainの概念を利用する
    • DomainAbstractClass?を継承したDomainをEntityのproperty型として使う
      • Visitorパターン
  • 宣言的
    • メソッドに対してもアノテーションで意図を明確に
      • fetchSizeとかnullの扱いとかS2DAOと違って設定ファイルに書かなくていい
      • @Selectとか
  • 次世代
    • Java6対応
    • APT使っている
    • Eclipse上にエラーメッセージ表示してくれる
    • 実行時ではなくコンパイル時に確定、パフォーマンスの向上やデバッグのしやすさ向上

DAOフレームワークとしての機能

  • 複数RDBMS対応+Dialect
  • 2WaySQL
    • S2Daoみたいな感じ
    • メソッド呼び出しも可
      • # この辺、AntlrとかStringTemplate?とか使ったら結構幸せなのかなぁ…
  • Entityリスナー
  • コンパイル時エラーチェック
    • SQLファイルがないとか
  • 各メソッドの詳細
    • 検索系は、基本的にはSQLファイルを書く。ただし、ページングや悲観ロック(として定義されたSQL)への自動変換はサポート。
    • パラメータ名をマッピング名に使えるので、@いらない。これいいかも。

デモ

  • Eclipse上で動かすと、対話的に構築できるのでかなり良い感じ。プロパティは必ずDomain(インタフェースの実装クラス)でないといけない。そういうポリシー。

良いところ

  • Domainの利用で意図が明確、型安全
  • 明示的な設定、命名規約なし
  • EmptyやDaoがすっきりする
  • SQLを生かしている、2WaySQLとか
  • 特定のライブラリに依存しない
  • S2Daoの多くの問題を解決

質問

  • 1メソッド1SQLファイル?
    • そうです、命名規約。ただオーバーロードができるので、正確にはnメソッド1SQLファイル。
    • メソッド名と違うファイルにマッピングはできません。
  • コンパイル性能は大丈夫?
    • やったことないからわからないが、インクリメンタルコンパイルでうまくやってくれる?
    • 依存関係の解決があるのでなんとかなるんじゃない(無駄な再コンパイルがされることはない)?
  • 組み込み型はどういうのがあるの?
    • プリミティブ型の拡張Domainが用意されている。が、あんまりおすすめはしない。
    • 1対n等の関係はサポートしていない
  • Entityにはメソッド追加できない?
    • できない。いらないかなと思って。
    • DomainやDaoには追加できるようになっている。

DDDまとめ

  • たぶんあとで資料があがるはず

DDD分科会

  • ショータローさんの倉庫管理システム要件をネタに、実際にアプリ開発していく。
  • まずは、ddd-wms(Domain-Driven Design Warehouse Management System)プロジェクトをGoogle Codeに作り、その上で開発していく。
  • 作ったらJavaEEMLに流し、参加希望者はレス=>メンバに追加
  • 要件をつめるのは、まずはMLベースでやってみる
    • ショータローさんに顧客(ドメインエキスパート)ロールを演じてもらう

次回

  • 2009年8月15日(土)
  • 次回ポジペ「私とファウラー」