扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
积极检测
积极检测是一种花费较少的启动工作流过程的方案。SequenceProcessor足够灵活,以使得能够通过平滑的选择工作来进行启动过程。尽管并不令人满意,在没有时间进行事件驱动子系统的配置和部署的许多情景中,积极检测是明智的选择。
使用Spring的ScheduledTimerTask,检测模式就能够容易地装配。缺点就是必须创建额外的活动来进行检测。这个检测活动必须被设计来讯问某些实体,如数据库表,pop邮件帐户,或者Web服务,然后决定新的工作是否等待参与到工作流中。
在所提供的例子中,PollingTestCase类实例化一个基于检测的工作流过程。使用一个有着积极检测处理过程与事件驱动的启动过程的不同之处在于,spring支持doActivities()方法的无参数版本。相反地,在事件驱动的启动中,启动处理过程的实体通过doActivities(Object seedData)方法提供了种子数据来启动工作流。检测方法的另一个缺点是:资源不一定能够被重复地使用。依赖于应用程序环境,这种资源的消耗是不可接受的。
下面代码例子演示了使用积极检测来控制工作流启动的一个活动:
public class PollForWork implements Activity
{
public ProcessContext execute(ProcessContext context) throws Exception {
//First check if work needs to be done
boolean workIsReady = lookIntoDatabaseForWork();
if (workIsReady) {
//The Polling Action must also load any seed data
((MyContext) context).setSeedData(createSeedData());
} else {
//Nothing to do, terminate the workflow process for this iteration
((MyContext) context).setStopEntireProcess(true);
}
return context;
}
}
此外,包含在例子代码的单元测试中的PollRates类提供了一个主动选举启动的可以运行的例子。PollRates模拟了对于航线费率下降的重复检查。
通过ESB的事件驱动启动工作流
理想地,一个包含了适当的种子数据的线程能够异步地启动工作流。这种情况的一个例子是收到从JAVA消息服务队列的消息。一个监听JMS队列或者主题的客户会收到通知,这个通知告知处理应该在onMessage()方法中开始工作流。然后,通过使用Spring和doActivities(Object seedData)方法就能够获得工作流处理器Bean。
使用ESB,实际用于发送启动事件的机制能够恰当地从工作流处理器中分离出来。开源项目Mule ESB有紧凑地和Spring相集成的好处。任意传送机制,比如JMS,JVM,或者POP3邮箱都能够发起事件的传播。
工作流的连续运行
工作流引擎后台进程应该能够没有干扰地连续运行。对于正在运行的基于spring的工作流单一进程来说好,有几个选项。一个有着main()方法的简单Java类就足够演示与这篇文章伴随着的单元测试中的例子了。一个更加可靠的用于部署的机制是嵌入工作流到某种形式的J2EE组件中。Spring很好地支持和J2EE兼容的web应用程序归档或者war文件的集成。基于Java管理附件(JMX)服务归档和JBoss应用服务器(更多信息,参见JBoss homepage)支持的sar文件是更加合适的可部署组件,这种更合适的可部署组件也能够被用来将部署归档。在JBoss 4.0中,sar文件已经被大家所知道的deployer的格式所取代了。
例子代码
打包成zip格式的例程代码最好是用Apache Maven来使用它们。你能够在主源代码目录src/java找到API。src/java目录中有三个单元测试,包括:SimpleSequenceTestCase,RateDropTestCase和PoolingTestCase。要运行所有这些测试,在命令行shell中键入maven test,然后在编译和运行之前,Maven将会下载所有必需的jar文件。实际的XSL转换将会发生在两个测试中,它们的结果被管道输出到控制台。键入maven test:ui来拉出图形化的测试运行器,然后选择你想要运行的测试,并且观察控制台的结果。
结论
在这篇文章中你已经通过设计模式看到了工作流过程种类,在这些模式中,我们主要集中介绍了顺序模式。通过使用接口,我们来对基本工作流组件建模。通过装配多个接口实现到Spring,实现一个顺序工作流。最后还讨论了启动和部署工作流的不同选项。
这里所提出的简单工作流技术肯定不是最终的和革命性的。但是,使用Spring来实现像工作流这样的通用任务是一个通过使用IoC容器而获得的效率的好的示例。由于减少了粘合性代码的需要,Spring在保持面向对象的约束同时,减少面向对象操作麻烦的程度。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者