Return-Path: Delivered-To: apmail-ibatis-user-java-archive@www.apache.org Received: (qmail 99298 invoked from network); 5 Jun 2007 14:04:29 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (140.211.11.2) by minotaur.apache.org with SMTP; 5 Jun 2007 14:04:29 -0000 Received: (qmail 98772 invoked by uid 500); 5 Jun 2007 14:04:30 -0000 Delivered-To: apmail-ibatis-user-java-archive@ibatis.apache.org Received: (qmail 98755 invoked by uid 500); 5 Jun 2007 14:04:30 -0000 Mailing-List: contact user-java-help@ibatis.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: user-java@ibatis.apache.org Delivered-To: mailing list user-java@ibatis.apache.org Received: (qmail 98744 invoked by uid 99); 5 Jun 2007 14:04:30 -0000 Received: from herse.apache.org (HELO herse.apache.org) (140.211.11.133) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Jun 2007 07:04:30 -0700 X-ASF-Spam-Status: No, hits=0.3 required=10.0 tests=MAILTO_TO_SPAM_ADDR X-Spam-Check-By: apache.org Received-SPF: pass (herse.apache.org: local policy) Received: from [193.209.83.251] (HELO mato.luukku.com) (193.209.83.251) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 05 Jun 2007 07:04:23 -0700 Received: from localhost (mta3-o.i.luukku.com [10.0.1.132]) by mato.luukku.com (Postfix) with ESMTP id 4251BFF8C4 for ; Tue, 5 Jun 2007 17:03:58 +0300 (EEST) Received: from lattia (www6.i.luukku.com [10.0.1.36]) by mta3-g.i.luukku.com (Postfix) with ESMTP id 1EE0A7FC04 for ; Tue, 5 Jun 2007 17:03:58 +0300 (EEST) Received: from null (esprx01x.nokia.com. [192.100.124.218]) by www6.luukku.com (luukku.com) with HTTP 1.0; Tue, 5 Jun 2007 17:03:58 +0300 (EEST) Message-ID: <1181052238118.jansu76.36411.bk-7WmfxAA5wQTSh7_alzw@luukku.com> Date: Tue, 5 Jun 2007 17:03:58 +0300 (EEST) From: janne mattila To: user-java@ibatis.apache.org Subject: Re: TransactionManager config for simultaneous EXTERNAL and JDBC transactions MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: quoted-printable X-Originating-IP: [172.22.145.237, 192.100.124.218] X-Virus-Checked: Checked by ClamAV on apache.org > The book is referring to the fact that you can leave the transaction > code in > your DAOs and use different configurations. For example, one > SqlMapConfig.xml that specifies JDBC/SIMPLE, another that specifies > EXTERNAL/JNDI - the same code will work unmodified. When you use > EXTERNAL, > the rollback methods are no-op methods so there's no harm in leaving > them in > the code. Yeah, well, that was exactly my point. Example code: daoManager.startTransaction; try { someDao.doSomeUpdate(); int result =3D someDao.selectSomeData(); if (result =3D 42) { // everything is fine, commit daoManager.commitTransaction(); } else { // wrong value, need to rollback (no exception) } } finally { daoManager.endTransaction; } does _not_ work unmodified with different configurations. With JDBC config = it rolls back when result !=3D 42, and with EXTERNAL config it commits. For= sure you _can_ implement methods that work unmodified, you just need to be= aware of this.... I think it would be easier to implement methods that work identically in al= l configs if daoManager had a rollbackTransaction method, but it does not. Jeff Butler kirjoitti 05.06.2007 kello 16:40: > Sure - but this is normal. If you throw an unchecked exception, the > container will roll-back the transaction. If you throw a checked > exception, > you'll need to call context.setRollbackOnly(). >=20 > The book is referring to the fact that you can leave the transaction > code in > your DAOs and use different configurations. For example, one > SqlMapConfig.xml that specifies JDBC/SIMPLE, another that specifies > EXTERNAL/JNDI - the same code will work unmodified. When you use > EXTERNAL, > the rollback methods are no-op methods so there's no harm in leaving > them in > the code. >=20 > Jeff Butler >=20 >=20 > On 6/5/07, janne mattila wrote: > > > > Basically this means then that I need to ensure that methods that shoul= d > > cause rollback throw an exception which gets thrown from the EJB (and t= his > > causes rollback for the EJB transaction). > > > > "iBatis in Action" mentions how you can switch from local to global > > transactions and still use the same code without modifications. Well, t= his > > is not exactly true then, or at least you need to ensure that you don't > have > > code which causes rollback when using local transactions (by calling > > endTransaction without calling commitTransaction) without throwing > > exceptions, as this would not cause a rollback when using a global (EJB= ) > > transaction. > > > > as in, following code would cause problems: > > > > daoManager.startTransaction; > > try { > > someDao.doSomeUpdate(); > > int result =3D someDao.selectSomeData(); > > if (result =3D 42) { > > // everything is fine, commit > > daoManager.commitTransaction(); > > } else { > > // wrong value, need to rollback (no exception) > > } > > } finally { > > daoManager.endTransaction; > > } > > > > > > > > Jeff Butler kirjoitti 05.06.2007 kello 15:32: > > > When using EXTERNAL transaction manager the start, end, and commit > > > methods > > > do nothing. It is expected that the EXTERNAL manager is dealing with > > > commit. EXTERNAL is used with EJB container managed transactions > > > where the > > > EJB conteiner handles all transactions. > > > > > > At the risk of speaking heresy...why don't you have a stateless > > > session EJB > > > facade that handles transactions? The JSP/Action tier can easily > > > call the > > > EJB methods. If you want to have a different EJB layer for other > > > clients, > > > that layer can easily propogate it's transaction to the EJB facade. > > > Simple! > > > > > > Or, if you've drunk the Spring kool-aid, you can use Spring to inject= a > > > transaction manager into the iBATIS config differently for different > > > clients. > > > > > > Jeff Butler > > > > > > > > > > > > On 6/5/07, janne mattila wrote: > > > > > > > > Follow-up question: what happens when EXTERNAL transaction manager = is > > > > used, transaction is started with DaoManager.startTransaction, and > > > > transaction is ended using DaoManager.endTransaction and transactio= n > > has > > > > _not_ been committed using DaoManager.commitTransaction? > > > > > > > > Does this cause the external transaction to be rolled back (like it > > would > > > > cause a JDBC transaction to be rolled back)? > > > > > > > > janne mattila kirjoitti 05.06.2007 kello 15:10: > > > > > I am implementing a system which has a number of iBatis DAOs that > > > > > are used > > > > > both by EJB clients and basic web application code. > > > > > > > > > > Architecture will be like > > > > > > > > > > (EJB) > > > > > (JSPs/Actions etc) > > > > > | > > > > > | > > > > > | > > > > > (business logic layer) > > > > > | > > > > > | > > > > > | > > > > > (DAOs) > > > > > > > > > > EJBs use container managed transactions, and hence I should use > > EXTERNAL > > > > > transaction manager. > > > > > > > > > > Web application code should use basic iBatis JNDI/SIMPLE transact= ion > > > > > manager and transactions are demarcated on the business logic lay= er > > > > > using > > > > > daoManager.startTransaction() etc. > > > > > > > > > > Both "business logic clients" (EJB & web app code) should use the > > same > > > > > business logic methods (which use the same DAO code). I understan= d I > > can > > > > > use the same business logic layer for both, since for example > > > > > daoManager.commitTransaction() will not do anything if EXTERNAL > > > > > transactions are configured? > > > > > > > > > > How should iBatis configuration be done??? Do I have to have > > separate > > > > > dao1.xml and dao2.xml files and build separate DaoManager instanc= es > > > > > for the > > > > > EJB clients and the web app clients? > > > > > > > > > > Anything specific that I need to worry about using this approach? > > > > > > > > > > .................................................................= .. > > > > > Luukku Plus paketilla p=E4=E4set eroon tila- ja turvallisuusongel= mista. > > > > > Hanki Luukku Plus ja helpotat el=E4m=E4=E4si. http://www.mtv3.fi/= luukku > > > > > > > > > > > > > > > > > ................................................................... > > > > Luukku Plus paketilla p=E4=E4set eroon tila- ja turvallisuusongelmi= sta. > > > > Hanki Luukku Plus ja helpotat el=E4m=E4=E4si. http://www.mtv3.fi/lu= ukku > > > > > > > > > > > > > > ................................................................... > > Luukku Plus paketilla p=E4=E4set eroon tila- ja turvallisuusongelmista. > > Hanki Luukku Plus ja helpotat el=E4m=E4=E4si. http://www.mtv3.fi/luukku > > > > ................................................................... Luukku Plus paketilla p=E4=E4set eroon tila- ja turvallisuusongelmista. Hanki Luukku Plus ja helpotat el=E4m=E4=E4si. http://www.mtv3.fi/luukku