[
https://issues.apache.org/jira/browse/GERONIMO-4448?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Lin Sun updated GERONIMO-4448:
------------------------------
Description:
Currently, the resume manager resumes pretty much any transaction as long as
the transaction is not null and is an instance of TransactionImpl.
I think this is incorrect. Per the jTA 1.1 spec, page 13:
Suspending and Resuming a Transaction
A call to theTransactionManager.suspend method temporarily suspends the
transaction that is currently associated with the calling thread. If the thread
is not
associated with any transaction, anull object reference is returned; otherwise,
a valid
Transaction object is returned. TheTransactionobject can later be passed to the
resume method to reinstate the transaction context association with the calling
thread.
TheTransactionManager.resumemethod re-associates the specified transaction
context with the calling thread. If the transaction specified is a valid
transaction, the
transaction context is associated with the calling thread; otherwise, the
thread is
associated with no transaction.
Transaction tobj = TransactionManager.suspend();
..
TransactionManager.resume(tobj);
A simple test below would reveal the prob:
{code}
public void testResume1() throws Exception {
Transaction tx;
assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
tm.begin();
assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
tx = tm.getTransaction();
assertNotNull(tx);
assertEquals(Status.STATUS_ACTIVE, tx.getStatus());
tm.commit();
assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
assertNull(tm.getTransaction());
try {
tm.resume(tx);
fail();
} catch (InvalidTransactionException e) {
// expected
}
}
{code}
was:
Currently, the resume manager resumes pretty much any transaction as long as
the transaction is not null and is an instance of TransactionImpl.
I think this is incorrect. Per the jTA 1.1 spec, page 13:
Suspending and Resuming a Transaction
A call to theTransactionManager.suspend method temporarily suspends the
transaction that is currently associated with the calling thread. If the thread
is not
associated with any transaction, anull object reference is returned; otherwise,
a valid
Transaction object is returned. TheTransactionobject can later be passed to the
resume method to reinstate the transaction context association with the calling
thread.
TheTransactionManager.resumemethod re-associates the specified transaction
context with the calling thread. If the transaction specified is a valid
transaction, the
transaction context is associated with the calling thread; otherwise, the
thread is
associated with no transaction.
Transaction tobj = TransactionManager.suspend();
..
TransactionManager.resume(tobj);
A simple test below would reveal the prob:
public void testResume1() throws Exception {
Transaction tx;
assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
tm.begin();
assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
tx = tm.getTransaction();
assertNotNull(tx);
assertEquals(Status.STATUS_ACTIVE, tx.getStatus());
tm.commit();
assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
assertNull(tm.getTransaction());
try {
tm.resume(tx);
fail();
} catch (InvalidTransactionException e) {
// expected
}
}
> TransactionManager resume method should only resume previously suspended
> transaction
> ------------------------------------------------------------------------------------
>
> Key: GERONIMO-4448
> URL: https://issues.apache.org/jira/browse/GERONIMO-4448
> Project: Geronimo
> Issue Type: Bug
> Security Level: public(Regular issues)
> Components: transaction manager
> Affects Versions: 2.2
> Reporter: Lin Sun
> Assignee: Lin Sun
> Fix For: 2.2
>
>
> Currently, the resume manager resumes pretty much any transaction as long as
> the transaction is not null and is an instance of TransactionImpl.
> I think this is incorrect. Per the jTA 1.1 spec, page 13:
> Suspending and Resuming a Transaction
> A call to theTransactionManager.suspend method temporarily suspends the
> transaction that is currently associated with the calling thread. If the
> thread is not
> associated with any transaction, anull object reference is returned;
> otherwise, a valid
> Transaction object is returned. TheTransactionobject can later be passed to
> the
> resume method to reinstate the transaction context association with the
> calling thread.
> TheTransactionManager.resumemethod re-associates the specified transaction
> context with the calling thread. If the transaction specified is a valid
> transaction, the
> transaction context is associated with the calling thread; otherwise, the
> thread is
> associated with no transaction.
> Transaction tobj = TransactionManager.suspend();
> ..
> TransactionManager.resume(tobj);
> A simple test below would reveal the prob:
> {code}
> public void testResume1() throws Exception {
> Transaction tx;
> assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
> tm.begin();
> assertEquals(Status.STATUS_ACTIVE, tm.getStatus());
> tx = tm.getTransaction();
> assertNotNull(tx);
> assertEquals(Status.STATUS_ACTIVE, tx.getStatus());
>
> tm.commit();
> assertEquals(Status.STATUS_NO_TRANSACTION, tm.getStatus());
> assertNull(tm.getTransaction());
>
> try {
> tm.resume(tx);
> fail();
> } catch (InvalidTransactionException e) {
> // expected
> }
> }
> {code}
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.