我也做了一个基于j2ee的工作流引擎

06-03-12 tigerliuyi
我前些日子做了一个工作流,引擎是用j2ee开发的,流程数据以及应用数据是存于数据库,流程描述是用xml文件表述,性能也很不错,可支持上百万的实例,1000在线用户,已经用在了多个项目,前段时间跟微软的合作一个项目,他们很感兴趣,已经将它移植到.NET,其实一句用起来简单,性能也不错,大致的特点如下,

1、该引擎与业务完全分离,开发业务的时候无须考虑流程,只需通过描述文件描述将各个信息孤岛联系起来,引擎自动分析页面信息,提取业务数据,分析数据根据描述条件自动扭转;同时在启动业务的时候将数据自动送给业务。当然业务无须处理任何工作流相关东西,只需在提交业务的时候加上一个固定的语句,一切都搞定

2、支持历史流程,可多版本共存;当然是支持热启动的,你可以任意修改流程描述文件,随时修改随时载入

3、提供数据挖掘,可分析查看多版本流程的每步执行时间,执行人,分析版本间的优劣,分析并提取出异常实例,异常步骤等等

4、当然了任意角色,任意扭转,你只需通过一个jsp或者一个java程序的角色和用户与描述文件中的执行人和角色影射

如果大家感兴趣可以和我联系

tigerliuyi@163.com

13102354060

banq
2006-03-13 17:57
非常不错,建议花点时间在开源网站申请一个项目,公开大家研究。

另外,电话号码不要留在网上,如果你需要去除电话,和我联系。

tigerliuyi
2006-03-22 23:17
我想找一个开源工作流上载的地址,大家共同探讨一下,我想做一个二期版本,大致提供与聚合,以及以及与分支,以及嵌套流程,以及自动任务,大家用过后有什么好的想法可以email联系我

这个工作流引擎目前有两个版本,一个是。NET,一个是j2ee版本,从性能上j2ee版本要优越一些,前些日子用oracle数据库在del的服务器上做了压力测试,每秒的处理能力超过300个/秒,当时并发用户为500个,活动的工作流实例维持在10万左右,应该能满足大部分业务的需求。其实我这个工作流的特点就是简单,提供通用的ui界面,但是用jsp和asp,你如果用c/s的界面,你只能调用接口了,自己开发界面了。

当然你也需要做一些工作

1、本版本是用jboss3.0编译的,你如果用其他j2ee服务器自己编译一个版本

2、你需要通过一个机制映射你应用的角色与工作流的角色定义

例如:我提供了一个loadoperator.jsp页面你需要把你的profile和工作流的profile映射

yourprofile=session.getAttribute("yourprofile");

Operator workflowprofile=new Operator();

workflowprofile.setValidateUser(yourprofile.getUser());

workflowprofile.setRoles(yourprofile.getRoles());

3,你需要自己编写工作流描述文件,不过这很简单,我上次有个项目用三十多个流程,我编写完只需半天时间

4 业务需要自己开发了,我们的工作流只负责工作流的权限以及流程,而你的业务需要是基于b/s的,如果是c/s,需要修改,描述很简单

<WorkflowDesc name='business1' version='1.0' expiredtime='10000' isAreaControl='1' desc='业务1'>

<active no='1' name='用户填写申请单'>

<application name='1' type='url'>

<url>1.jsp<url>

</application>

<Operators>

<operator role='userlogin' type='creater'/>

</Operators>

<Parameters>

<Parameter name='usermessage' type='string' mode='OUT' desc='用户申请'/>

<Parameter name='usermoney' type='string' mode='OUT' desc='金额'/>

</Parameters>

<TransferCondtions>

<TransferConditon mode='out'>

<if>

<when condition='usermoney<1000'>

<goto next='terminate'>

</when>

<other >

<if>

<when condition='usermoney>10000'>

<goto next='complete'>

</when>

<other>

<goto next='2'>

</other>

</if>

</other>

<TransferConditon>

</TransferCondtions>

</active>

<active no='2' name='管理员审批'>

<application name='1' type='url'>

<url>2.jsp<url>

</application>

<Operators>

<operator role='admincheck' type='all'/>

<operator validater='tiger' type='single'/>

