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]

Reply via email to