Difference between dbcp and c3p0? Absolutely nothing!
Please forgive me a UHF reference, but I was happy to have a certain mystery cleared up for me today in the Sakai 2.4 Production Performance Experiences panel. It was great to hear about everyone's experiences, since performance is always a huge concern for us. Lots of good information there, but there was also a good question about database connection pooling.
Recently on the dev list, people have been suggesting c3p0 for connection pooling (as opposed to the default dbcp) as cure-all for your (possible) performance woes. However, I wondered what specifically could be gained by moving to c3p0. When Jason mentioned that they had made the switch at Rutgers, and I asked him what made c3p0 better, he told me that he didn't know, but it seemed like a good idea (or something to that extent).
Today I learned that there really isn't a difference per se (at least in terms of performance gains). This issue that schools were dealing with was a "deadlock" where threads were waiting for connections to be made available to them. Indiana switched to c3p0 to fix this problem, but UMich just tuned off "evictions" and "didn't let the pool cycle", which seemed to achieve the same thing with dbcp. Apparently, c3p0 just has better default settings for this, so this may be why people saw performance gains using it.