[ http://issues.apache.org/jira/browse/IBATIS-298?page=all ]
Jeff Butler closed IBATIS-298:
------------------------------
Resolution: Invalid
Not a bug - as confirmed by the original reporter.
> implicit commit does not work if there's an explicit commit right before
> ------------------------------------------------------------------------
>
> Key: IBATIS-298
> URL: http://issues.apache.org/jira/browse/IBATIS-298
> Project: iBatis for Java
> Type: Bug
> Components: DAO
> Versions: 2.1.7
> Reporter: Bill Liu
>
> We've used Ibatis for over 2 years and this's the bug we just found. Consider
> this scenario:
> DaoManager.startTransaction()
> //1. db insert 1:
> do db insert 1
> DaoManager.commitTransaction()
> //an implicit transaction
> do db insert 2 without starting a transaction explicitly.
> What we expected was that the 2 transactions should be committed. However,
> only the first one was but not the second one. We looked at the source code
> and found out why:
> in StandardDaoManager
> public void endTransaction() {
> finally {
> transactionMode.set(null);
> ...
> }
> public void commitTransaction() {
> List ctxList = getContextInTransactionList();
> Iterator i = ctxList.iterator();
> while (i.hasNext()) {
> DaoContext context = (DaoContext) i.next();
> context.commitTransaction();
> }
> }
> Notice in the commitTransaction(), the transactionMode is not set to be null.
> Now in the second implicit transaction, in
> com.ibatis.dao.engine.impl.DaoProxy class, invoke(Object proxy, Method
> method, Object[] args) method,
> if (daoManager.isExplicitTransaction()) {
> // Just start the transaction (explicit)
> try {
> context.startTransaction();
> result = method.invoke(daoImpl.getDaoInstance(), args);
> } catch (Throwable t) {
> throw ClassInfo.unwrapThrowable(t);
> }
> } else {
> // Start, commit and end the transaction (autocommit)
> try {
> context.startTransaction();
> result = method.invoke(daoImpl.getDaoInstance(), args);
> context.commitTransaction();
> ...
> Now daoManager.isExplicitTransaction() returns true! The result: the
> transaction is started for the second query but never committed!
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators:
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see:
http://www.atlassian.com/software/jira