今回の開発では初めてJava EE6を触り、初めてORマッパーを触るので、DBまわりや性能は結構気になる所です(^^;
ちょくちょく「ORマッパー使うなんて危ないねぇ」なんて周囲にも言われたりもしますが、JPAやEclipseLinkをキーワードに海外での情報も多く、Java EE6としてもJPAを利用することが標準(ですよね!?)だと思っているので、とりあえずは開発段階で色々と気を付けながら使ってみています。
JPQLはメインで動的クエリを採用(Criteriaを利用したかったのですが…断念)し、非常に簡単なものはNamed Queryを利用してます。
で、タイトルにある「JPQLを利用する際に行っていること」ですが、あまり大それたことではありません。ただ、NetBeans7.3になってから組み込まれたツールのおかげで、作業が劇的に軽減されたので、手順をまとめておこうかなと。
Java Persistence JPQL testing toolでJPQLクエリを組む/あるいはNetBeansの補完を利用しながらJPQLクエリを組む
以前に「NetBeans7.3で嬉しかったこと!」のエントリで書いたのですが、このツールは本当に便利です。
ツール上でも(Ctrl+Shiftかなぁ)補完もちゃんと効きます。ただ、たまにご機嫌斜めになることもあるけど…(^^;気のせい?
プレースホルダ(バインド変数)のところは一旦tool上、手で書いたりします。
実行して結果を確認する
tool上で実行して確認できるので、修正したり、実験したり、色々できます。
実クエリを取得する
「SQL」タブ(タブなのかな…?)で実際に利用しているDBMSに合わせたクエリが発行・表示されるので、これをコピーします。前まではログから毎回拾ってて、辛かった…(^^;
DBに実クエリを投げて実行計画解析(explain等)を行う
以下はMS SQL Serverの例ですが、Oracleや他DBでも分析機能があるので、それを利用してコストとかインデックス効いてるかとかチェックします。
で、上記をなるべく大量データで行っています。
あとはArqullian Persistence Extensionでも大量データ+テスト時にテストレコード追加、で確認を行うため、性能的に異常なケースが出れば割と早期に発見は可能かなと(^^;
さらにJMeterやSelenium等で負荷試験を行っていく予定です。
実際の運用になると色々問題は出るかもしれないけれど…色々初めてすぎてやってみないとわからない(^^;