Roller4任务调度管理器设计的bug

最近研究Roller的任务调度设计,自己也照猫和老虎写了个任务实现类,总发现我的任务总有问题:

如果设置为30分钟跑一次,总是不按照规则来。

 

跟踪了代码发现Roller登记租期的时候没有提交事务,导致释放租期的时候异常了,所以相关的锁信息没有更新,总是在初始化状态。

 

后来加的事务提交的代码发现锁信息被更新了。于是对比了一下Roller5的代码,发现Roller5是有提交事务的(下面是Roller5的代码strategy.flush();
):

Query q = strategy.getNamedUpdate(
                    "TaskLock.updateClient&Timeacquired&Timeleased&LastRunByName&Timeacquired");
            q.setParameter(1, task.getClientId());
            q.setParameter(2, Integer.valueOf(task.getLeaseTime()));
            q.setParameter(3, new Timestamp(runTime.getTime()));
            q.setParameter(4, task.getName());
            q.setParameter(5, taskLock.getTimeAquired());
            q.setParameter(6, new Timestamp(leaseExpiration.getTime()));
            int result = q.executeUpdate();
            
              if(result == 1) {
                strategy.flush();
                return true;
            }

 

 

            Query q = strategy.getNamedUpdate(
                    "TaskLock.updateTimeLeasedByName&Client");
            q.setParameter(1, Integer.valueOf(0));
            q.setParameter(2, task.getName());
            q.setParameter(3, task.getClientId());
            int result = q.executeUpdate();
            
            if(result == 1) {
                strategy.flush();
                return true;
            }

 

可能还有很多问题没有发现,以后再说!

 

其实想来这个是一个比较低级的错误,为什么作为apache的开源项目,这样的错误好像说不过去哦。难道这些项目的详细设计和编码是不同的人吗?或许跟开发者用的数据库有关吧?

你可能感兴趣的:(任务调度)