我们有一个计时器可以触发作业并进行一些导入/导出处理。但是在提交时我们打开会遇到标题中的错误。我们已经尝试了几种解决方案:
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();
}
}
有任何想法或建议吗?感谢。
答案 0 :(得分:0)
事实证明,方法1有效,而我需要更换:
@TransactionAttribute(TransactionAttributeType.REQUIRED)
与
@TransactionAttribute(TransactionAttributeType.REQUIRES_NEW)
此外,我在解析xml文件时遇到了一些问题。注意惰性字段和BeanUtils.cloneBean。