Larry, I think you are using DAO. Then, I want to ask you how do you deal
with the SQLException's and unclosed connections in your DAO classes if you
are using JDBC as the persistence layer.

Say, you have CustomerDAO and it has a insert method:

public class CustomerDAO {
boolean insert() {
Connection con = getDataSource().getConnection();
.....
// an exception occurs here
......
con.close();
}
}


Do you catch this exception in the DAO method or do you throw it outside?
When you throw it outside, the local connection will be unclosed. What do
you to prevent such issues? Thanks in advance.




---------- Forwarded message ----------
From: Larry Meadors <[EMAIL PROTECTED]>
To: Struts Users Mailing List <user@struts.apache.org>
Date: Thu, 13 Oct 2005 08:36:47 -0600
Subject: Re: Struts and db connections :: best practice
I would argue that a well-written struts application will *never* (at
least 99.999% of the time) have jdbc code in it.

Larry


On 10/13/05, emre akbas <[EMAIL PROTECTED]> wrote:
> Hi all,
> In a well written struts application, we assume declarative exception
> handling is used. Therefore the code of the action classes will look clean
> and short (and nice) because all the exception handling is done via the
> exception-handler classes outside. My question is about db connection
> management when declarative exception handling is used.
>
> A usual scenario is :
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ~~~~~~~~~~~~~~~~~~~~~~~~
> public class MyAction extends Action {
> ...
> public ActionForward execute( . .. ) {
> ..
> Connection con = getDataSource().getConnection();
>
> // an exception occurs here and the control passes to the
> // exception-handler class, which can never close the connection
> // opened above.
> ....
>
> con.close();
> }
> ...
> }
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
>
> What to do in a situation like above? Since the exception-handler could
not
> close the connection opened in the Action class, this will cause the
> connections in the pool to be exhausted. To prevent the situation above,
we
> may :
>
> ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
> public class MyAction extends Action {
> ...
> public ActionForward execute( . .. ) {
> ..
> Connection con = null;
> try {
> con = getDataSource().getConnection();
>
> // an exception occurs here
> ....
>
> } catch(MyAppSpecifiException e) {
> ....
> } catch(Exception e) { // IMPORTANT, this line will catch all the
exceptions
> ....
> } finally {
> con.close();
> }
>
> }
> ...
> }
>
>
> The scheme above seems to solve the unclosed connection problem but it
does
> not use declarative exception-handling and the code is really messed-up
with
> exception handling statements. It does not look nice, clean and short.
>
> The situation is more complicated when you call a service method within
the
> action and that service method throws an exception.
>
> I would like to hear your points on this issuse. Thanks in advance.
>
>
> --
>
> Emre Akbas
>
>



--
Emre Akbas

Reply via email to