public Object processInvocation(InterceptorContext invocation) throws Exception { final EJBComponent component = (EJBComponent) invocation.getPrivateData(Component.class); final ContextTransactionManager tm = ContextTransactionManager.getInstance(); final int oldTimeout = tm.getTransactionTimeout(); try { final MethodIntf methodIntf = MethodIntfHelper.of(invocation); final TransactionAttributeType attr = component.getTransactionAttributeType(methodIntf, invocation.getMethod()); final int timeoutInSeconds = component.getTransactionTimeout(methodIntf, invocation.getMethod()); switch (attr) { case MANDATORY: return mandatory(invocation, component); case NEVER: return never(invocation, component); case NOT_SUPPORTED: return notSupported(invocation, component); case REQUIRED: return required(invocation, component, timeoutInSeconds); case REQUIRES_NEW: return requiresNew(invocation, component, timeoutInSeconds); case SUPPORTS: return supports(invocation, component); default: throw EjbLogger.ROOT_LOGGER.unknownTxAttributeOnInvocation(attr, invocation); } } finally { // See also https://issues.jboss.org/browse/WFTC-44 tm.setTransactionTimeout(oldTimeout == ContextTransactionManager.getGlobalDefaultTransactionTimeout() ? 0 : oldTimeout); } }