All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.alogic.doer.core.TaskCenter Maven / Gradle / Ivy

The newest version!
package com.alogic.doer.core;

import java.io.InputStream;
import java.util.Map;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.w3c.dom.Document;
import org.w3c.dom.Element;

import com.alogic.timer.core.ContextHolder;
import com.alogic.timer.core.Doer;
import com.alogic.timer.core.DoerContext;
import com.alogic.timer.core.Task;
import com.alogic.timer.core.Task.State;
import com.alogic.timer.core.TaskStateListener;
import com.anysoft.util.Factory;
import com.anysoft.util.IOTools;
import com.anysoft.util.JsonTools;
import com.anysoft.util.Properties;
import com.anysoft.util.Settings;
import com.anysoft.util.XmlElementProperties;
import com.anysoft.util.XmlTools;
import com.anysoft.util.resource.ResourceFactory;

/**
 * 任务中心
 * 
 * @author duanyy
 * @since 1.6.3.4
 * 
 * @version 1.6.7.9 [20170201 duanyy] 
* - 采用SLF4j日志框架输出日志
* * @version 1.6.9.2 [20170601 duanyy]
* - 改造TaskCenter模型,以便提供分布式任务处理支持;
*/ public interface TaskCenter extends TaskDispatcher,TaskStateListener,ContextHolder{ /** * 启动任务中心处理 */ public void start(); /** * 请求任务 *

* 向队列请求任务,本方法将阻塞直至有任务分发给该dispatcher或者时间超时。 * * @param queue 指定的队列 * @param dispatcher 任务处理人 * @param timeout 超时时间 * */ public int askForTask(String queue,TaskDispatcher dispatcher,long timeout); /** * 停止任务中心 */ public void stop(); /** * 等待线程执行完毕 * @param timeout 超时等待时间 */ public void join(long timeout); /** * 空的任务中心实现 * @author duanyy * @since 1.6.3.4 */ public static class Null implements TaskCenter{ /** * a logger of log4j */ protected static final Logger logger = LoggerFactory.getLogger(TaskCenter.class); protected DoerContext ctx = new DoerContext(); public void report(Element xml) { if (xml != null){ xml.setAttribute("module", getClass().getName()); } } public void report(Map json) { if (json != null){ JsonTools.setString(json,"module",getClass().getName()); } } public void configure(Properties p) { } public void configure(Element _e, Properties _properties){ Properties p = new XmlElementProperties(_e,_properties); configure(p); } @Override public void dispatch(String queue,Task task) { logger.error("This is a null task center."); } @Override public int askForTask(String queue, TaskDispatcher dispatcher, long timeout) { logger.error("This is a null task center."); return 0; } @Override public void start() { logger.error("This is a null task center."); } @Override public void stop() { logger.error("This is a null task center."); } @Override public void join(long timeout){ logger.error("This is a null task center."); } public DoerContext getContext() { return ctx; } public void saveContext(DoerContext _ctx, Doer task) { ctx = _ctx; } @Override public void onRunning(String id, State state, int percent,String note) { // nothing to do } @Override public void onQueued(String id, State state, int percent,String note) { // nothing to do } @Override public void onPolled(String id, State state, int percent,String note) { // nothing to do } @Override public void onStart(String id, State state, int percent,String note) { // nothing to do } @Override public void onFinish(String id, State state, int percent,String note) { // nothing to do } } /** * 工厂类 * @author duanyy * @since 1.6.3.4 * */ public static class TheFactory extends Factory{ /** * a logger of log4j */ protected static final Logger logger = LoggerFactory.getLogger(TaskCenter.class); /** * TaskCenter的实例 */ protected static TaskCenter theCenter = null; /** * 客户端 */ protected static TaskDispatcher client = null; /** * 缺省配置文件位置 */ protected static final String DEFAULT = "java:///com/alogic/doer/core/doer.xml#com.alogic.doer.core.TaskCenter"; /** * 获取全局唯一实例 * @return 全局唯一实例 */ public static TaskCenter get(){ if (theCenter == null){ synchronized (TheFactory.class){ if (theCenter == null){ Settings p = Settings.get(); String master = p.GetValue("tc.master",DEFAULT); String secondary = p.GetValue("tc.secondary",DEFAULT); theCenter = get(master,secondary,p); } } } return theCenter; } /** * 通过指定的配置文件来创建TaskCenter * @param master 主配置文件 * @param secondary 从配置文件 * @param p 环境变量 * @return 根据配置文件所创建的实例 */ protected static TaskCenter get(String master,String secondary,Properties p){ ResourceFactory rm = Settings.getResourceFactory(); InputStream in = null; try { in = rm.load(master,secondary, null); Document doc = XmlTools.loadFromInputStream(in); if (doc != null){ Element root = doc.getDocumentElement(); TheFactory factory = new TheFactory(); return factory.newInstance(root, p, "module",Null.class.getName()); } } catch (Exception ex){ logger.error("Error occurs when load xml file,source=" + master, ex); }finally { IOTools.closeStream(in); } return null; } } }





© 2015 - 2024 Weber Informatics LLC | Privacy Policy