@schedule内部循环,并带有新的交易



我正在使用@scheduled注释的EJB每10秒钟在所有上下文实体上循环。所有上下文实体彼此无关,因此应为其更新方法创建新的交易:

@Stateless
public class UpdateService {
    @EJB
    ContextDao contextDao;
    @Schedule(second = "*/10", minute = "*", hour = "*")
    public void update() {
        for(ContextEntity context : contextDao.findAllContexts()) {
            updateContext(context);
        }
    }
    public void updateContext(ContextEntity context) {
         // load data from db
         // update some stuff
         // save back to db
    }
}

现在,我想对UpdateContext方法进行单个交易。因此,如果我在一个contextentity中遇到任何错误,则只能将此交易回滚而不是整个循环。

  1. 更新和UpdateContext的正确交易attributes是什么?
  2. 我是否必须使用其他EJB进行UpdateContext方法?

谢谢

我想您要在循环中调用updateContext而不是update

所定义的 update -method具有默认的属性 TransactionAttributeType.REQUIRED,可以像路上保持一样。

updateContext -method应注释TransactionAttributeType.REQUIRES_NEW,但是...如果您想打电话给该交易,则必须使用

@Resource
SessionContext sessionContext;

并从SessionContext获取BusinessInterface以调用updateContext

例如,请查看SingletoneJB参见方法methodCallUsingSessionContext

最新更新