I will try to answer for Larry :-)

On 10/14/05, emre akbas <[EMAIL PROTECTED]> wrote:
> 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();
> }
> }
>

boolean insert(){
  try{
     do_the_db_staff();
  }catch(SQLException e){
     log.error("insert", e);
     //do some recovering, maybe rollback
     throw new DAOException(e.getMessage());
  }finally{
     //do cleanup... like closing connections etc.
  }
}


regards
Leon

>
> 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
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to