</Operators>

<Parameters>

<Parameter name='usermessage' type='string' mode='INOUT' desc='用户申请'/>

<Parameter name='usermoney' type='string' mode='INOUT' desc='金额'/>

<Parameter name='optiontype' type='string' mode='OUT' desc='审批意见' />

<Parameter name='optioncontent' type='string' mode='审批内容'/>

</Parameters>

<TransferCondtions>

<TransferConditon mode='out'>

<if>

<when condition='optiontype=1'>

<goto next='1'>

</when>

<other >

<goto next='complete'>

</other>

</if>

</other>

<TransferConditon>

</TransferCondtions>

</active>

你需要开发1.jsp,以及2.jsp,但他们不需要在一个web服务器上,例如1.jsp是在用户门户上,提交时需要在处理的action填加

如下代码:

WorkFlowEngineDelete engine=new WorkFlowEngineDelete();

try

{

//如果是来自业务处理后的参数

//request.setAttribute("yourparam",'11");

engine.flowgo(request);

//your business code

......

}catch(Exception ex)

{

if(!(ex instanceof WorkflowException))

{

engine.rollback();

}

}

当然你如果在ejb调用是不需要engine.rollback();

5 其他的就不用关心了,我提供了代办任务查询截面界面,流程查看界面,某个实例详细查看界面(可以将每步的由谁处理,处理时间,相应保存的应用数据显示出来)

你只需将这些页面挂到你的门户中去

6 如何启动一个新流程,这个提供多种方式,例如连接〈url href="workflowtransfer.jsp?workflowname=business1&workflowversion=1.0&activeno=1"

">申请报销〈/url>,它会自动转向你的界面,如果你修改了流程,只需将version=1.1,但以前申请的流程仍然存在

7 该工作流也支持分地域的处理,如果有需要可以给我说

tigerliuyi
2006-03-22 23:18
我想找一个开源工作流上载的地址,大家共同探讨一下,我想做一个二期版本,大致提供与聚合,以及以及与分支,以及嵌套流程,以及自动任务,大家用过后有什么好的想法可以email联系我

这个工作流引擎目前有两个版本,一个是。NET,一个是j2ee版本,从性能上j2ee版本要优越一些,前些日子用oracle数据库在del的服务器上做了压力测试,每秒的处理能力超过300个/秒,当时并发用户为500个,活动的工作流实例维持在10万左右,应该能满足大部分业务的需求。其实我这个工作流的特点就是简单,提供通用的ui界面,但是用jsp和asp,你如果用c/s的界面,你只能调用接口了,自己开发界面了。

当然你也需要做一些工作

1、本版本是用jboss3.0编译的,你如果用其他j2ee服务器自己编译一个版本

2、你需要通过一个机制映射你应用的角色与工作流的角色定义

例如:我提供了一个loadoperator.jsp页面你需要把你的profile和工作流的profile映射

yourprofile=session.getAttribute("yourprofile");

Operator workflowprofile=new Operator();

workflowprofile.setValidateUser(yourprofile.getUser());

workflowprofile.setRoles(yourprofile.getRoles());

3,你需要自己编写工作流描述文件,不过这很简单,我上次有个项目用三十多个流程,我编写完只需半天时间

4 业务需要自己开发了,我们的工作流只负责工作流的权限以及流程,而你的业务需要是基于b/s的,如果是c/s,需要修改,描述很简单

〈〈〈〈WorkflowDesc name='business1' version='1.0' expiredtime='10000' isAreaControl='1' desc='业务1'>

<active no='1' name='用户填写申请单'>

<application name='1' type='url'>

<url>1.jsp<url>

</application>

<Operators>

<operator role='userlogin' type='creater'/>

</Operators>

<Parameters>

<Parameter name='usermessage' type='string' mode='OUT' desc='用户申请'/>

<Parameter name='usermoney' type='string' mode='OUT' desc='金额'/>

</Parameters>

<TransferCondtions>

<TransferConditon mode='out'>

<if>

<when condition='usermoney<1000'>

<goto next='terminate'>

</when>

<other >

<if>

<when condition='usermoney>10000'>

<goto next='complete'>

</when>

<other>

