If the logs are silent and upgrading dbcp is out of the question (it probably wouldn't help anyway), you'll need to review your code.
You'll need to go over all places in your code where a database connection is obtained from connection pool, and inspect what is happening to the connection thereafter. Ideally, the connection should be used to run a business transaction on it, ending up with a commit or a rollback, and definitely should be closed when the processing is finished. The closing must happen in a
finally block, and no command in the same finally block preceding the connection close should be able to throw an exception (Java 7 try-with-resources would be an ideal way to do this, since it ensures that
close() is called in all possible cases). Any deviation from this scheme is suspicious and needs to be verified.
You would be especially looking for indications that the connection is somehow transferred to other threads. It could be done by storing it somewhere where it can be accessed by other threads, such as static variables or, say, a session or
servlet context.