Hi Martin,
thanks for the help. I wrote my reply to Enrique's mail just before I read
yours.
Glad to see that I was on the right track. Just one little question. Why do
you have
two finally blocks in the DAO - can't you close both the statement and the
result set
in the same finally block?
cheers,
Brian

----- Original Message -----
From: "Martin Vilcans" <[EMAIL PROTECTED]>
To: <[EMAIL PROTECTED]>
Sent: Thursday, June 12, 2003 12:01 PM
Subject: RE: [JBoss-user] Closing database connections


> This code is no good. It doesn't close the connection and it doesn't close
> the PreparedStatement. Depending on what toPage does, it might not close
the
> ResultSet either, and even if it does, it's still somewhat ugly to
allocate
> a resource in one place and close it somewhere else.
>
> I haven't looked at XPetstore, and if this is the standard of the code in
> that project, I think I won't.
>
> Here's more like how I would have done it:
>
>
> //------------- session facade methods-----------------------------
>
>     /**
>      * @ejb.interface-method
>      * @ejb.transaction
>      *      type="NotSupported"
>      */
>     public Page searchProducts( String key, int start, int count )
>     {
>         Connection connection;
>         try
>         {
>             connection = getConnection();
>             // constructor doesn't take a connection parameter:
>             ProductDAO dao = new ProductDAO();
>             // findByKey does instead:
>             return dao.findByKey(connection, "%" + key + "%", start,
> count );
>         }
>         catch( SQLException sql )
>         {
>             throw new EJBException( sql );
>         }
>         finally {
>           connection.close();
>         }
>     }
>
>
>
>     private Connection getConnection()
>     {
>         try
>         {
>             InitialContext ic = new InitialContext();
>             DataSource     ds = ( DataSource )ic.lookup(
> JNDINames.DATASOURCE );
>             return ds.getConnection();
>         }
>         catch( Exception e )
>         {
>             // changed from throw new EJBException();
>             // this aids debugging more
>             throw new EJBException("Failed to get connection", e);
>         }
>     }
>
> //------------- DAO method -----------------------------
>
>     // removed constructor
>
>     // Connection as parameter instead:
>     public Page findByKey(Connection connection, String key, int start,
int
> count )
>         throws SQLException
>     {
>         PreparedStatement stmt = connection.prepareStatement (
> SQL_FIND_BY_KEY,
>                 ResultSet.TYPE_SCROLL_INSENSITIVE,
> ResultSet.CONCUR_READ_ONLY );
>         try {
>
>           stmt.setString ( 1, key );
>           stmt.setString ( 2, key );
>           stmt.setString ( 3, key );
>
>           ResultSet rs = stmt.executeQuery (  );
>           try {
>             return toPage ( rs, start, count );
>           }
>           finally {
>             rs.close();
>           }
>         }
>         finally {
>           stmt.close();
>         }
>     }
>
> I haven't compiled or tested this, but I hope you catch my drift.
>
> Martin
>
>
>
> -------------------------------------------------------
> This SF.NET email is sponsored by: eBay
> Great deals on office technology -- on eBay now! Click here:
> http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5
> _______________________________________________
> JBoss-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user
>



-------------------------------------------------------
This SF.NET email is sponsored by: eBay
Great deals on office technology -- on eBay now! Click here:
http://adfarm.mediaplex.com/ad/ck/711-11697-6916-5
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user

Reply via email to