首页 WebLogicPortal规则引擎

WebLogicPortal规则引擎

举报
开通vip

WebLogicPortal规则引擎WebLogicPortal规则引擎  业务应用的需求总是随着业务环境的变化趋势而不断地改变。决策专门少是一成不变的,同时竞争压力要求业务逻辑的设计和实现具有灵活性,以快速地适应不断变化的需求。通常,对业务逻辑的更换必须由开发人员来完成,然后进行多次完全的测试,而这将是一个专门耗时的过程。在应用程序的修改工作完成后,需要将其重新部署到服务器,需要留出预定的停机时刻,以防应用程序对用户不可用。  关于那个问题,更好的解决方案是通过应用程序之外的一组规那么来实现某些业务决策。这些规那么并没有被编译到应用程序中,而是在运...

WebLogicPortal规则引擎
WebLogicPortal规则引擎  业务应用的需求总是随着业务环境的变化趋势而不断地改变。决策专门少是一成不变的,同时竞争压力要求业务逻辑的 设计 领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计 和实现具有灵活性,以快速地适应不断变化的需求。通常,对业务逻辑的更换必须由开发人员来完成,然后进行多次完全的测试,而这将是一个专门耗时的过程。在应用程序的修改工作完成后,需要将其重新部署到服务器,需要留出预定的停机时刻,以防应用程序对用户不可用。  关于那个问题,更好的解决方案是通过应用程序之外的一组规那么来实现某些业务决策。这些规那么并没有被编译到应用程序中,而是在运行时读取并应用。通过这种方式,无需更换代码或者停止正在运行的应用程序就能够改变这些规那么。  WebLogicPortal包括一个差不多的规那么引擎,用于使WebLogicPlatform应用程序从规那么获益。尽管该引擎不是功能完备的产品,但我们将展现如何将其与WebLogicIntegrationBusinessProcesses(JPDs)一起使用来为业务逻辑提供一种灵活且动态的实现机制,从而无需只为了修改规那么而重新部署应用程序。  第一我们来看一下将在全文中使用的例如应用程序,然后介绍如何将规那么引擎注入到WLI流程中以实现业务逻辑。然后,我们将更认真地研究这些规那么本身以及如何为业务逻辑定义这些规那么,最后将描述在运行中的系统中更换业务规那么所使用的机制。  例如应用程序  我们将开发一个例如交易应用程序作为在业务流程中使用规那么的例子。该交易应用程序是一个金融交易流程的简化版本,该流程使用调用规那么引擎的JPD业务流程而构建。该例如应用程序采纳了不同的有价证券交易集合,并依照一组由业务定义的规那么将其分组成交易块以便执行,或许是为了减少佣金。因此,那个地点给出的应用程序并不完整,但它差不多足以展现如何在现实世界应用程序中使用规那么引擎。有完整的源代码可供下载,其中的readme文件提供了构建和运行该应用程序的说明。  在说明如何开发如此的应用程序之前,我们先通过对门户规那么引擎的一些特性的简要概括来了解其工作方式。那个地点假定读者熟悉一样的规那么技术。  规那么引擎及其工作方式  图1说明了规那么引擎的差不多情形。该引擎依照一组规那么来处理初始的事实集,而这些规那么由引擎从外部库中获得。初始事有用于为该引擎填充工作内存。由规那么来对工作内存中的事实进行评估,假如满足某条规那么的条件,那么将执行对应的动作。通常,一个规那么动作将向工作内存中添加一条新的事实,并重复该流程直到应用完所有的规那么。然后通过可选的过滤器来选择特定类的对象以返回给调用方。能够通过Controls界面访问规那么引擎,还能够用它来设置属性〔比如规那么集文件的位置〕。  图1:该规那么引擎是一个由控件包装的EJB。储存库中的规那么反复地应用于工作内存中的事实,以获得新的事实。在无法进行连续推理的情形下,对工作内存进行过滤以返回感爱好的项目。  从WLI流程调用规那么引擎  让我们从被实现为JPD的交易业务流程开始,来看看如何添加对规那么引擎的调用。要在WLI流程中添加规那么,能够使用作为WebLogicPortal的一部分而提供的RulesExecutorControl〔规那么执行器控件〕。关于本例,我们只使用该控件中所提供的 方法 快递客服问题件处理详细方法山木方法pdf计算方法pdf华与华方法下载八字理论方法下载 和特性的一个子集。关于规那么控件的附加说明文档能够在参考资料部分找到。  此处假定开发人员使用WebLogicWorkshop集成开发环境来创建新的流程应用程序。然后可在该应用程序中创建一个流程项目。因为默认情形下门户控件在流程项目中不可用,因此需要将这些控件和规那么引擎的EJB导入到应用程序。然后,将控件输入和输出插入到JPD中。在WLI流程中使用门户规那么引擎的差不多步骤如下:  导入规那么引擎到应用程序:在应用程序中包含规那么引擎。将p13n_controls库添加到应用程序。  处理输入和输出:为输入和结果添加变量。创建一个RulesExecutor控件。在WLI流程中添加一个ControlSendWithReturn节点。为创建初始数据编写Java代码。添加一个流程节点以对结果进行迭代。创建规那么集。  后面我们将更详细地讨论其中的每一个步骤。  在应用程序中包含规那么引擎  规那么引擎包含在下面的文件中:  /weblogic81/p13n/lib/p13n_ejb.jar  要在应用程序中包含该引擎,请右击Workshop集成开发环境中的Modules文件夹,并选择AddModule。导航到该jar文件,并选择Open。  将p13n_controls库添加到应用程序  要使得门户规那么控件在应用程序中可用,请右击Workshop集成开发环境中的Libraries文件夹,并选择AddLibrary。该控件位于:  RulesExecutor。为控件键入名称,并按下Create按钮。  在WLI流程中添加一个ControlSendWithReturn节点  将刚刚创建的控件拖放到流程中以创建一个控件节点来实际调用规那么引擎。在例如中,我们将使用控件的evaluateRuleSet()方法。从SendData面板中,选择前面为方法的输入参数而创建的输入变量。使用ReceiveData面板选择返回变量来猎取规那么执行的结果。在PropertyEditor窗口中为控件属性键入相应的值。  为创建初始数据编写Java代码  在创建了输入变量后,我们还没有对它赋值,因此需要编写代码来完成该任务。那个变量是一个Java对象数组,它提供了输入到规那么条件中的初始事实。能够创建一个新的Perform节点来初始化该数组,或者通过使用SourceView在ControlSend节点中添加代码来设置该变量的值。  添加一个流程节点以对结果进行迭代  RulesExecutor控件的每一个运算方法都将返回一个结果的迭代器。编写代码,使用该值实现对规那么执行结果的迭代。假如没有指定过滤器类,那个迭代器将返回规那么引擎工作内存中的所有值。其中包括原始输入以及任何在执行满足条件的规那么的动作时添加到工作内存中的值。关于添加的对象,迭代器返回一个Result类的对象,该类的getObject()方法能够返回在规那么动作中所添加的实际对象。  创建规那么集  使用XML编辑器,在/META-INF/data名目中创建一个扩展名为.rls的文件。规那么通常添加到子名目rulesets中。  业务逻辑规那么  我们刚刚展现了如何在业务流程中插入规那么引擎。现在让我们来看看如何利用该规那么引擎以及如何编写映射到业务规那么的规那么。  规那么包括两个部分:应用该规那么时必须为确实条件,以及当条件满足时将执行的动作。因此,要在应用程序中使用规那么,设计人员必须第一定义哪些对象和属性在测试规那么条件时对规那么编写者是可见的。规那么引擎承诺在一个条件中调用任意多个方法。这种构造方式便于定义JavaBean作为组成初始事实集合的对象,规那么引擎使用这些初始事实来进行推理。能够使用bean的get方法来获得条件测试的值。  规那么所引用的Java对象需要从创建它的WLI流程以及从规那么引擎本身中都可见。这就幸免了这些对象与流程JPD位于同一包中,更确切地说,它们应该被创建于作为同一应用程序的一部分的Java项目中。然后,这些对象能够通过package.class标记在规那么文件(.rls)和流程JPD中引用。  在我们的交易例如中,将把不同的交易分组以便能够成块执行。为实现该目标,我们定义两个bean来表示相关的对象。第一个是Tradebean,它表示单个的交易订单。那个bean的属性表示交易的份额、股份数目以及所期望的价格等。任何关于决定交易所属的块来说可能有用的值,都应该作为那个具有公有get方法的bean的属性,以便能够在规那么中使用它。第二个bean是Blockbean,通过它能够储备所有依照某个属性集聚合在一起的不同交易。那个bean的属性包括规那么中任何可用于判定块大得足以执行订单的的信息。这些属性能够是平均价格、交易的总美元数或总的份额数等等。  为了在我们的应用程序中实现块功能,第一使用规那么来定义某项交易是否只需要执行其自身就足够了〔也确实是说,它是仅包含单个交易的块〕,或者假如不是如此的话,那么应该使用什么属性将其与其他交易集合以形成一个块。在一项交易集合到适当的块中后,就会第二次调用规那么引擎来判定该块是否完成。例如,假设我们想要得到如此的规那么:规那么1:任何5,000股及以上的单项交易应该作为一个块并予以执行。规那么2:由同一个投资治理者定购的具有相同标记的交易应该集合在一起。规那么3:总价值超过,000的块应该予以执行。  调用与规那么条件中的对象相关联的方法专门容易,如下面的例如所示,这是规那么1的条件:Beans.TradegetQuantity5000  在那个例如中,假如在我们的事实中有一个Trade对象,那么规那么引擎就会调用它的getQuantity()方法同时将结果与整型5000进行比较。假如它大于或等于5000,那么该条件为真。  规那么的第二部分是条件满足时执行的动作的列表。最常见的动作是:创建一个新对象,把它添加到规那么引擎用来评估条件的事实集中。规那么引擎连续对规那么进行迭代,直到无法从事实中得出更多的推理;向动作添加新对象会导致另一轮的条件评估循环。正如我们将要看到的那样,能够创建任意类型的对象,并定义对应用程序具有特定意义的各种类型。那个地点的技巧是,应用程序设计者能够定义一组足够丰富的动作,以包含那些可由规那么编写者调用以满足各种业务需求的任务。  在我们的交易应用程序例如中,所有动作都会创建将添加到由规那么引擎使用的工作集中的新对象。有些规那么向该集合中添加简单的String对象。这些对象表示了从原始事实中演绎出来的中间事实,它们能够在规那么引擎中得到进一步的推理,但流程JPD可不能以任何形式说明它们。其他的规那么将创建Beans.Action类的对象。这些对象包括当规那么条件满足时流程将执行的实际命令。流程JPD和支持类将实施的动作命令来集合交易并执行块交易。在那个简单的例如中,实际上只有两个的命令:创建〔并执行〕订单、使用指定的属性集合一项交易。前面规那么2的动作是使用属性symbol和manager来进行集合,该动作如下:Beans.Actionsymbol,manager  响应该动作,流程JPD及其支持类为当前交易查询symbol和投资manager,找出具有相同的symbol和投资manager的未执行交易,并将这些交易集合到相同的块。  在完成一项交易的集合后,将从第二个RulesExecutor控件再次调用规那么引擎,以评估规那么,决定是否应该执行产生的块交易。依照业务规那么3,该规那么如下:Beans.BlockgetAmount50000.00Beans.Actioncreate  这一次,我们分析Beans.Block对象,猎取amount属性并与阈值进行比较。假如该条件满足,那么使用create命令向工作集中添加一个Beans.Action对象,这是通知流程执行该块订单的信号。  让我们认真分析一下流程JPD。下面有用于调用规那么引擎的ControlSend节点的代码。正如我们能够看到的,该节点使用一个RulesExecutor控件来评估规那么集,该控件返回一个迭代器。通过其属性〔没有给出〕,控件将过滤结果,仅返回Beans.Action类的对象。通过这些对象,代码将提取动作命令并执行所要求的动作。正如前面所提到的,假如动作是集合该交易,那么流程将使用更新后的块作为输入,对规那么引擎开始第二次调用。通过执行适当的动作,对结果进行第二次迭代循环。publicvoidrulesExecutorControlEvaluateRuleSet()throwsException{//ExecutetheRulesusingfactsastheinput//#START:CODEGENERATED-PROTECTEDSECTION-youcansafely//Addcodeabovethiscommentinthismethod.#////Inputtransform//Returnmethodcallthis.results=rulesExecutorControl.evaluateRuleSet(this.facts);//Outputtransform//Outputassignments//#END:CODEGENERATED-PROTECTEDSECTION-youcansafely//Addcodebelowthiscommentinthismethod.#///*Iterateovertheresultsofrulesexecution.ThisassumesthatresultsarefilteredtoreturnonlyitemsoftheBeans.Actionclass.ThecommandpropertyfromtheActionisexpectedtobeeitherthestring"create,"inwhichcaseaBlocktradecanbeexecutedfromthesinglediscreteTrade,oritisexpectedtobealistofattributesdescribingtheBlockthatthisTradeshouldbeincorporatedinto.*/while(results.hasNext()){Stringaction=((Action)results.next()).getCommand();if(action.equals("create"))(newBlock(trade)).execute();//single-tradeelse{//AggregatetradeintoanintermediateBlocktrade.aggregate(blockStorage,action);/*Calltherulesengineasecondtime,thistimeusingtheresultingBlockastheonlyinput.ThisistodetermineiftheresultingBlocknowmeetsthecriteriatoexecutetheorder.Again,resultsareassumedtobefilteredbythecontroltoreturnonlytheActions.*/Blockblock=trade.getBlock();ObjectblockFacts[]=newObject[1];blockFacts[0]=block;IteratorblockResults=blockRulesCntl.evaluateRuleSet(blockFacts);while(blockResults.hasNext()){action=((Action)blockResults.next()).getCommand();if(action.equals("create"))block.execute();}}}}  动态规那么  WebLogicPortal的特性之一是Datasync功能,通过它能够将修改后的数据重新部署到集群中的门户应用程序中。因为门户规那么引擎从Datasync储备区中获得其规那么文件,因此应用程序的业务规那么能够在运行的系统中进行更换,而无需停止应用程序。关于Datasync以及用于更新数据的DatasyncWeb应用程序的其他信息,请参阅WebLogicPortal文档。  默认情形下,DatasyncWeb应用程序将部署在常规门户应用程序中。然而,我们的例如应用程序是一个WLI流程应用程序,因此必须在其中手动地包含Datasync。要在Workshop集成开发环境中完成这些工作,请右击Modules文件夹,并选择AddModule。然后,选择下面的文件:  /weblogic81/p13n/lib/datasync.war  在集群中,Datasync应用程序应该仅部署到治理服务器。  为了阐明如何在运行中的应用程序中更换规那么,例如应用程序中包括了两个不同的规那么文件,这两个文件中包括了用于将交易集合成块的可选规那么。前面差不多描述了默认规那么〔定义于traderules.rls文件中〕,第二个集合〔在altrules.rls中〕定义如下规那么:按照标记将所有的交易集合成块。执行包含3,000或更多股的块。  要看到动态规那么的执行,第一使用所提供的测试数据运行例如应用程序。无需停止服务器或者重新部署应用程序,直截了当将原始规那么储存到一个新文件中,并将替代的规那么文件从:  /META-INF/data/rulesets/altrules.rls  拷贝到:  /META-INF/data/rulesets/traderules.rls  再次运行例如数据,这时会发觉产生了不同的订单。  注意,在例如域中不需要重新运行DatasyncWeb应用程序来更新规那么。这是因为例如平台域以开发模式运行。在这种模式下,Datasync自动轮询/META-INF/data名目及其子名目以搜索更换,更换过的文件能够自动地重新部署到应用程序。在生产域中,需要使用Web应用程序来实现数据的重新部署。举荐的步骤是,第一为所有更新过的文件创建一个jar文件,jar文件的根名目应该是data。然后,使用DatasyncWeb应用程序的BootstrapData功能来重新部署包含了新规那么的jar文件。  下载您能够下载本文中使用的例如程序的源代码:SampleApp.zip(2MB)  终止语  在与WLI流程应用程序一起使用时,PortalRulesEngine是实现业务逻辑的强大工具。它专门容易合并到WLI流程中,同时能够使用JavaBean来评估规那么条件,或者扩展作为规那么评估结果而执行的动作。最后,Datasync特性所提供的动态更新能力使得业务逻辑更灵活,并能够在不改变Java代码的前提下适应不断变化的需求,因此不需要重新部署应用程序。
本文档为【WebLogicPortal规则引擎】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。
下载需要: 免费 已有0 人下载
最新资料
资料动态
专题动态
is_113440
暂无简介~
格式:doc
大小:70KB
软件:Word
页数:15
分类:
上传时间:2018-05-18
浏览量:1