I evaluated UCP 11.2.0.1 as a replacement for our legacy connection pool and I cannot recommend it:
- it does not fully support jdk 6 / ojdbc6.jar. For example the use of statement caching and jmx-support does not work with java 6 and throws exceptions.
- no internal statement cache - it relies on the jdbc driver's statement cache (
setPoolable()
)
- I submitted both issues to oracle, they confirmed it and will probably fix it when oracle 12.0 will be released. But even that's not for sure.
- Too few releases (2 releases in 3 years), too less community support.
- Not Open-Source
- Hardly extensible. Only a few callbacks with an horrible interface design.
Example: You want to be notified when a Connection exceeds its TTL? Prepare for a wrapper DataSource and a mass usage of internal/proprietary UCP APIs. The official documentation (last update: 2008) remains silent how to achive this.
- Fat design (almost a 0,5 MB jar) - many classes with similar names/function (e.g. there's a
PoolDataSource
and a ConnectionPool
- both are related but invoked differently and provide slightly different functionality.)
- java.util.logging only
UPDATE 1 (April 2014):
Although slightly off-topic: As a result of my evaluation I decided to go with the new tomcat jdbc-pool - and it is working almost perfectly since a year in several production systems. It's very well designed, updated regularly, extensible and the apache tomcat team does a good job in responding to questions/fixing issues.
UPDATE 2 (July 2016):
I can now highly recommend HikariCP which I'm currently favoring over all other connection pools.
Its architecture, focus on correctness and performance is just amazing.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…