Shark工作流引擎工具代理

来源:互联网 发布:数据附身txt全集下载 编辑:程序博客网 时间:2024/05/14 23:17

Shark工作流引擎工具代理

 

 

 

 

 

翻译人:林勇        QQ:313340285

Email:showsscel@gmail.com   MSN:showsscel@hotmail.com

Skype:showsscel

 

 

 

 

Shark工作流引擎工具代理 -- Enhydra Shark Tool Agents

 

200694

版本:1.0

 

       本文仅代表个人对Shark工具代理的理解,如有理解错误或不准确的地方,敬请大家指出,我将急时修证。迎大家共同交流、相互学习。

 

 

 

 


目录

关于工具代理(来源于WFMC文档)……………………………………………………………

工具代理接口的Shark实现………………………………………………………………………..

Shark服务器如何使用工具代理………………………………………………………………….

工具代理例子………………………………………………………………………………………..

如何用Admin应用执行工具代理映射…………………………………………………………..

XPDL中的工具代理例子…………………………………………………………………………..

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

关于工具代理

“应用程序调用接口“定义了工作流管理系统和应用程序之间的接口机制,但是又区别于其它WfMC接口定义;调用应用程序不是工作流必须有的功能,但是如果没有这项功能工作流又没什么意义;

       因此,应用程序调用接口的工作流系统用户有许多是第三方软件用户。 “工具代理“能够处理基于不同的通讯技术的应用程序控制和信息交换。这些工具代理公布了最少的调用技术细节。例如:一个工具代理支持DDE命令,其它基于OLECORBA或另外的一些通信技术。

       技术在工具代理与相应应用程序之间的相互影响依赖于基础架构和应用程序 工具代理自身控制管理详细接口。建议接口定义为一个工具代理能够被一个工作流应用程序使用的方式,例如:一个任务列表或工作流擎。最终,工具代理意图可以与软件组件标准相比。

       应用程序接口配置功能提供工具代理服务调用和控制应用程序与任务列表之间的关联。

       应用程序调用接口定义API配置,应用程序调用接口被高度推荐用于工作流系统组件(引擎和客户端应用程序)控制特殊应用程序驱动器调用工具代理。这些工具代理最终启动和停止应用程序,通过工作流和应用程序相关信息和来自于应用程序和控制应用程序的运行级别状态。因此,。然而,补充工作流信息将需要一个应用程序通过工具代理使用标准的WAPI函数。同样应用程序调用接口将处理双向请求(请求到和来自于应用程序),它依赖于应用程序调用接口和应用程序框架如何与工具代理结合。

       应用程序调用接口允许应用程序数据的请求与更新和更多运行时的功能。

       工作流系统自身了解工具代理的安装。工具代理基础框架就像一个驱动器接口,像ODBCetc等等。内部接口定义在工具代理与工作流系统之间不需要更紧密的通信机制。

Shark工具代理执行接口

       Shark定义工具代理接口为自身内部的接口,客户端并不关心这个接口。

       我们定义自己的基于WfMC标准的Java接口为工具代理。Shark工具代理接口已经定义在SharkAPI模块的org.enhydra.shark.internal.toolagent里面。有一个非常好的工具代理API文档可以了解一切。

Shark服务器如何使用工具代理

       Shark仅仅知道工具代理接口。并不知道具体的工具代理的实现。当执行一些工具类型的自动活动时,shark会自动找寻合适的工具代理。

·如果活动的应用程序映射信息存在,Shark找到这个映射获取工具代理调用信息及那些参数被传递给工具代理。Shark然后开始连接工具代理获取它的句柄。然后调用工具代理的invokeApplication方法并传递相应的参数(一些参数包含在映射信息中,其它的是应用程序名和应用程序模式参数)。然后调用requestAppStatus方法检查工具代理的状态获取结果设置活动相关变量。

·如果活动的应用程序映射信息不存在,Shark调用在Shark配置文件(也就是在Shark.conf中的配置)中定义的默认的工具代理相同的处理。

       调用工具代理的invokeApplication方法时,Shark会传递一个表示XPDL程序扩展属性的字符串给AppParameter数组的第一个元素。

       例如:

<ExtendedAttributes>

   <ExtendedAttribute Name="ToolAgentClass" Value="org.enhydra.shark.toolagent.JavaScriptToolAgent"/>

   <ExtendedAttribute Name="Script" Value="c=a-b;"/>

