⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 schedulerserverimpl.java

📁 一个java工作流引擎
💻 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 + -