業務でJava 8製システムのお守りをすることになり、情報収集でWebを検索していてJavaの日本語情報のプレゼンス低下を強く感じる今日このごろ。そんな中Hibernate ORMを使ってデータベースにアクセスするWildFlyモジュールの一部機能をスタンドアロンアプリケーションに切り出したところ、実行時にUsing Hibernate built-in connection pool (not for production use!)
と警告されてしまいました。組み込みのデータベースコネクションプールは開発用で運用向けではないんですねえ、なるほど。Hibernate ORM User Guideの8. Database Access、8.1. ConnectionProviderでもThe built-in connection pool is not supported for use in a production system.
とあります。
同システムの既存のスタンドアロンアプリケーションでコネクションプールのライブラリを明示的に指定しているものはなく、それで問題が起きたという話も聞かないので、開発用と言いながら必要十分な性能・機能は擁しているのかもしれません。とはいえ気づいてしまったからには無視するわけにもいきません。Hibernate ORMは歴史的にはc3p0というコネクションプールライブラリとの関係が深いようなので、明示指定して対応することとしました。具体的な作業は次。
- ビルドの際に次の関連パッケージを参照するようにする
- c3p0(Maven Repository: com.mchange » c3p0)
- Hibernate ORMとc3p0を統合するhibernate-c3p0(Maven Repository: org.hibernate.orm » hibernate-c3p0)
- c3p0の設定をpersistence.xmlに記述する
いまどきWildFlyやSpring、Play FrameworkといったWebフレームワーク等を介さずにデータベースにアクセスするJava製スタンドアローンアプリケーションの需要がどれくらいあるのかはわかりませんが(Webフレームワークで動かすのであればコネクションプールはWebフレームワークが面倒を見てくれます)、回答のない質問を目にしたりもしたので、誰かの役に立つこともあるかもしれないということで日本語の情報として記録しておく次第です。参考になりましたら幸いです。