OSWorkflow中的函数[原]

原创 2004年09月06日 17:50:00

二、工作流中的函数

OSWorkflow支持下面的函数:

1. Java-based Functions(基于Java的函数)

基于Java的函数必须要实现com.opensymphony.workflow.FunctionProvider接口。这个接口只有一个函数——execute,这个函数有三个参数

--transientVars Map

transientVars Map:是客户端代码调用Workflow.doAction()时传进来的。这个参数可以基于用户的不同的输入使函数有不同的行为。

这个参数也包含了一些特别变量,这些变量对于访问workflow的信息是很有帮助的。它也包含了所有的在Registers中配置的变量和下面两种特别的变量:entry (com.opensymphony.workflow.spi.WorkflowEntry) and context (com.opensymphony.workflow.WorkflowContext)

--The args Map

args Map是一个包含在所有的<function/>标签中的<arg/>标签的Map。这些参数都是String类型的。这意味着<arg name="foo">this is ${someVar}</arg> 标签中定义的参数将在arg Map中通过"foo",可以映射到"this is [contents of someVar]"字串。

--propertySet

propertySet包含所有的在workflow实例中持久化的变量。

Java-based的函数适用于以下类型:

(1) class

对于一个类的函数,类加载器一定得知道你的函数所属的类的名字。这可以通过class.name参数来完成:

       <function type="class">

              <arg name="class.name">com.acme.FooFunction</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(2) jndi

JNDI函数就象类函数一样,唯一的不同是JNDI函数的对象一定是已经在JNDI树中存在了,这里需要jndi.location参数:

       <function type="jndi">

              <arg name="jndi.location">java:/FooFunction</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(3) remote-ejb   

远程EJBs可以在OSWorkflow中作为一个函数使用。EJB的远程接口一定要扩展com.opensymphony.workflow.FunctionProviderRemote,这里需要ejb.location参数:

       <function type="remote-ejb">

              <arg name="ejb.location">java:/comp/env/FooEJB</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

(4) local-ejb

本地EJBs与远程EJBs的不同在于,本地EJBs要扩展com.opensymphony.workflow.FunctionProvider接口,例如:

       <function type="local-ejb">

              <arg name="ejb.location">java:/comp/env/FooEJB</arg>

              <arg name="message">The message is ${message}</arg>

       </function>

 

2. BeanShell Functions

OSWorkflow支持BeanShell作为一个scripting语言。到http://www.beanshell.org/上,你可以获得更多的BeanShell的信息。

BeanShell函数的类型一定要指定为beanshell,还需要一个参数,名字叫script。这个参数的值实际上就是要执行的script,例如:

<function type="beanshell">

       <arg name="script">      

              System.out.println("Hello, World!");

       </arg>

</function>

在表达式中始终存在三个变量,entrycontextstoreentry变量是一个实现了com.opensymphony.workflow.spi.WorkflowEntry接口的对象,它代表workflow实例。context变量是com.opensymphony.workflow.WorkflowContext类型的对象,它允许BeanShell函数回滚事务或决定调用者的名字。store变量是com.opensymphony.workflow.WorkflowStore类型的对象,它允许函数访问workflow的持久化存储区。

和上面Java-based函数一样,也要使用三个变量transientVars, argspropertySet,例如:

<function type="beanshell">

       <arg name="script">      

              propertySet.setString("world", "Earth");

       </arg>

</function>

<function type="beanshell">

       <arg name="script">      

              System.out.println("Hello,"+propertySet.getString("world"));

       </arg>

</function>

这两个scripts的输出是"Hello,Earth"。这是因为任何存储在propertySet中的变量都会被持久化,以便在后面的该workflow中的函数使用。

3. BSF Functions (perlscript, vbscript, javascript)

OSWorkflow还支持一种Bean Scripting Framework的函数。BSFIBM AlphaWorks小组的项目,它允许通用的Script语言,如VBScript, Perlscript, Python, and JavaScript在通用的环境中运行。这意味着,在OSWorkflow中你可以使用BSF支持的任何一种语言来编写你的函数:

<function type="bsf">

       <arg name="source">foo.pl</arg>

       <arg name="row">0</arg>

       <arg name="col">0</arg>

       <arg name="script">

              print $bsf->lookupBean("propertySet").getString("foo");

       </arg>

</function>

上面的代码将获得propertySet,然后打印出keyfoo的对象的值。在BeanShell函数中的缺省范围的相同的变量,可以在你的BSF script代码中获得。关于如何在你所选择的语言中获取变量,请阅读BSF用户手册。

4. Utility Functions

