
[英]JBoss EAP: @TransactionTimeout not affecting @Timeout Method?
[英]How to handle Transaction timeout with @TransactionTimeout
我确实有方法:
@TransactionTimeout(value = 1, unit = TimeUnit.SECONDS)
@Asynchronous
public void asyncMethod() {
System.out.println("start running asyncMethod in thread " + Thread.currentThread().getName());
try {
Thread.sleep(3000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("finished running asyncMethod in thread " + Thread.currentThread().getName());
}
如您所见,我在 Transaction 中运行它,超时设置为 1 秒,在里面我有 3 秒的睡眠时间。 因此,由于运行此方法,我开始:
javax.transaction.RollbackException
但是假设我想实现一个服务,该服务将向用户打印事务超时发生的信息。 我怎么能做到这一点?
@Glains 在评论中给了我一些使用拦截器的建议。
我添加了类似的东西:
@Interceptor
public class LoggingTimeoutInterceptor {
@AroundInvoke
public Object log(InvocationContext ctx) throws Exception {
try {
System.out.println("Logger interceptor");
System.out.println("method " + ctx.getMethod().getName());
return ctx.proceed();
}catch (RollbackException e) {
System.out.println("Transaction RollbackException occured");
return null;
}
catch (Exception e) {
System.out.println("Exception occured");
return null;
}
}
}
这段代码正确地编写了前两个系统输出。 但没有捕捉到任何异常,我不知道为什么。 我试图将@AroundInvoke
更改为@AroundTimeout
但后来它根本没有运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.