UserTransaction.SetTransactionTimeout 不工作?
UserTransaction.SetTransactionTimeout not working?
在下面的代码中,我试图强制特定 bean 的事务超时,将其事务时间设置为比方法完成所需的时间短。
超时设置为 3 秒,方法完成所需的时间为 5 秒.
我正在使用一种便携式解决方案,它指的是结合 BMT 和使用 setTransactionTimeout
方法设置超时。
我希望交易无效并向我抛出异常,但这并没有发生。
我做错了什么?
@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class TimerSingleton {
@Inject
private UserTransaction ut;
@PostConstruct
public void execute() throws Exception {
ut.begin();
ut.setTransactionTimeout(3); // Transaction should timeout after 3 seconds
System.out.println(">>> Executing...");
Thread.sleep(5000); // Block for 5 seconds
ut.commit();
System.out.println(">>> Completed");
}
}
方法执行完毕:
17:00:12,138 INFO [stdout] (ServerService Thread Pool -- 85) >>> Executing...
17:00:17,139 INFO [stdout] (ServerService Thread Pool -- 85) >>> Completed
我正在使用 Wildfly 8.2,我知道 @TransactionTimeout
注释,但它是专有的,我想知道如何以可移植的方式控制它。
必须在调用begin
方法之前调用setTransactionTimeout
方法,这是因为setTransactionTimeout
修改了与当前线程启动的事务关联的超时值begin
方法。
在下面的代码中,我试图强制特定 bean 的事务超时,将其事务时间设置为比方法完成所需的时间短。
超时设置为 3 秒,方法完成所需的时间为 5 秒.
我正在使用一种便携式解决方案,它指的是结合 BMT 和使用 setTransactionTimeout
方法设置超时。
我希望交易无效并向我抛出异常,但这并没有发生。
我做错了什么?
@Singleton
@Startup
@TransactionManagement(TransactionManagementType.BEAN)
public class TimerSingleton {
@Inject
private UserTransaction ut;
@PostConstruct
public void execute() throws Exception {
ut.begin();
ut.setTransactionTimeout(3); // Transaction should timeout after 3 seconds
System.out.println(">>> Executing...");
Thread.sleep(5000); // Block for 5 seconds
ut.commit();
System.out.println(">>> Completed");
}
}
方法执行完毕:
17:00:12,138 INFO [stdout] (ServerService Thread Pool -- 85) >>> Executing...
17:00:17,139 INFO [stdout] (ServerService Thread Pool -- 85) >>> Completed
我正在使用 Wildfly 8.2,我知道 @TransactionTimeout
注释,但它是专有的,我想知道如何以可移植的方式控制它。
必须在调用begin
方法之前调用setTransactionTimeout
方法,这是因为setTransactionTimeout
修改了与当前线程启动的事务关联的超时值begin
方法。