gpt4 book ai didi

java - 来自其他线程的 JTA 事务(JSR-236 之前的版本)

转载 作者:太空宇宙 更新时间:2023-11-04 14:36:08 25 4
gpt4 key购买 nike

我的 Java EE 应用程序应该有一个后台线程,用于更新数据库状态。我想使用 JPA 来实现此目的。这样做的最佳实践是什么? (我们的 EE 容器是早期的 JSR-236,因此 ManagedExecutorService 不是我们的选择)

<小时/>

顺便说一句,我尝试了下面的代码,但它不起作用 - 没有抛出异常,但没有任何内容保存到数据库中。没有后台线程并使用注入(inject)的 EntityManager 保存了所有内容:

@Singleton
public class IdentityDao{

@PersistenceUnit(unitName = "routing")
private EntityManagerFactory emf;
@Resource
private UserTransaction utx;

@PostConstruct
protected void startConverter() {
new Converter();
}

private class Converter implements Runnable {
private Converter() {
ScheduledExecutorService scheduler = ThreadUtils.newSingleThreadScheduledExecutor("test", true);
scheduler.scheduleAtFixedRate(this, 5, 5, TimeUnit.SECONDS);
}

@Override
public void run() {
EntityManager em = emf.createEntityManager();
try {
utx.begin();
em.persist(new PersonEntity("123"));
utx.commit();
} catch (Exception e) {
try {
e.printStackTrace();
utx.rollback();
} catch (Exception exc) {
}
} finally {
em.close();
}
}
}
}

最佳答案

终于我找到了简单的解决方案。正如 Gimby 所建议的,它基于 ejb 计时器的使用。

@Singleton
public class IdentityDao{
@PersistenceContext
EntityManager em;

@Schedule(hour = "*", minute = "*", second = "*/10")
public void every10Sec() {
em.persist(new PersonEntity("123"));
}
}

关于java - 来自其他线程的 JTA 事务(JSR-236 之前的版本),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25547859/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com