您的位置:首页 > 其它

ofbiz进阶分析-Ofbiz开发之 异步服务与计划任务(Job Scheduler) 分析

2014-08-20 09:52 309 查看
http://www.myexception.cn/internet/1595264.html

 

 

如果想在java程序中添加一条jobSandbox调度的话可以用
     dispatcher.schedule(
               jobName, poolName, serviceName, serviceContext,

               startTime, frequency, interval, count, endTime, maxRetry
          );

webtools新建任务计划功能实际方法实现, 在如下位置:
    org.ofbiz.webapp.event.CoreEvents.scheduleService

                    (HttpServletRequest request, HttpServletResponse response)

[dispatcher.schedule]方法的参数分析

jobName           
:计划任务名称, 唯一标识

poolName         
: job池名称 如果你不清楚这个是干嘛的话 默认pool好了

serviceName    
: job 要调用的服务名称

serviceContext 
:map型参数 ,job调度需要用到的数据 ,会被转化成XML格式保存到runtimeData中 (重复调度的时候会再次用到)

startTime          
:long 格式 执行调度的开始时间

frequency         
:执行频率 (数据类型有  RecurrenceRule.DAILY(执行频率以天为单位) 、 

                                        RecurrenceRule.HOURLY(执行频率以小时为单位)等等)

interval              
:执行间隔 配合frequency 使用 , frequency 为单位 , interval 为数量 ,
联合起来其 XX天/次(XX天执行一次) 、XX小时/次(XX小时执行一次)

count                 
:执行次数 。 最大执行次数,当执行次数达到这个值时就不在执行了 。 如果设置-1 即不限次数

endTime           
:执行结束时间,一般用在count 为-1 的时候 使用 ,当限时时间达到这一时间时 即不在执行

maxRetry         
:失败后重复执行次数 , 某次调度执行失败的话 ,重复执行的次数 , -1 无限 , 知到执行成功为止

异步服务与计划任务的关系
异步服务在一个独立的线程中运行并且当前线程将不等待。
          调用的服务将和调用它的服务或事件有效地开始并发运行。
          当前服务的线程因此获取不到异步运行服务的信息。
          异步服务中发生的错误将不会引发调用它的服务或者事件的失败或者错误。

异步服务实际上添加到Job Scheduler中。它是Job Scheduler的调用队列中等待调用的服务的任务。
          Service Engine Tools(服务引擎工具)头的下面。选择Job List(任务列表)来看任务的全部列表。
          没有Start Date/Time(起始日期和时间)的job还未开始。
          那些有End Date/Time(结束日期/时间)的job已经完成。Run Time(运行时间)是他们被安排运行的时间。
          初始化种子数据执行时,列表中所有突出的任务都被添加到JobSandbox实体中,
          和指定它们多长时间执行一次的RecurrenceRule(也是一个实体)信息一起。
            
任务运行的Pool默认设置是pool。一个OFBiz实例可以专用来执行特定任务,
          即便如此任务调度程序可能在每个实例中运行,即只有一个实例将运行该任务。
     

使用示例
    //jobSandbox 功能解析
    String jobName = "job1"; //计划名
    String poolName = "pool"; //默认方式
    String serviceName = "serviceName"; //计划执行的服务名称
    Map<String, Object> service_context = FastMap.newInstance(); //服务需要的初始数据
    long startTime = System.currentTimeMillis(); //开始时间
    long endTime = System.currentTimeMillis(); //结束时间
    int frequency = 1; //频率
    int interval = 1000; //间隔
    int count = 1; //次数
    int maxRetry = 3; //最大重试次数
    try {
        dispatcher.schedule(jobName, poolName, serviceName, service_context,
                startTime, frequency, interval, count, endTime, maxRetry);
    } catch (GenericServiceException e) {
          Debug.logError(e, e.getMessage(), module);
    }

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  任务调度 jobsandbox