geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "David Jencks (JIRA)" <>
Subject [jira] Commented: (GERONIMO-4448) TransactionManager resume method should only resume previously suspended transaction
Date Tue, 09 Dec 2008 18:43:44 GMT


David Jencks commented on GERONIMO-4448:

I think I might have not looked at your test hard enough.  I think I must have missed the

There are a few questions here...
- what is a valid non-null transaction.  After some hints from others I think the answer is
a tx that has not had (directly or through the tm) commit() or rollback() called on it.
- is null a valid transaction. For ease of use I think the answer is "yes"
- does the argument to resume need to be obtained from suspend.  I think "no".

So... I think the following ought to pass:

-- your original test

// null is a valid tx
//tm.commit(); just make sure there's no tx
tm.suspend();//will return null

//resume works on any valid tx,
tx = tm.getTransaction();

//commit/rollback invalidates a tx no matter how tx is committed (directly or through tm)
tx = tm.getTransaction();
tx.commit(); //or rollback
try {
} catch (InvalidTransactionException e) {

Hopefully I haven't overlooked any other obvious points.

> TransactionManager resume method should only resume previously suspended transaction
> ------------------------------------------------------------------------------------
>                 Key: GERONIMO-4448
>                 URL:
>             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,
> 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.

View raw message