</ExtendedAttributes>

    正如上面所说,如果Shark不能找到映射信息将执行默认的工具代理。默认的工具代理将会执行从扩展属性中找到的工具代理。默认工具代理从XPDL中应用程序扩展属性获取名为“ToolAgentClass”的属性值为要执行的工具代理的类名。其它的扩展属性为工具代理执行时将要读取的信息。

    注意:Shark自动启动“Tool”活动必须具备下例条件之一:

1.     如果活动是”Tool”类活动,并且它的执行者是“SYSTEM”类型参与者和活动的启动模式为自动;

2.       如果活动是“Tool”类活动,并且它的执行者是空表达式(没有执行者)并且活动的启动模式为自动;

3.       如果活动是“Tool”类活动,并且它的执行者与“SYSTEM”类型参与者不同和活动的启动模式为手动;

最后一种情况,活动将首先分配到参与者,然后参与者结束该活动,这个工具将被Shark调用工具代理自动执行。

Shark提供的工具代理

Java类工具代理

       这个工具代理执行Java类,调用该类的静态方法“execute”。在调用工具代理的invokeApplication()方法时,应用名参数将被填充为这个类的类名为工具代理执行。现在,我们定义几个类来执行简单的算术运行,产生随机数及一个任务等待。

       这个工具代理指定下面的扩展属性:

       AppName—这个属性描述被执行的类名。

运行时应用工具代理

       执行某些系统应用像记录本或其它的执行应用。这个应用需要放到Shark运行的计算机的系统目录下。

       如果你使用应用程序模式0,工具代理将等待直到可执行的应用程序执行完成,如果你选择除0以外的应用程序状态工具代理将结束工作立刻启动可执行应用程序(通常马上发生),shark进入下一个活动,即使可执行的应用程序仍然在运行(这是一些外部应用程序的异步方式启动)。

       工具代理接受参数(类实例化的参数),但没有任何改变。这些参数通过应用程序定义形参为“IN”类型发送到工具代理,并且那些字符型数据被添加到应用程序名称末尾,导致被启动的应用程序像“notepad c:/Shark/readme”。[ly1] 

       工具代理可以识别下面的扩展属性名称:

    ·AppName-该属性的值描述应用名称被工具代理执行。

    ·AppMode-该属性的值描述执行模式,如果值为0,工具代理将等待应用执行完成。

Java脚本工具代理

       执行Java脚本,如果你设置应用模式为零,工具代理将搜索一个Java脚本文件获取应用程序名称参数(该文件已经配置到类的路径中),并创建实例进行执行。否则,将应用程序名称传递给脚本自身并执行。因此,我们定义几个执行简单算法操作的Java脚本文件,一个产生随机数,另一个执行等待。

       这个工具代理可以识别下面的扩展属性名称:

    ·AppName 该属性值描述执行脚本文件名称;

    ·Script 该属性值描述执行脚本。脚本可以如下在XPDL中定义扩展属性:

              <ExtendedAttribute Name="Script" Value="c=a-b;"/>

       (a,bc如上面的描述,在XPDL的应用程序定义中被定义成形参)

Bsh脚本工具代理

       执行Java语言语法脚本。如果你的应用程序模式设置为0,工具代理将根据应用程序名称参数搜索脚本文件,如果工具代理创建脚本文件成功将执行该脚本。否则,工具代理将认为应用程序名称参数是脚本自身并执行。因此,我们不用定义任何脚本文件。

       这个工具代理可以识别下面的扩展属性名称:

    ·AppName 该属性值描述执行脚本文件名称(脚本文件已经配置到类路径)

    ·Script 该属性值描述执行脚本。脚本可以如下在XPDL中定义扩展属性:

              <ExtendedAttribute Name="Script" Value="c=new java.lang.Long(a.longValue()-b.longValue());"/>

(a,bc如上面的描述,在XPDL的应用程序定义中被定义成形参)

SOAP(simple object access protocol 简单对象访问协议)工具代理

       SOAP工具代理执行WEB服务操作。映射XPDL应用程序到工具代理时,你将设置应用程序名称到定义WEB服务调用的WSDL文件位置。

同样,工具代理需要在XPDL应用程序的形式参数中的第一个参数描述被调用的WEB服务操作的名称。

这个工具代理可以识别下面的扩展属性名称:

·AppName 该属性值描述WEB服务定义的WSDL文件位置。

邮件工具代理

       邮件工具代理负责发送和接收邮件信息。有一个邮件信息管理者接口用于实际邮件处理。我们提供该接口的默认实现,但是任何人都可以创建自己的实现。该接口是工具代理的特殊定义,它不属于Shark API的一部份。

       在执行者映射时,将配置应用程序名为MailMessageHandler接口实现类的完整类名。

       邮件工具代理允许工作在我们的默认邮件工具代理实现,但是你必须定义如下一些属性在Shark.conf配置文件中:

       #

