📄 schedulerserverimpl.java
字号:
package org.jbpm.service;
import java.util.*;
import org.apache.commons.logging.*;
import org.jbpm.*;
import org.jbpm.model.scheduler.impl.*;
import org.jbpm.persistence.*;
import org.jbpm.scheduler.*;
public class SchedulerServerImpl extends AbstractServiceImpl implements SchedulerServer {
private long defaultWaitPeriod = 0;
private ExecutionServiceImpl clonableExecutionService = null;
public SchedulerServerImpl(JbpmConfiguration jbpmConfiguration) {
super(jbpmConfiguration);
defaultWaitPeriod = jbpmConfiguration.getLong( "jbpm.scheduler.wait.period" );
clonableExecutionService = new ExecutionServiceImpl( jbpmConfiguration );
}
public long checkJobs() {
long millisToWait = defaultWaitPeriod;
PersistenceSessionTx sessionTx = null;
try {
log.info( "checking jobs..." );
// get a persistence session with a transaction
sessionTx = persistenceSessionFactory.createPersistenceSessionTx();
ExecutionServiceImpl executionService = new ExecutionServiceImpl( clonableExecutionService, sessionTx );
Iterator jobIter = sessionTx.findJobsToDo();
boolean jobsTodo = true;
while (jobsTodo) {
if ( jobIter.hasNext() ) {
JobImpl job = (JobImpl) jobIter.next();
long now = System.currentTimeMillis();
long dueDate = job.getDueDate().getTime();
if ( now >= dueDate ) {
job.execute( executionService, sessionTx );
Long repeat = job.getRepeat();
if ( repeat != null ) {
job.setDueDate( new Date( job.getDueDate().getTime() + repeat.longValue() ) );
} else {
sessionTx.delete( job );
}
} else {
millisToWait = Math.min( defaultWaitPeriod, dueDate - now );
jobsTodo = false;
}
} else {
jobsTodo = false;
}
}
// commit the transaction
sessionTx.commitAndClose();
sessionTx = null;
} finally {
if ( sessionTx != null ) {
sessionTx.rollbackAndClose();
}
}
return millisToWait;
}
private static Log log = LogFactory.getLog(SchedulerServerImpl.class);
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -