Great. I added my "patch" as a comment [1] (seemed easier than producing an
actual .patch file, but if you need it I can also make you that).

[1]
https://issues.apache.org/jira/browse/DBCP-426?focusedCommentId=14152285&page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#comment-14152285

2014-09-29 22:01 GMT+02:00 Phil Steitz <phil.ste...@gmail.com>:

> On 9/29/14 2:55 AM, Kasper Sørensen wrote:
> > OK thank you for your replies. I will suggest in the Apache MetaModel dev
> > mailing list to do it in that layer instead then.
> >
> > On that subject ... do you know of a way for us to mark a connection
> > invalid? I don't see any methods on BasicDataSource to do that - is
> there a
> > way that you know of?
>
> There is no simple way to do this, unfortunately.  I just opened
> DBCP-426 to track this.  Patches welcome.
>
> Phil
> >
> > 2014-09-25 3:04 GMT+02:00 Bernd Eckenfels <e...@zusammenkunft.net>:
> >
> >> Hello,
> >>
> >> Replaying statements is hard as You also have to keep session context,
> >> understand various error categories and in case of modifying statements,
> >> You also need to hook into transaction Management to make it fast,
> reliable
> >> and cobsistent.
> >>
> >> The JDBC drivers of Oracle together with its universal cinnection pool
> >> allow to retry select statements (TAF failover type select) as well as
> more
> >> recently midifying statements with the help of the transaction guard
> >> feature (http://docs.oracle.com/database/121/JJDBC/transactionguard.htm
> ).
> >>
> >> For an ORM or Persistence Layer it might be a bit easier than for a low
> >> Level connection pool. on the other hand i always wished for jdbc pools
> >> with no fixed direct relation between logical and managed connection
> >> objects.
> >>
> >> --
> >> http://bernd.eckenfels.net
> >>
> >> ----- Ursprüngliche Nachricht -----
> >> Von: "woon_san" <woon_...@yahoo.com.INVALID>
> >> Gesendet: ‎25.‎09.‎2014 01:38
> >> An: "Commons Developers List" <dev@commons.apache.org>
> >> Betreff: RE: A reactive way to deal with stale connections
> >>
> >> Hi Kasper,
> >>
> >> It's an interesting feature, but I don't think that should belong to
> >> commons-dbcp. Commons-dbcp module provides lower level JDBC api such as
> >> DataSource and Connection, whereas your use case seems to be proper
> with a
> >> higer level data access module.
> >> You might want to take a look at that kind of higher level modules like
> >> spring framework jdbc template:
> >> -
> >>
> http://docs.spring.io/spring-framework/docs/current/spring-framework-reference/html/jdbc.html
> >>
> >> , which provides similar features such as transaction management for
> >> instance and extensibility.
> >> Probably there are orher data access libraries like this as well.
> >>
> >> Regards,
> >>
> >> Woonsan
> >> (Sent via my mobile device. Apologies for any typos.)
> >>
> >> <div>-------- Original message --------</div><div>From: Kasper Sørensen
> <
> >> i.am.kasper.soren...@gmail.com> </div><div>Date:09/24/2014  13:44
> >> (GMT-05:00) </div><div>To: dev@commons.apache.org </div><div>Subject: A
> >> reactive way to deal with stale connections </div><div>
> >> </div>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
> >>
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: dev-unsubscr...@commons.apache.org
> For additional commands, e-mail: dev-h...@commons.apache.org
>
>

Reply via email to