> 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 = someDao.selectSomeData();
if (result = 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 != 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 all
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().
>
> 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.
>
> Jeff Butler
>
>
> On 6/5/07, janne mattila <[EMAIL PROTECTED]> wrote:
> >
> > Basically this means then that I need to ensure that methods that should
> > cause rollback throw an exception which gets thrown from the EJB (and this
> > 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, this
> > 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 = someDao.selectSomeData();
> > if (result = 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 <[EMAIL PROTECTED]> 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 transaction
> > 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 transaction
> > > > > manager and transactions are demarcated on the business logic layer
> > > > > 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 understand 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 instances
> > > > > for the
> > > > > EJB clients and the web app clients?
> > > > >
> > > > > Anything specific that I need to worry about using this approach?
> > > > >
> > > > > ...................................................................
> > > > > Luukku Plus paketilla pääset eroon tila- ja turvallisuusongelmista.
> > > > > Hanki Luukku Plus ja helpotat elämääsi. http://www.mtv3.fi/luukku
> > > > >
> > > >
> > > >
> > > > ...................................................................
> > > > Luukku Plus paketilla pääset eroon tila- ja turvallisuusongelmista.
> > > > Hanki Luukku Plus ja helpotat elämääsi. http://www.mtv3.fi/luukku
> > > >
> > > >
> >
> >
> > ...................................................................
> > Luukku Plus paketilla pääset eroon tila- ja turvallisuusongelmista.
> > Hanki Luukku Plus ja helpotat elämääsi. http://www.mtv3.fi/luukku
> >
> >
...................................................................
Luukku Plus paketilla pääset eroon tila- ja turvallisuusongelmista.
Hanki Luukku Plus ja helpotat elämääsi. http://www.mtv3.fi/luukku