nekop's blog

OpenShift / JBoss / WildFly / Infinispanの中の人 http://twitter.com/nekop

JBoss ASのデータソースその他のパラメータ

JBoss Advent Calendar 2011の7日目のエントリです。まだ1/3も終わってないんですね。データソースの基本、コネクションプール、障害検知に入らなかった雑多なパラメータを紹介していきます。

  • <query-timeout>
  • <connection-property>
  • <use-java-context>
    • デフォルトtrueです。falseにしないでください。falseにするとDataSourceをVM外からリモート参照することができるようになりますが、リモートで直接データソースを利用してしまうと通信エラーなどでコネクションがクローズされずにリークしたりするので使っちゃダメです。リモートからはDataSource直アクセスではなく、リモートEJBなどを用意し、JDBCEJB内で利用しましょう。
  • <new-connection-sql>
    • コネクション生成時に一回だけ何らかの初期化SQLを流したいという場合に指定する項目です。ごくまれに<check-valid-connection-sql>と同じ意味だと思って同じ内容を記述する人が居ますが、間違いですので注意してください。
  • <stale-connection-checker-class-name>
    • かなり限定されたシチュエーションで使うプラグインですが、JDBCドライバから返却されるSQLExceptionを元にリトライ可能な状況を判断し、その場合に特定の例外StaleConnectionExceptionを返却します。アプリケーションではStaleConnectionExceptionをcatchしてハンドルする必要があります。必要になることはほとんど無いでしょう。
  • <track-statements>
    • StatementやResultSetのクローズ漏れをクローズします。true, nowarn, falseの3つの値が選択でき、デフォルトはnowarnでログ出力無しでクローズします。trueにするとWARNでクローズ漏れの箇所を示すスタックトレースとログが出力されます。今時あまり無いとは思いますが生JDBCで開発している、というような場合は開発時にtrueにしておくと良いかもしません。
  • <share-prepared-statements>
    • PreparedStatementキャッシュのカスタマイズオプションで、PreparedStatementをクローズせずに同じSQLを再度発行するときに同一のPreparedStatementインスタンスのキャッシュを返却したい場合trueを設定します。デフォルトはfalseです。同一SQL複数回発行して複数のResultSetを同時に扱う、というユースケースですが、このユースケースはほとんど使われない(基本開いて閉じる、という形であり、このような開いたままで複数同時進行するようなコードが書けることを知らない人が多数でしょう)ので、基本的に設定する必要はありません。JDBCドライバによっては期待どおりに動かない可能性があるので、利用する場合は必ずこのユースケースをテストしてください。

ローカルJDBCデータソースの解説はこの3日間のエントリで一通り終わりました。データソースフェイルオーバとXAデータソースについてまた別のエントリにする予定です。