# the properties for our default implementation of MailMessageHandler interface

# required by MailToolAgent

#

 

# the parameters for retrieving mails, possible values for protocol are "pop3" and "imap"

DefaultMailMessageHandler.IncomingMailServer=someserver.co.yu

DefaultMailMessageHandler.IncomingMailProtocol=pop3

DefaultMailMessageHandler.StoreFolderName=INBOX

DefaultMailMessageHandler.IMAPPortNo=143

DefaultMailMessageHandler.POP3PortNo=110

 

# the parameters for sending mails

DefaultMailMessageHandler.SMTPMailServer=someserver.co.yu

DefaultMailMessageHandler.SMTPPortNo=25

DefaultMailMessageHandler.SourceAddress=shark@objectweb.org

 

# credentials

DefaultMailMessageHandler.Login=shark

DefaultMailMessageHandler.Password=sharkspwd

       这个工具代理可以识别下面的扩展属性名称:

           ·AppName 该属性值描述MailMessageHandler接口实现类的完整类型。

           ·AppMode    该属性值描述执行模式,如果该配置为0,工具代理发送邮件,配置为1,工具代理接收邮件。

调度工具代理

       在单线程中代理调用其它的工具代理。

       如果在XPDL中自动活动(工具代理)的开启模式为自动,结束模式为手动,Shark不能结束这样的自动活动,但是它将由工具代理或客户端应用程序执行。这种方法可以用于启动一些在单线程中运行的应用程序,调度工具代理可以很容易的解决这种情况。

       该工具代理获取任务启动其它的代理,并且在其它的代理执行完成后结束相应的活动(在单线程中)。

       允许使用调度工具必须在Shark.cof配置中定义如下的一些属性:

       # Credentials for Scheduler Tool Agent

SchedulerToolAgent.sharkUsername=admin

SchedulerToolAgent.sharkPassword=enhydra

该工具代理需要定义一个扩展属性:

·ToolAgentClassProxy 该属性值描述单线程中执行的实际工具代理的完整类名。

你可以定义其它用于的扩展属性,例如:如果你想使用JavaScriptToolAgent,你可以定义“Script”扩展属性。

默认工具代理

       XPDL应用程序没有定义映射信息时Shark将调用该代理。Shark在扩展属性中找出属性名为“ToolAgentClass”的值调用相应的工具代理。

       任何人都可以提供工具代理的特殊实现,在Shark.conf配置文件中进行配置使用。

工具代理装载器

       这不是一个实际的工具代理,但是他是非常有用的在Shark引擎运行时添加新的工具代理到系统。可以通过调用“ToolAgentPluginDir”定义这个属性,如果Shark不能在类路径中找到定义的工具代理,将在当前位置搜索工具代理的定义。

如何用Admin应用执行工具代理映射

       可以映射包和包的流程的应用程序到被工具代理处理的真实应用。通常,Shark提供六个代理(默认的工具代理)。

       映射应用程序定义到工具代理应用程序,通过应用程序管理功能的“add”按钮创建应用程序映射。对话框出现,在对话框的左边选择应用程序定义,对话框的右边选择工具代理。然后输入工具代理的映射参数:

·username and password 分布式Shark工具代理不需要。其它的工具代理在调用应用程序的登录过程需要。

·Application name 工具代理启动的应用程序名称(例如:Java类工具代理为完整的类型,运行时应用程序工具代理为工具代理所在机器路径中的执行文件的名称,Java脚本工具代理和Bsh工具代理为java脚本文件名称或java脚本自身,依赖于应用程序模式属性,SOAP工具代理为定义WEB服务的WSDL文件位置,邮件工具代理为MailMessageHandler接口的实现类名称)。

    ·Application mode 不同的工具代理用这个属性为不同的目的。例如:运行进应用程序工具代理用模式0等待系统应用程序结束(否则将启动系统应用程序并结束执行,活动不等待系统应用程序结束,流程转向下一个活动),Java工具代理和Bsh工具代理使用模式0搜索脚本文件(否则应用程序名称将定向到脚本进行执行),邮件工具代理使用模式0为发送邮件,1为接收邮件。

 

