2015-12-15 2 views
1

Существует org.springframework.transaction.annotation.Transactional аннотация по весне, с помощью которой мы можем предоставить тайм-аут уровня метода для транзакций.Настройка тайм-аута транзакции уровня метода в CDI

Я пытаюсь добиться того же, используя CDI. Но эквивалентная аннотация J2EE javax.transaction.Transactional не имеет возможности настраивать таймаут.

Я искал какое-то время, но не смог найти много до сих пор. Возможно ли иметь тайм-аут транзакции уровня метода в CDI? Если нет, то какой-либо другой способ добиться этого?

//@Transactional(isolation = Isolation.DEFAULT, propagation = Propagation.REQUIRES_NEW, timeout=5_MIN, rollbackFor = {OHException.class }) 
@Transactional(value= TxType.REQUIRES_NEW,rollbackOn= {OHException.class}) 
public <T> T saveDomainObject(T object) throws OHException{ 
..... 
} 

ответ

1

К сожалению, это невозможно с JTA и его аннотацией javax.transaction.Transactional. Обычно вы можете установить тайм-аут транзакции глобально, для всех методов.

Но другие способы, которые я знаю, чтобы достичь что-то подобное:

  • Если вы используете JBoss/WildFly, то вы можете использовать свою специфическую аннотацию: @org.jboss.annotation.ejb.TransactionTimeout, что это именно то, что вы ищете для.
  • Вы можете настроить таймаут для конкретного запроса с помощью запросов подсказок. Например, с JPA 2.0 есть подсказка javax.persistence.query.timeout - ее использование выглядит как query.setHint("javax.persistence.query.timeout", 3000);.

Но все же в большинстве случаев самым простым решением является увеличение таймаута для всех транзакций.

Надеюсь, это поможет.

+0

Спасибо за ответ. Я использую сервер weblogic. Я попробую подсказки и обновить результаты. – darshanUser

Смежные вопросы