private TransactionMetadata lookupTransactionMetadata(AnnotatedElement element) { if (transactionMetadata == null) { transactionMetadata = new HashMap<AnnotatedElement, TransactionMetadata>(); } TransactionMetadata metadata = transactionMetadata.get(element); if (metadata == null) { metadata = loadMetadata(element); } return metadata; }
public boolean isInterceptorEnabled() { return getComponent().getType()==JAVA_BEAN && getComponent().beanClassHasAnnotation(Transactional.class); }
@AroundInvoke public Object aroundInvoke(final InvocationContext invocation) throws Exception { return new Work() { @Override protected Object work() throws Exception { return invocation.proceed(); } @Override protected boolean isNewTransactionRequired(boolean transactionActive) { return isNewTransactionRequired(invocation.getMethod(), invocation.getMethod().getDeclaringClass(), transactionActive); } private boolean isNewTransactionRequired(Method method, Class<?> beanClass, boolean transactionActive) { TransactionMetadata metadata = lookupTransactionMetadata(method); if (metadata.isAnnotationPresent()) { return metadata.isNewTransactionRequired(transactionActive); } else { metadata = lookupTransactionMetadata(beanClass); return metadata.isNewTransactionRequired(transactionActive); } } }.workInTransaction(getTransaction()); }