<goto next='2'>

</other>

</if>

</other>

<TransferConditon>

</TransferCondtions>

</active>

<active no='2' name='管理员审批'>

<application name='1' type='url'>

<url>2.jsp<url>

</application>

<Operators>

<operator role='admincheck' type='all'/>

<operator validater='tiger' type='single'/>

</Operators>

<Parameters>

<Parameter name='usermessage' type='string' mode='INOUT' desc='用户申请'/>

<Parameter name='usermoney' type='string' mode='INOUT' desc='金额'/>

<Parameter name='optiontype' type='string' mode='OUT' desc='审批意见' />

<Parameter name='optioncontent' type='string' mode='审批内容'/>

</Parameters>

<TransferCondtions>

<TransferConditon mode='out'>

<if>

<when condition='optiontype=1'>

<goto next='1'>

</when>

<other >

<goto next='complete'>

</other>

</if>

</other>

<TransferConditon>

</TransferCondtions>

</active>

你需要开发1.jsp,以及2.jsp,但他们不需要在一个web服务器上,例如1.jsp是在用户门户上,提交时需要在处理的action填加

如下代码:

WorkFlowEngineDelete engine=new WorkFlowEngineDelete();

try

{

//如果是来自业务处理后的参数

//request.setAttribute("yourparam",'11");

engine.flowgo(request);

//your business code

......

}catch(Exception ex)

{

if(!(ex instanceof WorkflowException))

{

engine.rollback();

}

}

当然你如果在ejb调用是不需要engine.rollback();

5 其他的就不用关心了,我提供了代办任务查询截面界面,流程查看界面,某个实例详细查看界面(可以将每步的由谁处理,处理时间,相应保存的应用数据显示出来)

你只需将这些页面挂到你的门户中去

6 如何启动一个新流程,这个提供多种方式,例如连接〈url href="workflowtransfer.jsp?workflowname=business1&workflowversion=1.0&activeno=1"

">申请报销〈/url>,它会自动转向你的界面,如果你修改了流程,只需将version=1.1,但以前申请的流程仍然存在

7 该工作流也支持分地域的处理,如果有需要可以给我说

tigerliuyi
2006-03-22 23:20
〈〈〈WorkflowDesc name='business1' version='1.0' expiredtime='10000' isAreaControl='1' desc='业务1'>

〈〈〈active no='1' name='用户填写申请单'>

〈〈application name='1' type='url'>

〈url>1.jsp〈url>

〈/application>

〈Operators>

〈operator role='userlogin' type='creater'/>

〈/Operators>

〈Parameters>

〈Parameter name='usermessage' type='string' mode='OUT' desc='用户申请'/>

〈Parameter name='usermoney' type='string' mode='OUT' desc='金额'/>

〈/Parameters>

〈TransferCondtions>

〈TransferConditon mode='out'>

〈if>

〈when condition='usermoney〈1000'>

〈goto next='terminate'>

〈/when>

〈other >

〈if>

〈when condition='usermoney>10000'>

〈goto next='complete'>

〈/when>

〈other>

〈goto next='2'>

〈/other>

〈/if>

〈/other>

〈TransferConditon>

〈/TransferCondtions>

〈/active>

〈active no='2' name='管理员审批'>

〈application name='1' type='url'>

〈url>2.jsp〈url>

〈/application>

〈Operators>

〈operator role='admincheck' type='all'/>

〈operator validater='tiger' type='single'/>

〈/Operators>

〈Parameters>

〈Parameter name='usermessage' type='string' mode='INOUT' desc='用户申请'/>

〈Parameter name='usermoney' type='string' mode='INOUT' desc='金额'/>

〈Parameter name='optiontype' type='string' mode='OUT' desc='审批意见' />

〈Parameter name='optioncontent' type='string' mode='审批内容'/>

〈/Parameters>

〈TransferCondtions>

〈TransferConditon mode='out'>

〈if>

〈when condition='optiontype=1'>

〈goto next='1'>

〈/when>

〈other >

〈goto next='complete'>

〈/other>

〈/if>

〈/other>

〈TransferConditon>

〈/TransferCondtions>

〈/active>

猜你喜欢
2Go 1 2 下一页