I have a stateful session bean that will deadlock relatively easily. I'd like very 
much for my client to be able to detect deadlock situations and restart offending 
transactions. However, ApplicationDeadlockExceptions aren't propogated to the client.

My beans use CMT; org.jboss.ejb.plugins.TxInterceptorCMT successfully detects any 
deadlocks, throws an ApplicationDeadlockException, and re-tries the transaction. 
Unfortunately, org.jboss.ejb.plugins.StatefulSessionInstanceInterceptor is higher in 
the interceptor stack, and has already caught the ApplicationDeadlockException, and, 
as it is a subclass of java.rmi.RemoteException, has discarded the offending session 
bean instance. Thus when TxInterceptorCMT re-tries the transaction, the offending 
session bean instance is no longer available, and a java.rmi.NoSuchObjectException is 
thrown and propagated to the client.

The result is my client gets a NoSuchObjectException (with no chained exceptions) and 
has no way of determining whether this was due to a deadlock (in which case it can 
automatically create a new session bean instance, and re-try the transaction) or some 
other exceptional error.

Is there any way to prevent TxInterceptorCMT from re-trying transactions that have 
deadlocked, without customising TxInterceptorCMT (or writing a customer TX 
interceptor), and other than setting TxInterceptorCMT.MAX_RETRIES from custom Java 
code? Should I use BMT instead? My preferred solution would be to "save" a stateful 
session bean instance from being discarded when a deadlock is detected by JBoss, but 
as long as ApplicationDeadlockException extends java.rmi.RemoteException, I assume 
this is not possible.

I'm using JBoss 3.2.3. Any help will be much appreciated.

My apologies for possibly posting this in the wrong forum; it's been in the EJB user 
forum (with subject "ApplicationDeadlockException, retries and stateful session 
beans") for over a month, with 33 page views and zero replies or leads. It does seem 
to be a bug/flaw that TxInterceptor prevents client code from detecting the 
ApplicationDeadlockException by re-trying the transaction and thus triggering the 
NoSuchObjectException, without any deployment options for customising this (other than 
linking directly against JBoss code and modifying TxInterceptorCMT.MAX_RETRIES).

Cheers,

Damian


View the original post : 
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=3836154#3836154

Reply to the post : 
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=3836154



-------------------------------------------------------
This SF.Net email is sponsored by: Oracle 10g
Get certified on the hottest thing ever to hit the market... Oracle 10g. 
Take an Oracle 10g class now, and we'll give you the exam FREE.
http://ads.osdn.com/?ad_id=3149&alloc_id=8166&op=click
_______________________________________________
JBoss-Development mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-development

Reply via email to