UserTransaction.SetTransactionTimeout不起作用?

Eva*_*tti 6 java jboss timeout java-ee wildfly

在下面的代码中,我试图强制特定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");
    }
}
Run Code Online (Sandbox Code Playgroud)

该方法完全执行:

17:00:12,138 INFO  [stdout] (ServerService Thread Pool -- 85) >>> Executing...

17:00:17,139 INFO  [stdout] (ServerService Thread Pool -- 85) >>> Completed
Run Code Online (Sandbox Code Playgroud)

我正在使用Wildfly 8.2并且我知道@TransactionTimeout注释,但它是专有的,我想知道如何以便携方式控制它.

Fed*_*rra 10

setTransactionTimeout方法必须调用打电话之前begin的方法,这是因为setTransactionTimeout修改与通过与当前线程开始交易相关联的超时值begin方法.