OSWorkflow本身附带一些很实用的工具函数,这些函数都实现了com.opensymphony.workflow.FunctionProvider接口。要获取更详细的信息,请阅读这些工具函数的javadoc文档。下面是每个函数的简单描述,你在com.opensymphony.workflow.util包中可以找到所有的类。

(1) Caller

用当前动作的执行者名字设置持久化变量caller

(2) WebWorkExecutor

执行一个WebWork函数并且在动作结束时存储旧的ActionContext

(3) EJBInvoker

调用一个EJBsession bean方法。

(4) JMSMessage

发送一个TextMessage给一个JMStopic queue

(5) MostRecentOwner

用最近指定的步骤的所有者的名字来设置持久化变量mostRecentOwner。可选特性可以在有所有者时将变量设置为nothing,或者返回一个内部错误。

(6) ScheduleJob

可以调度一个Trigger函数在某时执行。同时支持cron表达式和简单的repeat/delay counts

(7) UnschduleJob

删除一个ScheduleJob和所有与之联系的triggers函数。在workflow的状态发生变化而且你不再希望ScheduleJob再执行的时候是很有用的。

(8) SendEmail

给一个或多个用户发送邮件。

osworkflow工作流引擎学习笔记

本指导资料假定你已经部署OSWorkflow的范例应用在你的container上。范例应用部署是使用基于内存的数据存储,这样你不需要担心如何配置其他持久化的例子。范例应用的目的是为了说明如何应用OSW...
  • wacky
  • wacky
  • 2016年08月12日 10:55
  • 1866

OsWorkFlow工作流简介

OsWorkFlow工作流
  • gaowenhui2008
  • gaowenhui2008
  • 2016年04月07日 14:42
  • 1031

OSWorkFlow流程配置文件详解

AbstractWorkflow>> osworkflow中有关工作流流转的所有核心代码都在AbstractWorkflow中,BasicWorkflow就是派生自它,不过这个BasicWorkfl...
  • lifuxiangcaohui
  • lifuxiangcaohui
  • 2014年09月04日 11:32
  • 3143

j2ee常用工作流比较(shart、osworkflow、jbpm)

工作流引擎   Shark(EnhydraShark) Osworkflow opensymphony Jbpm(JBoss JBPM) 工作流描述语言...
  • shadowkiss
  • shadowkiss
  • 2013年05月07日 15:14
  • 2225

osworkflow介绍例子

自己刚刚涉入工作流,也看到很多人写了很多关于工作流方面的文章,有关于osworkflow的,有关于jbpm的,还有其他什么的!总是不如自己写下自己的经历比较真实一些,这样才能问清楚自己到底懂了什么,写...
  • shuangyidehudie
  • shuangyidehudie
  • 2013年05月13日 13:17
  • 834

OsWorkFlow工作流简介

OsWorkFlow工作流简介: Osworkflow是完全用java语言编写的开放源代码的工作流引擎,具有显著的灵活性及完全面向有技术背景的用户的特点。用户可以根据自身的需求利用这款开源软件设计简...
  • niuhea
  • niuhea
  • 2013年06月23日 09:01
  • 6928

将osworkflow与spring和hibernate集成的基本介绍

1. 将osworkflow与spring和hibernate结合的原因     1)简化对osworkflow的配置     2)利用hibernate框架的一些特性,如持久化,缓存等 ...
  • Sky786905664
  • Sky786905664
  • 2017年05月04日 11:55
  • 545

osworkflow学习笔记-先把例子跑起来看看

关键字:osworkflow 入门教程,初体验,环境搭建,示例,笔记,用法。。。。。。 下载地址:https://osworkflow.dev.java.net/files/document...
  • shuangyidehudie
  • shuangyidehudie
  • 2013年05月10日 16:13
  • 796

jbpm工作流学习手册

1.     工作流基础 1.1. 工作流相关概念 工作流(Workflow),就是“业务过程的部分或整体在计算机应用环境下的自动化”,它主要解决的是“使在多个参与者之间按照某种预定义的规则传递文...
  • worn_xiao
  • worn_xiao
  • 2017年02月14日 18:33
  • 234

OSWorkflow的基本概念

一、工作流的概念 1. 步骤、状态和动作 工作流要描述步骤(step)、步骤的状态(status)、各个步骤之间的关系以及执行各个步骤的条件和权限,每个步骤中可以含有一个或多个动作(action)...
  • qghjd25
  • qghjd25
  • 2014年11月27日 22:36
  • 33
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:OSWorkflow中的函数[原]
举报原因:
原因补充:

(最多只允许输入30个字)