T2-Guice-JPAサンプルを少し触ってみて気になったところをいくつか

http://d.hatena.ne.jp/shot6/20090327#1238120432

T2FrameworkGuiceのサンプルプロジェクトが上がっていたので触ってみた。

まずはプロジェクトの作成…というか開くだけ!

zip版をダウンロード。NetBeansMavenプラグインは入れてあるので、MavenプロジェクトはすでにNetBeanネイティブのプロジェクトであるかのように扱える。プロジェクトを開くで解凍したディレクトリを選択するだけ。そのディレクトリはプロジェクトのアイコンになってるので間違うこともない。

ただし、pom.xmlを以下の部分だけ書き換えることが必要。プロジェクトのディレクトリからの相対パスにしたというわけだ。

…これでほかは何も変えずにNetBeansでそのまま動いた。完璧。元はEclipseプロジェクトだと思うのだが、Maven2スタイルにしておけばNetBeansEclipseで何も問題がなく扱えるってことを改めて証明した感じだ。

ただ、srcディレクトリの下のWEB-INFの中にclassesやlibがあったがここはビルドして出来上がったファイルを置く場所なのでツールが混乱してもいけないしと思い、気持ち悪いので消した。

気になった点その1 データベースのパス

まず、データベースがどこに作成されているか見てみる。サンプルはH2をつかっているようだ。ということはこのパスはもしや…。

調べてみたら予想通り、ユーザーホーム直下に複数のデータベースファイルが出来ていた。ファイルひとつだけならともかく、作業中のテンポラリとかもここにできあがるため非常に気持ち悪い。

というわけで接続URLを以下のように変更する。

jdbc:h2:~/t2guicedb/t2guicedb

これでユーザーホームの下にディレクトリが作られてその中にデータベースが出来上がる。
注意しなくてはいけないのが、これを設定する箇所が3箇所あること。

まず、web.xml
続いてpersistence.xml
最後にCustomDbStarter。

どこか1箇所でも変更し忘れると2つDBが出来上がるので注意。

気になった点その2 データベースの新規作成

CustomDbStarterにおいてDBを新規作成しているのだが、persistence.xmlにおいてテーブルがなければ新規に作成するという設定になっていた。

テーブルやシーケンスを作成する部分をコメント化してみる。

そうするとエンティティを元に自動的にテーブルが作られたようだ。問題なく動く。違いは最初からサンプルのデータを用意してあるかどうかだけ。

EntityManagerFactoryをさっさと起動してテーブルがなければ自動で作成するようにしておいて、insert文だけ発行すれば十分なような。もしくはエンティティクラスを元に作成しないように設定しておくとか。

気になった点その3 スレッドセーフ

EntityManagerをセットするのにプロバイダ使っているが、シングルトン設定なため、プロバイダの意味をなしていない。そして注入されるEntityManagerはなにも設定していないためにスレッドセーフではないと予想される。

あくまでもサンプルと割り切ってもらうにしてもコメントのひとつはあったほうがいいかもしれない。

気になった点その4 アクションが分かりにくい

画像をボタンとして使っているために、アクションの判別に「name.x」という感じでおこなっている。これを見た人は「.x」というのが何か特別な意味を成しているのかもしれないと勘違いするだろう。というか、おいらもぱっと見で勘違いした。サンプルとしてはちょっとよろしくないかも。

あとpersonList.jspにて

<input type="hidden" name="search" />

と書いてあるけど、これの意味がわからなかった。試行錯誤していたときのゴミがのこったのだろうか?


あとは画像部分だけど、α付png使ってるようなので、IEでのレンダリングがあまりよろしくない。gifに変えてみるのも良いかな。


とりあえず軽く触ったところではこんなところかな。間違ってるところとかあると思うので指摘して欲しい。