[jboss-user] [EJB3] - Re: Why application exceptions are wrapped in EJBException on AS 6.1?

goldm do-not-reply at jboss.com
Thu Nov 10 03:45:18 EST 2011

goldm [http://community.jboss.org/people/goldm] created the discussion

"Re: Why application exceptions are wrapped in EJBException on AS 6.1?"

To view the discussion, visit: http://community.jboss.org/message/635878#635878


yes, there is one. You can extend BMTTxInterceptorFactory and override method createPerJoinpoint. In returned instance of StatelessBMTInterceptor, override handleException method - check if ApplicationException annotation is present on exception class.

Something like this:

public class BMTTxInterceptorFactoryCustom extends BMTTxInterceptorFactory
   private static final Logger log = Logger.getLogger(BMTTxInterceptorFactoryCustom.class);

   public Object createPerJoinpoint(Advisor advisor, Joinpoint jp)
      // We have to do this until AOP supports matching based on annotation attributes
      TransactionManagementType type = TxUtil.getTransactionManagementType(advisor);
      if (type != TransactionManagementType.BEAN)
         return new NullInterceptor();

      TransactionManager tm = TxUtil.getTransactionManager();
      boolean stateful = advisor.resolveAnnotation(Stateful.class) != null;
      // Both MessageDriven and Stateless are stateless
         return new StatefulBMTInterceptor(tm);
         return new StatelessBMTInterceptor(tm) {
             protected void handleException(Invocation invocation, Exception ex) throws Exception   { 
                if (ex == null)
               ApplicationException ae = (ApplicationException) invocation.getAdvisor().resolveAnnotation(ApplicationException.class);
               // it's an application exception, so just throw it back as-is
               if (ae != null || ex.getClass().isAnnotationPresent(ApplicationException.class))
                  throw ex;
               if (ex instanceof EJBException)
                  throw (EJBException) ex;
                  throw new EJBException(ex);

Then you have to use BMTTxInterceptorFactoryCustom instead of BMTTxInterceptorFactory (configured in ejb3-interceptors-aop.xml and singleton-container-aop.xml)

Reply to this message by going to Community

Start a new discussion in EJB3 at Community

-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/jboss-user/attachments/20111110/5735eda5/attachment.html 

More information about the jboss-user mailing list