XPDL中的工具代理例子

       如果你装载test-JavaScript.xpdl(或者test-BeanShell.xpdl)用管理应用程序,你可以发现工具代理是如何工作的。

       XPDL文件中定义扩展属性来定义应用程序,这些属性包含的数据在具体工具代理没有需要的映射信息时调用(这些工具代理通过默认工具代理读取扩展属性参数被调用)。这个例子将工作,邮件工具代理失败将发生DEFAULT_EXCEPTION转移。

       如果你想做自己的映射,将覆盖在应用程序的XPDL扩展属性的默认配置,因为Shark首先查找映射信息,并且仅仅在没有找到时调用默认工具代理读取扩展属性。你可以按如下方法感受映射是如何工作的:

    ·启动Shark管理应用并且切换到应用程序映射功能;

    ·按如下映射:

        ·addition org.enhydra.shark.JavaClassToolAgent(输入AdditionProc为应用程序名)

·arbitrarymathop -> org.enhydra.shark.SOAPToolAgent (输入 http://samples.gotdotnet.com/quickstart/aspplus/samples/services/MathService/VB/MathService.asmx?WSDL 为应用程序名)

·division -> org.enhydra.shark.JavaScriptToolAgent (输入 c=a/b 为应用程序名, 1为应用程序模式)

·multiplication -> org.enhydra.shark.BshToolAgent (输入 c=new 胜古迹Long(a.longValue()*b.longValue()); 为应用程序名,1为应用程序模式)

·notepad -> org.enhydra.shark.RuntimeApplicationToolAgent (输入notepad 为应用程序名, 1 为应用程序模式) - this application is executed if shark is running on Windows

·send_mail -> org.enhydra.shark.JavaClassToolAgent (输入email.MailProc为应用程序名)

·send_mail2 -> org.enhydra.shark.MailToolAgent (输入org.enhydra.shark.toolagent.DefaultMailMessageHandler为应用程序名, 0为应用程序模式)

·substraction -> org.enhydra.shark.JavaScriptToolAgent (输入SubstractionProc.js 为应用程序名, 0为应用程序模式)

·vi -> org.enhydra.shark.RuntimeApplicationToolAgent (输入xterm - e vi为应用程序名, 1为应用程序模式) - this application is executed if shark is running on *nix

·waiting -> org.enhydra.shark.JavaClassToolAgent (输入WaitProc为应用程序名)

    ·实例化“Do math”流程;

    ·执行任务列表(下面是流程解释);

该流程由两个循环构成:

·第一个循环引用子流程的“计算”活动执行数字运算。执行“输入数字参数”活动时输入参数,例如:“加运算”,4433,当子流程“计算”活动结束时,计算结果为“77并且转向下一个活动。你可以进行重复计算操作。如果不进行重复计算操作流程将转移到最后一个活动,但是直到第二个循环退出之前流程不能结果(你也可以输入“减“,“乘”,“除”操作参数)。

·第二个循环更有趣-它执行两个操作:

    ·执行任意的数学操作

·执行等待程序

    以上两个操作都执行结束继续循环。任意的数学操作调用WEB服务执行,并且等待程序用Javasleep方法实现。

    例如:输入参数“Add”,“100.3,“10.2,“10000,所有的操作结束后你看到的任意数学操作的结果(如果映射如上述)是“110.5。你可以执行显示数学操作结果的活动,如果你想执行这个循环,10秒钟之后(你也可以输入“Subtract,”Multiply”和“Divide”为任意的操作参数,)。

    当你决定退出这两个循环时,流程转移到“Notepad”或“Vi editor”活动,依赖于Shark引擎运行的操作系统,并且适当的文件编辑器将在使用运行时应用程序工具代理的Shark所在的机器上被启动,但是流程将继续到“输入邮件参数“活动,因为运行时应用程序工具代理模式设置为1,编辑器应用程序将异步执行。

    现在,你将输入一些发送邮件到某人的参数。例如向如下输入:

        ·邮件内容 ->Do math process is finished

        ·邮件主题 ->Do math process status

        ·收件地址 ->shark@enhydra.org

    之后,邮件工具代理将发送邮件,并且流程将结束。如果邮件发送失败,说明你在Shark.conf文件中的配置参数不正确,因此工具代理将产生异常,因为在XPDL中定义了DEFAULT_EXCEPTION转移,该流程将执行异常处理转移到“输入邮件参数”活动。现在,你将输入email.MailProc类用于工具代理发送邮件需要的参数。像如下输入:

        ·发件人地址 ->admin@together.at

        ·用户名 ->admin

        ·用户密码 ->mypassword

        ·服务器 ->myserver

        ·端口 ->25

    之后,如果你输入正确的参数该流程将结束.

    现在,你可以在这个映射之上继续测试。你可以输入不同java脚本内容执行数学操作,输入不同的参数值,…

 

原创粉丝点击