Proxool, the database connection pool manager, has a property that controls how many database connections can be required from the pool simultaneously (concurrent calls to 'getConnection()'). This is a quote from the Proxool documentation:
This is the maximum number of connections we can be building at any one time. That is, the number of new connections that have been requested but aren't yet available for use. Because connections can be built using more than one thread (for instance, when they are built on demand) and it takes a finite time between deciding to build the connection and it becoming available we need some way of ensuring that a lot of threads don't all decide to build a connection at once. (We could solve this in a smarter way - and indeed we will one day) Default is 10.
If this limit it is hit (which is likely to happen if you start Openfire), an SQLException is thrown. DBConnectionManager fails to recognize this, and does not retry to get the connection after the configured amount of milliseconds. Instead, the SQLException is passed to the class requesting the Connection.
Two changes are in order:
the property should be configurable';
DBConnectionManager should retry the get a connection from the pool after a timeout.
I suggest this additional change, which should prevent the problem from occuring in the first place.