基本的osworkflow API

本文主要介绍了osworkflow的接口选择,包括BasicWorkflow、EJBWorkflow、Ofbizworkflow的特点及使用方式。还说明了创建新工作流实例、执行action和查询的相关内容,指出并非所有workflow stores支持查询,同时提到2.7版osworkflow的配置接口及避免重复创建实例的建议。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

接口选择:

osworkflow提供几种实现com.opensymphony.workflow.Workflow

 

BasicWorkflow

不提供事务支持,你可以通过持久层来实现事务处理。

Workflow wf = new BasicWorkflow(username)

这里的username是用来关联当前请求的用户。

 

EJBWorkflow

ejb容器来管理事务。在ejb-jar.xml中进行配置。

Workflow wf = new EJBWorkflow()

这里没有必要想basicworkflowofbizworkflow那样给出username。因为ejb容器已经校验过的。

 

Ofbizworkflow

basicworkflow比较相似,不同只在于需要事务支持的方法由ofbiz TransactionUtil calls来包装。

 

创建新的工作流实例:

这里是以basicworkflow为例子

 

Workflow wf = new BasicWorkflow(username);
HashMap inputs = new HashMap();
inputs.put("docTitle", request.getParameter("title"));

wf.initialize("workflowName", 1, inputs);

 

执行action

Workflow wf = new BasicWorkflow(username);
HashMap inputs = new HashMap();
inputs.put("docTitle", request.getParameter("title"));
long id = Long.parseLong(request.getParameter("workflowId"));
wf.doAction(id, 1, inputs);

查询:

值得注意的是:并不是所有的 workflow stores支持查询。当前的hibernatejdbc和内存工作流存储支持查询。Hibernate存储不支持mixed-type查询(如,一个查询使用到了历史和当前step contexts)。为了执行一个查询,需要构造出一个WorkflowExpressionQuery对象。查询方法是在这个对象上被调用的。

简单查询、嵌套查询、mixed-context查询(不支持hibernate工作流存储)在docs文档的5.4部分都有。

 

 

2.7版的osworkflow提供一种配置接口。默认实现是DefaultConfiguration,通过AbstractWorkflowsetconfiguration方法来更改历史遗留的singleton静态模型使其不会被使用。应该避免每次都创建新的工作流实例。

遗留部分:

Workflow workflow = new BasicWorkflow("blah");
long workflowId = workflow.initialize("someflow", 1, new HashMap());
workflow.doAction(workflowId, 2, new HashMap());
...
//in some other class, called later on
Workflow workflow = new BasicWorkflow("blah");
workflow.doAction(workflowId, 3, new HashMap());

推荐方法:

Workflow workflow = new BasicWorkflow("blah");
Configuration config = new DefaultConfiguration();
workflow.setConfiguration(config);
long workflowId = workflow.initialize("someflow", 1, new HashMap());
workflow.doAction(workflowId, 2, new HashMap());
//keep track of Workflow object somewhere!
...
//in some other class, called later on
//look up Workflow instance that was held onto earlier
Workflow workflow = ...; //note, do NOT create a new one!
workflow.doAction(workflowId, 3, new HashMap());

 

实际当中还是需要到javadoc中不断去查。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值