ARJUNA016053:无法提交事务 - JavaEE6 Timer

时间:2013-09-25 12:51:44

标签: transactions java-ee-6 entitymanager timer-jobs

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

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管理的事务但结尾相同:<​​/ p>

@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 个答案:

答案 0 :(得分:0)

事实证明,方法1有效,而我需要更换:

@TransactionAttribute(TransactionAttributeType.REQUIRED)

@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)

此外,我在解析xml文件时遇到了一些问题。注意惰性字段和BeanUtils.cloneBean。