分享
 
 
 

osworkflow api 之 timer

王朝java/jsp·作者佚名  2006-01-31
窄屏简体版  字體: |||超大  

com.opensymphony.workflow.timer

这部分主要是实现定时任务处理。在这里主要应用的是Quartz。这个也是opensymphony的一个开源东东

这个包里主要包括下面这三个类:

下面我想还是先从我熟悉一点的角度来阐述这个定时器,在spring中也有Quartz。在org.springframework.scheduling.quartz包里。

在spring中的核心思想是,通过spring的bean配置文件配置trigger和自己的具体job。

如一个配置文件为:

<?xml version="1.0" encoding="UTF-8"?>

<!DOCTYPE beans PUBLIC "-//SPRING//DTD BEAN//EN" "http://www.springframework.org/dtd/spring-beans.dtd">

<beans>

<description>test spring</description>

<bean name="myJob"

class="org.springframework.scheduling.quartz.JobDetailBean">

<property name="jobClass">

<value>ce.net.quartz.TestJob</value>

</property>

<property name="jobDataAsMap">

<map>

<entry key="timeout">

<value>5</value>

</entry>

</map>

</property>

</bean>

<bean id="cronTrigger"

class="org.springframework.scheduling.quartz.CronTriggerBean">

<property name="jobDetail">

<ref bean="myJob" />

</property>

<property name="cronExpression">

<value>0 49 10 * * ?</value>

</property>

</bean>

<bean

class="org.springframework.scheduling.quartz.SchedulerFactoryBean">

<property name="triggers">

<list>

<ref local="cronTrigger" />

</list>

</property>

</bean>

</beans>

如上,配置文件配置了需要做的具体job类、trigger解释一下:<value>0 49 10 * * ?</value>代表秒分时*****。如上就是在每天的10点49分自动触发此任务。其他就很容易理解了。

具体的监听类:

public class WebListener implements ServletContextListener

{

Scheduler scheduler =null;

public WebListener()

{

super();

}

/* (非 Javadoc)

* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)

*/

public void contextInitialized(ServletContextEvent arg0)

{

try

{

String spring_config_path=arg0.getServletContext().getRealPath("/")+"WEB-INF\\spring_config.xml";

System.out.println("spring_config_path="+spring_config_path);

ApplicationContext applicationContext=new FileSystemXmlApplicationContext(spring_config_path);

JobDetailBean job = (JobDetailBean) applicationContext

.getBean("myJob");

CronTriggerBean trigger = (CronTriggerBean) applicationContext

.getBean("cronTrigger");

scheduler = StdSchedulerFactory.getDefaultScheduler();

//scheduler.scheduleJob(job, trigger);

scheduler.start();

}catch (Exception exc)

{

exc.printStackTrace();

}

}

/* (非 Javadoc)

* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)

*/

public void contextDestroyed(ServletContextEvent arg0)

{

try

{

scheduler.shutdown(true);

}catch (Exception exc)

{

}

}

}

具体的job类

public class TestJob extends QuartzJobBean

{

private int timeout;

/**

* @param timeout

*/

public void setTimeout(int timeout)

{

this.timeout = timeout;

}

/* (非 Javadoc)

* @see org.springframework.scheduling.quartz.QuartzJobBean#executeInternal(org.quartz.JobExecutionContext)

*/

protected void executeInternal(JobExecutionContext arg0)

throws JobExecutionException

{

File file = new File("D:/QuartzOut.txt");

try

{

SimpleDateFormat dateFormat=new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");

String dateAndTime=dateFormat.format(new Date());

BufferedWriter bw=new BufferedWriter(new FileWriter(file));

PrintWriter pw=new PrintWriter(bw);

pw.println("Quarta is runned at "+dateAndTime);

bw.close();

pw.close();

} catch (IOException e)

{

// TODO 自动生成 catch 块

e.printStackTrace();

}

}

}

这样,假如此小项目例子部署到tomcat中,则在每次tomcat启动的时候,自动加载就会在每天的10点49分处理此TestJob类。

通过上面,大家应该可以对quartz有个大致理解,下面我们来一起学习一下osworkflow里的quartz类。

LocalWorkflowJob

这类主要包括了一个execute方法,是具体需要执行的job,里面具体用到了id和triggerid还有username(主要用做实例化一个wf对象)

最后通过wf.executeTriggerFunction来执行具体的实际内容。

QuartzRunner

