DAO pattern 2004-11-21 - By Ananthalakshmi Subramaniyam
Back Hi,
Normally, it is best practice to handle Transaction demarcation outside of DAO, in order to demarcate Transaction between multiple DAOs. This approach is more flexible.
For example,
public class UserTransaction { Connection conn = null; String strUser = null; String strDbUrl = null; String strDbUser = null; String strPassword = null;
public UserTransaction(String strURL, String strUser, String strPassword) { this.strDbUrl = strURL; this.strDbUser = strUser; this.strPassword = strPassword; } public void beginTransaction(...) {} public void endTransaction(...) {} public Connection getConnection() {return connection;} public void commit() {} public void rollback() {} } public class MyDAOFactory { public static UserTransaction transaction = null; public static final String DRIVER= "COM.cloudscape.core.RmiJdbcDriver"; public static final String DBURL= "jdbc:cloudscape:rmi://localhost:1099/CoreJ2EEDB"; public static final String USER ="user"; public static final String PASSWORD = "pwd";
public static UserTransaction getUserTransaction() { if(transaction == null ) { UserTransaction transaction = new UserTransaction (DRIVER,DBRUL,USER,PASSWORD); } return transaction; } ... public AccountDAO getAccountDAO(); } public class AccountDAO { public void credit() { UserTransaction transaction = MyDAOFactory.getUserTransaction();/use existing user transaction or create new one. Connection connection = transaction.getConnection(); Statement stmt = connection.createStatement(sqlQuery); //do the operations. } public void debit() {} ... }
In Caller class,
MyDAOFactory daoFactory = new MyDAOFactory(); UserTransaction transaction = MyDAOFactory.getUserTransaction(); transaction.beginTransaction(); AccountDAO accountDAO = daoFactory.getAccountDAO(); try { accountDAO.credit(); accountDAO.debit(); ... transaction.commit(); } catch(myDAOException ex) { transaction.rollback(); } transaction.endTransaction();
The above approach is helpful in both DAO demarcated Transaction and caller demarcated transaction. ie, in DAO demarcated methods, you may have the following implementation,
public void autonomousCredit() { UserTransaction transaction = MyDAOFactory.getUserTransaction();/use existing user transaction or create new one. transaction.beginTransaction(); Connection connection = transaction.getConnection(); Statement stmt = connection.createStatement(sqlQuery); try { //do the operations. transaction.commit(); } catch(Exception ex) { transaction.rollback(); } transaction.endTransaction(); }
Thanks, H.Ananthalakshmi.
==================================================================== Companion Site: http://www.corej2eepatterns.com J2EE BluePrints: http://java.sun.com/blueprints/corej2eepatterns List Archive: http://archives.java.sun.com/archives/j2eepatterns-interest.html Unsubscribing: email "signoff J2EEPATTERNS-INTEREST" to listserv@(protected)
|
|