ibatis-user-java mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Jason Hall" <JH...@cihi.ca>
Subject RE: transactions
Date Tue, 24 May 2005 20:15:30 GMT
Correct me if I'm wrong, my understanding is that the call to startTransactions in the service
layer
automatically is aware of the methods to all called dao classes.  If the the startTransaction
is not called at all
then those 3 updates in the dao layer are not in the transaction. Therefore you must call
startTransaction in the service layer.


-----Original Message-----
From: Lieven De Keyzer [mailto:lieven_dekeyzer@hotmail.com]
Sent: Tuesday, May 24, 2005 4:07 PM
To: ibatis-user-java@incubator.apache.org; cbegin@ibatis.com;
brandon.goodin@gmail.com
Subject: RE: transactions


Yes, I see. But does that mean that I should put every call to a dao that 
occurs in the service in a transaction?
If this is the case:

Service Layer:

doaManager.startTransaction();
accountDao.insertAccount(account);
doaManager.commitTransaction();
....
finally(){doaManager.endTransaction():}

Dao Layer:
public void insertAccount(Account account)
{
update("insertAccount", account);
}

Would this startTransaction() call still be necessary?

>From: "Jason Hall" <JHall@cihi.ca>
>Reply-To: ibatis-user-java@incubator.apache.org
>To: 
><ibatis-user-java@incubator.apache.org>,<cbegin@ibatis.com>,<brandon.goodin@gmail.com>
>Subject: RE: transactions
>Date: Tue, 24 May 2005 16:00:11 -0400
>
>if a an error occurs in any of these 3 updates below
> > > update("insertAccount", account);
> > > update("insertProfile", account);
> > > update("insertSignon", account);
>a rollback will occur before the daoManager.commitTransaction().
>So isn't it safe to say that these updates a wrapped in the transaction?
>Also doesn't this constitute a valid insert of Account?
>
>Example:
>
>Service Layer:
>
>doaManager.startTransaction();
>accountDao.insertAccount(account);
>doaManager.commitTransaction();
>....
>finally(){doaManager.endTransaction():}
>
>Dao Layer:
>public void insertAccount(Account account)
>{
>update("insertAccount", account);
>update("insertProfile", account);
>update("insertSignon", account);
>}
>
>
>
>-----Original Message-----
>From: Lieven De Keyzer [mailto:lieven_dekeyzer@hotmail.com]
>Sent: Tuesday, May 24, 2005 3:48 PM
>To: cbegin@ibatis.com; ibatis-user-java@incubator.apache.org;
>brandon.goodin@gmail.com
>Subject: Re: transactions
>
>
>
>
> >From: Clinton Begin <clinton.begin@gmail.com>
> >Reply-To: cbegin@ibatis.com
> >To: ibatis-user-java@incubator.apache.org, Brandon Goodin
> ><brandon.goodin@gmail.com>
> >Subject: Re: transactions
> >Date: Tue, 24 May 2005 13:40:04 -0600
> >
> >Those update statements ARE in a transaction. But you should NEVER manage
> >transactions inside the DAO. The transaction in this case is taken care 
>of
> >outside of the scope of this particular method (I believe in this case it
> >is
> >actually an automatic DAO transaction, so you might not find the calls to
> >start/commit/end).
>
>So, what you mean is: I should make the transaction in my service layer, 
>and
>inside this transaction call the dao method. But if I change a method in my
>DAO, to have multiple statements, I would also need to change my Service
>class, to place the call in a transaction?
>And how does one specify those automatic transactions?
> >
> >Clinton
> >
> >On 5/24/05, Brandon Goodin <brandon.goodin@gmail.com> wrote:
> > >
> > > Message was sent to me privately... so i am posting it to the list
> > > -----
> > > But for example, in the JPetStoreExample, in the AccountSqlMapDao, 
>this
> >is
> > > a
> > > method:
> > >
> > > public void insertAccount(Account account) {
> > > update("insertAccount", account);
> > > update("insertProfile", account);
> > > update("insertSignon", account);
> > > }
> > >
> > > Aren't those different update statements better off in a transaction?
> >And
> > > why no different calls from the Service layer?
> > > I'm just trying to understand the difference.
> > >
> > > >From: Brandon Goodin <brandon.goodin@gmail.com>
> > > >Reply-To: Brandon Goodin <brandon.goodin@gmail.com>
> > > >To: ibatis-user-java@incubator.apache.org
> > > >Subject: Re: transactions
> > > >Date: Tue, 24 May 2005 12:45:59 -0600
> > > >
> > > >It is not neccessary to call transactions on only one statement.
> > > >
> > > >Transactions should be handled on the Service layer and make more
> > > >fine-grained calls to the DAO layer.
> > > >
> > > >Brandon
> > > >
> > > >On 5/24/05, Lieven De Keyzer <lieven_dekeyzer@hotmail.com> wrote:
> > > > > At http://www.reumann.net/struts/ibatisLesson1/step6.do
> > > > > this is an example in a ibatis/struts tutorial
> > > > >
> > > > > public int update(String statementName, Object parameterObject)
> >throws
> > > > > DaoException {
> > > > > int result = 0;
> > > > > try {
> > > > > sqlMap.startTransaction();
> > > > > result = sqlMap.executeUpdate(statementName, parameterObject);
> > > > > sqlMap.commitTransaction();
> > > > > } catch (SQLException e) {
> > > > > try {
> > > > > sqlMap.rollbackTransaction();
> > > > > } catch (SQLException ex) {
> > > > > throw new DaoException(ex.fillInStackTrace());
> > > > > }
> > > > > throw new DaoException(e.fillInStackTrace());
> > > > > }
> > > > > return result;
> > > > > }
> > > > >
> > > > > Is it necessary to have a transaction started for just 1 statement
> > > > > execution?
> > > > >
> > > > > Also, what's the better way? Doing a transaction in a Service 
>class,
> > > >that
> > > > > has multiple DAO's, or doing it in the DAO class, doing different
> > > >statements
> > > > > in one method? Or is there no difference?
> > > > >
> > > > >
> > > > >
> > >
>
>



Mime
View raw message