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" <[EMAIL PROTECTED]>
Reply-To: ibatis-user-java@incubator.apache.org
To: <ibatis-user-java@incubator.apache.org>,<[EMAIL PROTECTED]>,<[EMAIL PROTECTED]>
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:[EMAIL PROTECTED]
Sent: Tuesday, May 24, 2005 3:48 PM
To: [EMAIL PROTECTED]; ibatis-user-java@incubator.apache.org;
[EMAIL PROTECTED]
Subject: Re: transactions




>From: Clinton Begin <[EMAIL PROTECTED]>
>Reply-To: [EMAIL PROTECTED]
>To: ibatis-user-java@incubator.apache.org, Brandon Goodin
><[EMAIL PROTECTED]>
>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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]>
> > >Reply-To: Brandon Goodin <[EMAIL PROTECTED]>
> > >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 <[EMAIL PROTECTED]> 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?
> > > >
> > > >
> > > >
> >




Reply via email to