欢迎来到天天文库
浏览记录
ID:37147783
大小:48.50 KB
页数:8页
时间:2019-05-19
《构建业务流程》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、构建业务流程,第2部分--WebLogicIntegration开发最佳实践时间:2004-12-22作者:VijayMandava, AnbarasuKrishnaswamy浏览次数:本文关键字:文章工具 推荐给朋友 打印文章 本文是在BEAWebLogicIntegration8.1上构建业务流程的最佳实践中的第二篇。第一部分(WLDJ,第3卷,第6期)关注于团队开发和维护的最佳实践。在本文中,我们着重于创建具有可伸缩性、可恢复性、异常处理、有保证的传送以及高性能的业务流程的最佳实践。本文适用于WLI应用程序的开发人员和设计人员。 阅读本文的第一部分流程的版本控制最佳实践
2、 指定流程文件的版本。原因 很容易忽视版本控制,原因是流程无需任何版本就可以工作。但是对流程进行版本控制确实很重要的,特别是对于那些长期运行的流程而言。升级一个流程时,如果流程没有指定版本,那么未决(in-flight)实例要么终止,要么部署失败,这依赖于服务器的运行模式。如果服务器运行在迭代(iterative)模式,则流程中止,如果服务器运行在生产(production)模式,则部署失败。细节 利用WebLogicWorkshop的版本控制功能,您可以对业务流程进行更改,而无需中断任何当前正在运行的流程实例。当您指定一个业务流程的版本时,您就创建了一个业务流程的子版本,
3、该流程共享相同的公共URI(接口)作为其父流程。在运行时,被标记为活动的流程版本是那些被外部客户端通过公共URI所访问的流程。 您可以为业务流程指定版本,但不能为与该流程相关联的单独控件或者其他与业务流程相关的组件(例如schema和转换)指定版本。当您指定一个业务流程的版本时,您也必须指定该流程的子流程的版本,指定父流程的版本后,子流程的版本并不能被自动指定。所调用子流程的版本取决于它所采用的版本策略。两个可用的策略分别是松散藕合(调用时确定版本)和紧密藕合(调用父流程时设置版本)。 这里要重点指出的是,版本之间的不同并不是彻头彻尾的,原因是所有的版本都是同一个接口的不同实
4、现。这也就意味着,不同版本可以有相同的请求、回调方法(callbackmethods)以及静态消息代理订阅(staticmessagebrokersubscriptions)。异常处理最佳实践 为流程创建相应的异常处理。为所有流程创建全局异常处理。原因 在业务流程的任何阶段出现已检查的或者未经检查的异常是很自然的事情。应当在业务流程中对异常进行适当的处理。如果异常没有被显式地处理,那么该流程就可能中止且永远不会重试。这也可能导致消息未被处理或者消息丢失。细节 可以在三个级别上创建异常处理:·全局异常处理·针对一组节点·针对单个节点 一般来说,异常会向上传播,从节点异常路径
5、到组异常路径,再到全局异常路径,直到它被处理为止。换句话说,与节点相关的异常路径会首先执行,然后是与组相关的路径,再后是与起始节点相关的路径(全局路径)。异常只会被处理一次,除非您的异常处理路径抛出一个异常;然后异常会再次按照相同的顺序向上传播。对您的业务流程,您可以利用这种特性并创建满足特定异常处理需要的异常路径逻辑。 对于非事务性资源而言,可以在异常处理中进行补偿事务处理。恢复最佳实践 在流程级和/或JMS队列级设置适当的redelivery属性。原因 在流程中出现异常的地方,事务会回滚,同时流程可能会中止。如果没有设置合适的redelivery属性,那么用来启动流程的
6、消息将被移到错误队列。移入错误队列的消息将不会被业务流程再次进行处理。相反,一个内部消息驱动bean将会读取该消息并调用该业务流程的全局异常处理。 避免发生这种情况的一个推荐的方法是为retrycount和retrydelay都设置较高的值。细节 流程级的属性是:·Retrycount:指定在第一次尝试执行业务流程失败后流程引擎应该试图执行该业务流程的次数。·Retrydelay:指定两次重试之间的时间间隔(以秒为单位)。确保重试次数和重试间隔合适。重试次数和重试间隔的乘积应该超过运行JTA恢复的时间。如果需要调整重试次数和重试间隔,您可有以下的选择:·在您的JPD中认真设置
7、retrycount和retryinterval。·为每个JPD工程(WebApp)的async和错误队列(errorqueues)设置retrycount和retryinterval。注意这将会中断JPD上显式retry设置,但它是最容易的,也是推荐使用的方法。消息代理通道最佳实践 最好使用JMSheader值,而不是使用文档号。原因 使用header值的速度远远快于使用一个文档元素,因为前者无需进行解析。细节 消息代理通道和JavaMessageService(JMS)
此文档下载收益归作者所有