Play フレームワークがコードを再コンパイルした後、C3P0 接続を再作成する際に問題が発生しました。サーバーを手動で停止して再起動する必要があります。最初は、同じ DB インスタンスに 2 つのデータソースを作成できなかったためだと思いましたが、データソースを破棄しても効果がなく、CP30 データソースを 2 回続けて初期化しようとしましたが、それでも機能しました。
これが私の初期化コードです:
cpds = new ComboPooledDataSource();
cpds.setDriverClass(m_driverClass);
cpds.setUser(m_userName);
cpds.setPassword(m_password);
cpds.setMinPoolSize(5);
cpds.setAcquireIncrement(5);
cpds.setMaxPoolSize(20);
cpds.setJdbcUrl(m_jdbcUrl);
checkIfDBExists();
cpds.setJdbcUrl(m_jdbcUrl + ";databaseName=" + m_dbName);
ここに私の破棄コードがあります:
if (cpds != null) {
cpds.resetPoolManager();
cpds.close();
DataSources.destroy(cpds);
}
私のコードは初期化を呼び出すだけで、初期化で destroy() を試みます。また、メタデータを使用して DB が初期化されているかどうかも確認します。
try {
conn = getConnection();
resultSet = conn.getMetaData().getCatalogs();
conn.commit();
} finally {
if (conn != null) conn.close();
}
この getConnection() (単純に cpds.getConnection() を呼び出す) は、再起動時にスタックし、エラー メッセージには、基礎となるデータベースから接続を取得できないことが示されます。
誰が問題が何であるかについて何か考えがありますか?