包括一个main方法和一个shutdown方法。

Main主要做的s.start(s指schedule)shutdown则是关闭。

WorkflowJob

相对LocalWorkflowJob来说,它不是针对本地的。通过soap和wsdl来实现的。具体这部分是具体如何实现的,还没细了解。以后如果工作涉及到,会近一步学习。

Shutdown

废类,和QuartzRunner 一样。可能是作者手误吧。

怎么样和上面的spring对应起来的,其实QuartzRunner就是相当于上面监听类。负责schedule的启动,而LocalWorkflowJob则是具体执行工作的方法。

<function type="class">

<arg name="class.name">com.opensymphony.workflow.util.ScheduleJob</arg>

<arg name="triggerId">1</arg>

<arg name="jobName">testJob</arg>

<arg name="triggerName">testTrigger</arg>

<arg name="groupName">test</arg>

<arg name="repeat">10</arg>

<arg name="repeatDelay">2000</arg>

<arg name="cronExpression">0,5,10,15,20,25,30,35,40,45,50,55 * * * * ?</arg>

<arg name="username">test</arg>

<arg name="password">test</arg>

<arg name="local">true</arg>

<arg name="schedulerStart">true</arg>

</function>

<trigger-functions>

<trigger-function id="1″ >

<function>

</function>

</trigger-functions>

ScheduleJob是一个FunctionProiver,因此具有execute方法。在该方法执行期间,ScheduleJob将会读取这些配置参数,创建好job实例(实际上是一个JobDetail实例)和trigger实例,然后启动schedule。大致流程如下:

根据传入的shedulerName参数,利用org.quartz.impl.StdSchedulerFactory的getScheduler方法创建sheduler实例,该实例实现了org.quartz.Scheduler接口;

根据传入的jobClass参数,决定创建何种Job实例,osworkflow自身提供了两种选择:WorkflowJob和LocalWorkflowJob。前者支持SOAP协议,后者则是本地调用,它们都实现了org.quartz.Job接口。

创建一个描述Job信息的JobDetail实例,并做好初始设置;

若传入参数中未指定cronExpression,则创建SimpleTrigger,并设置好startDate、endDate、repeat,否则创建CronTrigger

在jobDetail和trigger准备完毕后,就可以启动schedule了:

上面的关于osworkflow的配置文件代码可能有错误,spring那部分可以保证正确。

针对osworkflow的quartz的实践尚不足,请见谅,暂时只能分析到此!以后有实例会及时补上!

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
2023年上半年GDP全球前十五强
 百态   2023-10-24
美众议院议长启动对拜登的弹劾调查
 百态   2023-09-13
上海、济南、武汉等多地出现不明坠落物
 探索   2023-09-06
印度或要将国名改为“巴拉特”
 百态   2023-09-06
男子为女友送行,买票不登机被捕
 百态   2023-08-20
手机地震预警功能怎么开?
 干货   2023-08-06
女子4年卖2套房花700多万做美容:不但没变美脸,面部还出现变形
 百态   2023-08-04
住户一楼被水淹 还冲来8头猪
 百态   2023-07-31
女子体内爬出大量瓜子状活虫
 百态   2023-07-25
地球连续35年收到神秘规律性信号,网友:不要回答!
 探索   2023-07-21
全球镓价格本周大涨27%
 探索   2023-07-09
钱都流向了那些不缺钱的人,苦都留给了能吃苦的人
 探索   2023-07-02
倩女手游刀客魅者强控制(强混乱强眩晕强睡眠)和对应控制抗性的关系
 百态   2020-08-20
美国5月9日最新疫情:美国确诊人数突破131万
 百态   2020-05-09
荷兰政府宣布将集体辞职
 干货   2020-04-30
倩女幽魂手游师徒任务情义春秋猜成语答案逍遥观:鹏程万里
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案神机营:射石饮羽
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案昆仑山:拔刀相助
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案天工阁:鬼斧神工
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案丝路古道:单枪匹马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:与虎谋皮
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:李代桃僵
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案镇郊荒野:指鹿为马
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:小鸟依人
 干货   2019-11-12
倩女幽魂手游师徒任务情义春秋猜成语答案金陵:千金买邻
 干货   2019-11-12
 
推荐阅读
 
 
 
>>返回首頁<<
 
靜靜地坐在廢墟上,四周的荒凉一望無際,忽然覺得,淒涼也很美
© 2005- 王朝網路 版權所有