timerrunner.java

来自「OBPM是一个开源」· Java 代码 · 共 123 行

JAVA
123
字号
package cn.myapps.util.timer;

import java.util.Collection;
import java.util.Date;
import java.util.HashMap;
import java.util.Map;
import java.util.Timer;

import cn.myapps.base.action.ParamsTable;
import cn.myapps.base.dao.PersistenceUtils;
import cn.myapps.base.dao.SessionSignal;
import cn.myapps.core.dynaform.document.ejb.Document;
import cn.myapps.core.macro.runner.JavaScriptRunner;
import cn.myapps.core.task.ejb.Task;
import cn.myapps.core.task.ejb.TaskConstants;
import cn.myapps.core.task.ejb.TaskProcess;
import cn.myapps.core.user.action.WebUser;

public class TimerRunner {
	public static Map runningList = new HashMap();

	private static Timer timer = new Timer();

	private final static JavaScriptRunner RUNNER = JavaScriptRunner
			.getInstance();

	// public TimerRunner(TimeRunnerAble aRunnerable) {
	//
	// }
	//
	public static void registerTimerTask(TimeRunnerAble runnerAble,
			Date firstTime, long period) {
		timer.schedule(runnerAble, firstTime, period);
	}

	public static void registerTimerTask(TimeRunnerAble runnerAble, long delay,
			long period) {
		timer.schedule(runnerAble, delay, period);
	}

	public static void unregisterAllTimerTask() {
		timer.cancel();
		timer = null;
	}

	// 注册自动服务
	public static void registerJSService(String application) {
		try {
			RUNNER.initBSFManager(null, null, null, null, application);
		} catch (Exception e) {
			e.printStackTrace();
		}
	}

	public static TimeRunnerAble createTimeRunnerAble(final Task task,
			final TaskProcess tp) {

		return new TimeRunnerAble() {
			int timesCount = 0;

			int currTotal = task.getTotalRuntimes();

			public void run() {
				String terminateScript = task.getTerminateScript(); // 停止条件
				int total = currTotal;

				// System.out.println("TotalRuntimes->" +
				// task.getTotalRuntimes());

				// 达到运行次数则停止
				if (task.getRuntimes() == timesCount
						&& task.getPeriod() == TaskConstants.REAPET_TYPE_NOTREAPET) {
					this.cancel(task, tp);
					TimerRunner.runningList.remove(task);
				}

				// 符合停止条件则停止
				try {
					registerJSService(task.getApplicationid());
					Object terminateObj = RUNNER.run(terminateScript);
					if (terminateObj instanceof Boolean) {
						if (((Boolean) terminateObj).booleanValue()) {
							this.cancel(task, tp);
							TimerRunner.runningList.remove(task);
							System.out.println("terminateScript->"
									+ terminateScript);
						}
					}
					if (task.isExpired()) {
						timesCount++;

						SessionSignal signal = PersistenceUtils
								.getSessionSignal();
						// signal.sessionSignal++;
						try {
							task.execute();

							total += timesCount;
							task.setTotalRuntimes(total);

							tp.doUpdate(task);
						} catch (Exception e) {
							e.printStackTrace();
						} finally {

							// signal.sessionSignal--;
							// if (signal.sessionSignal <= 0) {
							try {
								PersistenceUtils.closeSession();
								JavaScriptRunner.clear();
							} catch (Exception e) {
							}
							// }
						}
					}
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		};
	}
}

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?