【发布时间】:2018-11-09 13:11:34
【问题描述】:
在处理请求时,我想根据接收并存储在数据库中的数据在单独的事务中“启动”单独的任务。 主要优点是我可以在所有附加处理完成之前将结果返回给我的请求,而且如果附加处理失败,这不会影响请求的原始处理(因为它们在不同的事务中)。这种额外的处理可能需要向数据添加额外的信息。
我有以下设置。在使用@Asynchronous 的地方创建了附加任务。
@Stateless
public class Bean1
{
@EJB
Bean2 bean2;
@PersistenceContext
private EntityManager entityManager;
public MyResult doSomething(MyInput input) {
MyEntity myEntity = new MyEntity();
// Fill data based on input
entityManager.persist(myEntity);
bean2.asyncActOnData(myEntity);
// Perhaps do some more work and return result
}
}
@Stateless
public class Bean2
{
@Asynchronous // This causes a new transaction to happen
public void asyncActOnData(MyInput input){
// Act upon data and store result in DB
}
}
这似乎是一种干净的方式,但是这会导致 JPA 实体分离,可能是在 Bean2 的处理过程中。
目前我不打算在持久调用(和 asnyc)之后更改数据,但随着应用程序的增长,我觉得允许这样做以避免错误会更安全。
根据持久数据启动单独的异步任务的正确方法是什么?
我正在使用:Java EE 6 和 Eclipselink 2.5.2 for JPA。
【问题讨论】:
标签: java jpa jakarta-ee ejb