Java UserTransaction.SetTransactionTimeout不工作?

Java UserTransaction.SetTransactionTimeout不工作?,java,jakarta-ee,jboss,timeout,wildfly,Java,Jakarta Ee,Jboss,Timeout,Wildfly,在下面的代码中,我试图强制特定bean的事务超时,将其事务时间设置为短于方法完成所需的时间 超时设置为3秒,方法完成所需的时间为5秒 我使用的是一个可移植的解决方案,它涉及BMT和使用该方法设置超时的组合 我希望事务会失效,并向我抛出一个异常,但这并没有发生 我做错了什么 @Singleton @Startup @TransactionManagement(TransactionManagementType.BEAN) public class TimerSingleton { @In

在下面的代码中,我试图强制特定bean的事务超时,将其事务时间设置为短于方法完成所需的时间

超时设置为3秒,方法完成所需的时间为5秒

我使用的是一个可移植的解决方案,它涉及BMT和使用该方法设置超时的组合

我希望事务会失效,并向我抛出一个异常,但这并没有发生

我做错了什么

@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
方法修改与当前线程启动的事务相关联的超时值。

尝试切换
ut.begin()
ut.setTransactionTimeout(3)@FedericoSierra成功了!我今天很早就试过了,但我可能误解了例外情况!你能给我一个答案让我接受吗?在开始交易前设置交易超时修复了我的代码,谢谢。