You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@commons.apache.org by Kasper Sørensen <i....@gmail.com> on 2014/09/24 19:44:15 UTC
A reactive way to deal with stale connections
Hi,
In many projects I have been working on we're using commons-dbcp, and in
particular the BasicDataSource. A common set-up there is to use
"testOnBorrow" and a validation query to ensure that borrowed JDBC
connections are working when we get them.
The downside of this approach is that it's pretty heavy-weight to have to
test each borrowed connection when there's a high load on the system.
So I wanted to bounce an idea I have for improving the way we validate
connections. Maybe it can even become a contribution to commons-dbcp, or
maybe it's a application-specific improvement.
My idea is inspired by the "let it crash" (and retry) way of thinking.
Every time a connection would throw an exception, we would retry the latest
command. As such, each querying or updation operation would thus be wrapped
in a command, so that there's a central executor object that would manage
the retry mechanism etc.
Here's a small example:
-------
Command c = new Command() {
public void doWithConnection(Connection c) {
// do some querying or some updation stuff with the connection
}
}
CommandExecutor executor = new CommandExecutor(dataSource);
executor.execute(c);
-------
We see issues with the connections very rarely, but we need to be able to
overcome it. I think this approach would archieve that. It could even
ensure that a transaction is created before executing the command, and
committed after the command. That way a failing command would not leave
behind side-effects.
Or do you guys see reasons why this would not work properly?
Would it make sense to put into commons-dbcp you think?
(I am working also on Apache MetaModel (incubating) and would consider
doing it there, if you don't think it's good for commons-dbcp).
Best regards,
Kasper Sørensen