I created a "global" interceptor (below) to simply catch unhandled exceptions 
and send the user to a nice error screen.    I put it in ejb-jar.xml in front 
of the Seam interceptor, since Seam itself is source of Exceptions (no doubt 
because of my abuse of the framework).

My concern was by catching Exception and not rethrowing it, I was bypassing the 
EJB container's rollback.  Sure enough, that's true.  That is, the user sees 
the error page, but the transaction completes normally.

My question is this: what is a good pattern for this?  Should my transactional 
methods (save, delete) always catch exceptions, roll back the transaction 
manually, then rethrow them so it goes to my error page?  Is there a way to 
send the user to an error page without bypassing the EJB transaction processing?

BTW, I tried using the new @Interceptor(type=CLIENT) tag to see if I could move 
my exception handling outside of the EJB calls.  This required removing the 
entry from ejb-jar.xml and adding an 
@Interceptors(MyExceptionInterceptor.class) to the top of my session bean.  
Unfortunately, that resulted in the user seeing the Seam debug page, which is 
helpful but not pretty.  Obviously, I don't fully understand the use of the 
@Interceptor tag...


  | public class MyExceptionInterceptor {
  | 
  |     @AroundInvoke
  |     public Object handleException(InvocationContext invocation) throws 
Exception {
  |         
  |         try {
  |             return invocation.proceed();
  |         }
  |         catch (Exception t) {
  |             return "error";
  |         }
  |     }
  | 
  | }

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

Reply to the post : 
http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=3971412
_______________________________________________
jboss-user mailing list
[email protected]
https://lists.jboss.org/mailman/listinfo/jboss-user

Reply via email to