kurukuru-papaのブログ

主に、ソフトウェア開発に関連したメモを書き溜めたいと思います。

SAStruts+S2JDBCにおいて、H2データベースをエンベッドモードで動作させる

Doltengを利用して、SAStruts+S2JDBCのWebアプリケーション開発を勉強しています。Doltengが自動生成する新規プロジェクトでは、デフォルトでH2データベースを使用し、サーバモードで動作させることになっていました。

H2にはエンベッドモードと呼ばれる機能があり、Webアプリケーションと同一のプロセスで動作させることも出来るようです。面白い機能なので、少し試してみることにしました。

H2エンベッドモード指定箇所

jdbc.diconには、H2のDB接続URL指定が次のように記述されていました。ここで"tcp"の記述がサーバモードをあらわしています。

<property name="URL">
    "jdbc:h2:tcp://localhost:9092/demo"
</property>

次のように変更するだけで、エンベッドモードになります。"file"は記述しなくても良いらしいですが、わかりやすさのため書いておきました。

<property name="URL">
    "jdbc:h2:file:データベースファイルのパス"
</property>

接続URL記述方法

Eclipse環境とTomcat環境でエンベッドモードを試そうとしましたが、Eclipse環境では動作させることが出来ませんでした。DBアクセス時に、接続が壊れていますとメッセージ出力されダメでした。何か設定が悪いのだろうと思います。

DB接続URLは、Tomcat環境のエンベッドモードと、Eclipse環境のサーバモードで、解釈が異なるようです。表にしてみました。

ディレクトリ種類 接続URL記述例 Eclipse環境H2サーバモード(DbLauncher使用) Tomcat環境H2エンベッドモード
ホームディレクトリ jdbc:h2:file:~/demo Eclipse起動ユーザのホームディレクトリ(※1) Tomcat起動ユーザのホームディレクトリ(※1)
カレントディレクトリ jdbc:h2:file:demo /プロジェクト名/src/main/resources/data(※2) Tomcat起動ディレクトリ(※3)
ルートディレクトリ jdbc:h2:file:/demo Eclipse起動ユーザのホームディレクトリ Cドライブ(※4)

※1:Vistaだと"C:\User\ユーザID"となりました。
※2:プロジェクトのプロパティダイアログにて、DbLauncherの設定画面から変更可能です。
※3:Tomcat付属のstart.batから起動すると、Tomcatのbinディレクトリがホームディレクトリとなります。
※4:私の環境だとTomcatがCドライブにインストールされているので、Cドライブがルートになったと思います。
※5:"C:/Program Files/Apache Software Foundation/apache-tomcat-6.0.18"などスペースを含むディレクトリも指定することが出来ました。

プロジェクトのリソースフォルダは、Eclipse環境とTomcat環境で違ってきますが、次のように記述することで、動的に切り替えることが出来ました。Eclipse環境では"Eclipseワークスペース\プロジェクト名\src\main\resources\data\demo"、Tomcat環境では"C:\Program Files\Apache Software Foundation\apache-tomcat-6.0.18\webapps\プロジェクト名\WEB-INF\classes\data\demo"となりました。

<property name="URL">
    "jdbc:h2:file:"
    + @org.seasar.framework.util.ResourceUtil@getBuildDir('app.dicon').getCanonicalPath()
    + "/data/demo"
</property>

参考サイト

H2 Database Engine

動作確認環境