/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.store.support; import java.lang.reflect.Method; import org.springframework.transaction.interceptor.TransactionAttribute; import org.springframework.transaction.interceptor.TransactionAttributeSource; /** * overrides transaction timeouts inside spring transaction manager */ public class FlexibleAnnotationTransactionAttributeSource implements TransactionAttributeSource { private TransactionAttributeSource annotationTransactionAttributeSource; private int extendedTimeout; private ThreadLocal<Boolean> longTransaction = new ThreadLocal<Boolean>(); public FlexibleAnnotationTransactionAttributeSource( final TransactionAttributeSource annotationTransactionAttributeSource, final int extendedTimeout ) { this.annotationTransactionAttributeSource = annotationTransactionAttributeSource; this.extendedTimeout = extendedTimeout; longTransaction.set( false ); } public void extendTransactionTimeoutForThisThread() { this.longTransaction.set( true ); } @Override public TransactionAttribute getTransactionAttribute( final Method method, final Class<?> targetClass ) { final TransactionAttribute transactionAttribute = annotationTransactionAttributeSource.getTransactionAttribute( method, targetClass ); return new FlexibleTransactionAttribute( transactionAttribute, longTransaction, extendedTimeout ); } }