2009年10月09日

H2でEmbeddedモード

最近は、H2DBを使用してシステム構築している。

開発はServerモードで進めていたのだが、Embeddedモードの方が更に高速で、APサーバーと同じVM上で動作するので、
APサーバー起動時に、DBも起動って感じで一手間省けておいしいかなぁーと思って試してみた。

s2jdbc使っているので、jdbc.diconを修正して終わり。すげー簡単です。

サーバーモード:
<component name="xaDataSource"
  class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="driverClassName">
    "org.h2.Driver"
  </property>
  <property name="URL">
    "jdbc:h2:tcp://localhost:9092/hoge_db"
  </property>
  <property name="user">"hoge"</property>
  <property name="password">"hoge"</property>
</component>

組み込みモード:
<component name="xaDataSource"
  class="org.seasar.extension.dbcp.impl.XADataSourceImpl">
  <property name="driverClassName">
    "org.h2.Driver"
  </property>
  <property name="URL">
    "jdbc:h2:file:"
      + @org.seasar.framework.util.ResourceUtil@getBuildDir('app.dicon').getCanonicalPath()
      + "/data/hoge_db;DB_CLOSE_ON_EXIT=FALSE"
  </property>
  <property name="user">"hoge"</property>
  <property name="password">"hoge"</property>
  <destroyMethod>
    @org.seasar.framework.util.DriverManagerUtil@deregisterAllDrivers()
  </destroyMethod>
</component>

この例だと、app.diconのある場所(WEB-INF/classes)のdata以下に、DBファイルが作成される。
開発時、クリーンビルドしちゃうと、消えてしまうので注意。

うまくいったから、採用しようか検討していたら落とし穴があった。

Embeddedモードだと、外部から接続はできない・・・・

APサーバーがファイルをつかんでしまうため、DBに他のツールで同時にアクセスすることができないようだ。

これはこれで開発時には面倒だ。DBViewerとかで内容見たくても、見れない。

そもそも、今のシステムはJamesというメールサーバーからもDBアクセスがあるので致命的。

結局、サーバーモードに戻しました。まあ、組み込みの体験をしてみたということで良しとしよう。

以上


posted by hana at 14:49| Comment(0) | TrackBack(0) | DB,SQL関連 | このブログの読者になる | 更新情報をチェックする
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント:

認証コード: [必須入力]


※画像の中の文字を半角で入力してください。

この記事へのトラックバック