Seasar2でS2JDBCを使うときにハマった点
WebアプリフレームワークのSeasar2の勉強をすることになり、 http://www.seasar.org/を見つつ環境を整え、SAStruts + S2JDBCでサンプルプログラムを作ろうとしたところハマったのでメモしておく。
Super Agile Struts - Setupを見ながら、5までは進み、チュートリアルが動かせる状態にしておく。
S2JDBC-Genが通らない
doltengを使いプロジェクトのテンプレートを作成。その後、データベースからS2JDBCを利用に必要なクラスを自動作成するために、プロジェクトのルート直下にあるs2jdbc-gen-build.xmlをAntで実行することになるが、このビルドが通らない。S2JDBCの設定は合っている。
DBが起動していない、接続ができない状態にある
プロジェクトのビルドパスにDBに対応するJDBCドライバは追加してある。なんのことはない。接続するべきDBが動いていなかった。データベースに接続し、そこに存在するテーブルからクラスを作成するのだから、情報が取れなければエラーになるのは自明。これは動作に対する理解が足りてなかった自分が悪い。
H2を使う場合はプロジェクトの右クリックから起動する。他のDBを使うのであれば、接続できるようにしておく。
S2JDBCの記法でDBが利用できない
しかし、実際にコードを書いてDBを利用しようとすると、実行時エラーが出る。
「クラス名が見つかりません」?これは確か、JDBCドライバが無いときに出るエラーのはず。しかし、プロジェクトのビルドパスには入っているし、S2JDBC-Genも通ったではないか……。
JDBCドライバはWEB-INF/の下、lib内に配置しないといけない
ここが一番ハマりました。具体的には4時間位ハマりました。
Seasar2のページからは記述を見つけられず、個人ブログでlib内に配置してうまくいったという記事がありました。libディレクトリは他の場所にも生成されているので間違わないように。
どうやらStrutsからの決まり事らしい。前提知識がないとこうなるということか……。