0

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() を呼び出す) は、再起動時にスタックし、エラー メッセージには、基礎となるデータベースから接続を取得できないことが示されます。

誰が問題が何であるかについて何か考えがありますか?

4

0 に答える 0