java - UserTransaction.SetTransactionTimeout 不起作用?

标签 java jakarta-ee jboss timeout 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");
    }
}

该方法已完全执行:

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 方法启动当前线程。

关于java - UserTransaction.SetTransactionTimeout 不起作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28096898/

相关文章:

java - 如何配置 EAR 以访问现有的 Websphere 共享库?

deployment - 将 J2EE/Grails 应用程序作为 Windows 桌面应用程序运行

java - 如何解决Hibernate和MySQL中存储函数调用的返回值问题?

java - Velocity 2 不会设置属性

java - 有没有办法在运行时从 JBoss server.xml 读取 jvmRoute 值?

java - 如何在类中正确实例化一个公共(public)类+数据结构以便其他对象可以使用它?

Java读取文件并将文本存储在数组中

java - Cassandra 选择按添加日期排序的行

Java Servlet 错误 - JasperReport(ClassNotFoundException : org. apache.commons.collections.ReferenceMap)

java - 如何停止 Wildfly11 加载 jar 依赖 Web 服务