You are viewing a plain text version of this content. The canonical link for it is here.
Posted to user@turbine.apache.org by Rodney Schneider <rl...@arcalink.com> on 2002/04/03 02:56:22 UTC

Re: Sharing one connection across objects

> "Nikhil G. Daddikar" wrote:
> > Hi Folks,
> >
> > We are moving to using turbine from our home-grown "framework" and have
> > been quite pleased.
> >
> > However I have a few questions. Here is one of them:
> >
> >     While handling a web request, a bunch of java objects do database
> > calls over jdbc. I want to do this in a transaction => use the same
> > connection in all the jdbc calls.
> >
> > Currently we have a per-web-request context object that has the
> > dbconnection object in it. RunData doesn't seem to have it. What is the
> > 'turbine recommended' way?

Are you using Torque and Peers?  If so, you will notice in the generated 
classes that you can pass in a DBConnection object to all methods that access 
your database.  You will also notice that the methods in BasePeer (doSelect, 
doInsert, doUpdate, doDelete) handle transactions for you by calling 
transaction handling methods in BasePeer (beginTransaction(), 
commitTransaction() and rollBackTransaction()).

If you are going to implement your own RunData to provide a per-web-request 
DBConnection object in it, you will need to do the transaction handling 
yourself.  See the following code for an example of how to use the Turbine 
connection pool...

----------

import java.sql.Connection;
import org.apache.turbine.services.db.TurbineDB;
import org.apache.turbine.util.db.pool.DBConnection;

try {
   // get a connection from the pool
   DBConnection dbConn = TurbineDB.getConnection();
   // start the transaction
   dbConn.setAutoCommit(false);

   // the following line may be necessary if you are not using Torque...
   Connection connection = dbConn.getConnection();
   ...
   // perform your database calls here
   ...
   // commit the transaction
   dbConn.commit();
   dbConn.setAutoCommit(true);
} catch (Exception e) {
   // rollback the transaction
   dbConn.rollback();
   dbConn.setAutoCommit(true);
}
finally {
   // release the connection back to the pool
   try {
      TurbineDB.releaseConnection(db);
   } catch (Exception ignored) {}
}

----------

Hope this helps,

-- Rodney

--
To unsubscribe, e-mail:   <ma...@jakarta.apache.org>
For additional commands, e-mail: <ma...@jakarta.apache.org>