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]