if you want the internal udpates to be in a transaction... yes. Otherwise they will each execute in their own transaction apart from each other.
Brandon On 5/24/05, Lieven De Keyzer <[EMAIL PROTECTED]> wrote: > 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? > > > > > > > > > > > > > > > > > > > > > > > > > > > > >