Мы используем C3P0 как внутри, так и снаружи Tomcat. Тем не менее, мониторинг и ведение журнала не самые лучшие, поэтому мы начнем использовать пул соединений SpringSource. Одна из лучших функций, которую я с нетерпением жду, - это показ точно, какие операторы SQL выполняются в конкретный момент времени.
Одна вещь, которую мы должны были добавить к C3P0, это способ определения времени, в течение которого конкретный запрос на соединение ожидает соединения, когда пул полон и все соединения заняты:
public Connection getConnection() throws SQLException
{
long t = System.currentTimeMillis();
ComboPooledDataSource ds = (ComboPooledDataSource) getDelegate();
Connection conn = null;
if (ds.getNumBusyConnections() == ds.getMaxPoolSize())
{
logger.info("Pool (" + ds.getUser() + ") full, waiting for connection");
conn = ds.getConnection();
t = System.currentTimeMillis() - t;
logger.info("Connection busy wait time (" + ds.getUser() + "): " + t + "ms");
}
else
{
conn = ds.getConnection();
}
return conn;
}
Итак, что вы должны учитывать:
- поддержка и активность (как вы уже заметили)
- Скорость
- мониторинг, регистрация и контроль производства
BoneCP выглядит быстро (я не слышал об этом раньше), но, честно говоря, C3P0 был более чем быстрым и для нас. Когда мы тестировали 4 или 5 лет назад, DBCP был ужасно медленным (кажется, они это исправили), пул Oracle был довольно медленным, а C3P0 - очень быстрым. Наш тест был очень похож на тест на сайте BoneCP.
Я ничего не знаю об управляемости BoneCP. № 3 оказался для нас наиболее важной функциональностью в производственной среде.