Well, I use iBATIS in my apps, so I don't think about the java.sql package much - just SQL and POJOs..it's all good. :-D
*However*, for the 1% of the time that I use JDBC, I generally use a template pattern for dealing with resources. Probably the best description of that pattern is in the Spring in Action book from Manning. In a nutshell, you define a template class that manages the resources and it has some abstract callback-type methods that you implement that include resources like connections and resultsets in the parameter list. For example, you may have a method to return a prepared statement that is passed a connection object - in that case, the creation and closing of the connection is handled in the template class. Similarly, you would have a method that processes a result set that is passed in as a parameter - again you handle the closing (and exception handling) in the template class instead of in your application code. These methods simply let the SQLExceptions fly. Larry On 10/14/05, Leon Rosenberg <[EMAIL PROTECTED]> wrote: > 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] > > --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]