I linked this issue to where it was originally reported
http://jira.jboss.com/jira/browse/JBAS-4980
But the fix shows what is generally wrong with a lot of the EJB3 code
(especially the deployment stuff).
|
| // Commit or rollback depending on the status
| if (commit == false || transaction.getStatus() ==
Status.STATUS_MARKED_ROLLBACK)
| {
| if (trace)
| log.trace("MessageEndpoint " + getProxyString(proxy) +
" rollback");
| tm.rollback();
| }
| else
| {
| if (trace)
| log.trace("MessageEndpoint " + getProxyString(proxy) +
" commit");
| tm.commit();
| }
|
| // We're done with the transaction
| transaction = null;
|
So if tm.commit() throws an error, the transaction variable is not cleared
meaning the problem is not fixed.
The nulling of the transaction variable should be in the finally block further down:
| finally
| {
| + transaction = null;
|
| // Resume any suspended transaction
| if (currentTx != null)
| {
| try
| {
| tm.resume(currentTx);
| }
| catch (Throwable t)
| {
| log.warn("MessageEndpoint " + getProxyString(proxy) + "
failed to resume old transaction " + currentTx);
|
| }
| }
| }
|
Basically, the code works great under normal circumstances
but falls apart on any error.
View the original post :
http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4109874#...
Reply to the post :
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&a...