ARJUNA016053:无法提交事务 - JavaEE6 计时器



我们有一个计时器来触发作业并执行一些导入/导出处理。但是在提交时,我们打开时会遇到标题中的错误。我们已经尝试了几种解决方案:

1.) 创建 2 个类:

@Stateless
public class MyBean { 
    @Inject
    @JpaForJobs
    private EntityManager em;
    @Inject
    private MyService1 service1;
    @TransactionAttribute(TransactionAttributeType.REQUIRED)
    public void migrate(...) {
        service1.create(...);
    }
}
@Startup
@Singleton
public class MyService1 implements Job {
    @Resource
    TimerService timerService;
    @Inject
    private MyBean myBean;
    @Timeout
    public void trigger(Timer timer) {
        migrate();
    }
    private void migrate() {
        myBean.migrate();
    }
}

有时有效,但当关系变得复杂时,它就会失败。示例客户有学生有父母有猫。

我也尝试了 bean 管理的事务,但结局相同:

@Stateless
@TransactionManagement(TransactionManagementType.BEAN)
public class MyBean { 
    @Inject
    @JpaForJobs
    private EntityManager em;
    @Inject
    private MyService1 service1;
    public void migrate(...) {
        utx.begin();
        service1.create(...);
        utx.commit();
    }
}
@Startup
@Singleton
public class MyService1 implements Job {
    @Resource
    TimerService timerService;
    @Inject
    private MyBean myBean;
    @Timeout
    public void trigger(Timer timer) {
        migrate();
    }
    private void migrate() {
        myBean.migrate();
    }
}

有什么想法或建议吗?谢谢。

事实证明,方法 1 有效,只是我需要替换:

@TransactionAttribute(TransactionAttributeType.REQUIRED)

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

我在解析 xml 文件时也遇到了一些问题。当心懒惰的字段和BeanUtils.cloneBean。

相关内容

  • 没有找到相关文章

最新更新