NetBPM工作流的架构设计及实现浅析
2015-06-04 17:54
741 查看
NetBPM工作流的架构设计及实现浅析Made by LuBen:2007年08月01日 |
目录NetBPM组件接口定义组件(Definition Component) 运行组件(Execution Component) 组织架构组件(Oorganization Component) 日志组件(Log Component) 任务调度组件(Scheduler Component) 管理监控组件(Admin Component) NetBpm中的几个重要概念 flow attributes(属性) 引擎运行时上下文环境(Execution Context) 委托类 流程定义版本问题 异常处理机制 流程定义元素类图 NetBpm中使用的框架或组件 IOC容器――Castle 数据持久层―― NHibernate 示例Web层――MonoRail 系统日志 ――Log4Net 单元测试工具――NUnit 后记 读前的话:由于本文涉及内容颇多,若有地方读来不很明白,建议先跳过,整体上有个认识后,再回过头来理解。作者认识有限,若有错误,欢迎斧正:)原文地址:NetBPM工作流的架构设计及实现浅析(转载请保留) NetBPM组件接口NetBPM由一系列的组件构成,每一个组件都实现一个核心接口(采用Facade Pattern)。不同组件各自负责的核心功能根据WfMC规范而来。NetBPM接口图: 为流程开发者提供的接口(Process Developer):该接口负责加载流程定义到NetBpm引擎。首先,流程开发者依照nPdl创建一个流程定义,并将其打包成流程定义压缩包(该包包含一个业务流程的所有信息),然后通过NetBPM Web界面或者是其他方式把流程定义压缩包加载到NetBPM引擎,在加载过程中流程定义压缩包将会被解析被保存到NetBPM数据库中。 为用户提供的接口(User):这里用户表示执行流程的人。流程运行主要有2种行为:开始一个流程和执行一个活动(activity)。开始一个流程将创建该流程的一个流程实例,一个流程实例对应流程定义的一次执行。一个流程实例包含了一个或多个并行的flow-of-execution(见flow)。对于处在activity-state(活动节点,见nPdl)的flow,系统一定会指派一个具体的人(或者组)或者第三方来执行活动(activity)。执行活动是Execution Interface的第二种行为。当然了,运转接口还会实现一些其他的方法如获取任务列表,获取有效流程定义列表等。 外部IT系统(External IT Systems)和NetBpm引擎之间的接口:外部IT系统能以2种方式实现和NetBPM的交互。 系统发起交互:系统直接和外部IT系统交互。当系统想要触发流程中的某一个action时,它必须使用上面提到的Execution Interface。 流程发起交互:对于流程发起交互这种类型来说,需要有Interactors。这些Interactors是流程定义的一部分,它包含在流程定义包内(实际上Interactors就是能够访问FlowContext的.NET程序集,也就是我们后面要说到的包含委托类的程序集合)。Interactors在FlowContext(FLOW运行上下文环境)和外部IT系统之间建立起了通信渠道。 组织架构数据(Organisational Datastore)和NetBpm之间的接口:仔细想想,NetBpm是不是还缺了点什么,没错,那就是组织架构的信息:比如说人、团队、部门、角色等。因为在现实情况中,对于不同的组织结构,组织架构信息可能被保存在不同类型的数据库中,如LDAP系统,关系型数据库等。为了让NetBPM能够在一个现实的组织架构中实现快速部署,NetBPM把所有的组织架构信息都聚集在一个组件(Organisation Component)中。这种做法也就是我们通常说道会话门面模式(Session Façade Pattern),它使得NetBPM访问来自不同数据源的组织架构信息变得更为简单。 下面我们逐步介绍NetBPM的各个组件,下面是NetBpm组件结构图: 该组件实现核心接口IDefinitionSessionLocal,用来解析、加载流程定义压缩包,并将其保存到数据库中。此外,它还提供获取某个流程定义,获取所有有效流程定义列表等和流程定义相关的方法。 |
绿色通道: 好文要顶 关注我 收藏该文与我联系
![](http://static.cnblogs.com/images/icon_weibo_24.png)
![](http://pic.cnblogs.com/face/sample_face.gif)
LuBen
关注 - 0
粉丝 - 2
+加关注
1
0
(请您对文章做出评价)
« 上一篇:值得关注----NetBPM工作流
» 下一篇:七个习惯
posted on 2007-08-04 13:37 LuBen 阅读(10311) 评论(28) 编辑 收藏
评论
#1楼 2007-08-05
18:48 yee[未注册用户]
楼主辛苦了. 不知道楼主有没有试过将NetBPM所采用的第三方组件升级到最新版本.
我把NHibernate升级到1.2GA,Castle升级到最新的编译版本,整个项目升级到vs2005时,也就是噩梦的开始.为了用上lazy load,将Model的propery和公共方法加上virtual,结果,因为Castle的事务服务,自动将Session关闭,导致lazy load失败.
难道这个项目只能在Net1.1,NHibernate1.0下使用吗?
#2楼[楼主] 2007-08-06
08:41 LuBen
@yee 整个项目升级到.NET 2.0是可以的,但是我没有升级NHibernate和Castle,所以不知道你说的情形。Castle新版本支持NHibernate1.2 GA么? 我得看看
支持(0)反对(0)
#3楼[楼主] 2007-08-06
09:10 LuBen
@yee 建议您先确认你的Castle版本支持NHibernate1.2GA, 因为,据我所知,Castle还不支持NHibernate1.2, 现在已经更新了么?!
支持(0)反对(0)
#4楼 2007-08-06
09:26 申健
不错,收藏了。支持(0)反对(0)
#5楼 2007-08-07
11:33 badwood
非常精彩的Netbpm入门教材,没有深入了解netbpm是写不出如此好的文章的。 多谢楼主,可惜我刚开始接触netbpm的时候没能得到它。不过现在看起来还是收获非常多,许多地方了解更透彻,整体思路得到梳理。
支持(0)反对(0)
#6楼 2007-08-08
10:09 win yee[未注册用户]
@LuBen 支持.我用的Castle是最新的源代码编译的.Castle现在使用的也是1.2GA版本(不是Castle RC2).NHibernate 1.2GA默认的加载策略是"延迟加载".
NHibernate最麻烦的就是延迟加载.在多层设计中,表现层从业务层(服务层)取得所要的实体后,实体的部分字段还没有初始化.为了能够保证延迟加载,Session在整个请求周期中,不能被关闭.NetBpm在取工作流定义时,没有显式关闭Session,但是因为使用[transaction]属性,Castle 会自动关闭Session.
我把lazy设为false都没有用.
#7楼[楼主] 2007-08-08
14:53 LuBen
@申健 @badwood
谢谢;-)
支持(0)反对(0)
#8楼[楼主] 2007-08-08
15:02 LuBen
@win yee 你说的情况,不光出现在NetBPM中,若是其他使用了Castle+NHibernate事务的地方都会有,对吗?那应该在Castle社区可以找到答案,希望你能够早日找到解决方法:0
支持(0)反对(0)
#9楼 2007-08-10
17:29 飞翔[未注册用户]
问一下NetBPM支持oracle吗?#10楼[楼主] 2007-08-11
10:06 LuBen
@飞翔 NetBPM运用NHibernate做数据持久层,NHibernate支持Oracle,NetBPM当然也支持Oracle。
支持(0)反对(0)
#11楼 2007-08-11
14:12 胖子
非常期待下一篇的到来 :)支持(0)反对(0)
#12楼[楼主] 2007-08-12
10:28 LuBen
@胖子 NetBPM nPdl详解,我不打算写了,下面的文章将会关注实践应用。如果大家有需要,欢迎大家在我发的NetBPM Q&A帖中讨论;-)
支持(0)反对(0)
#13楼 2007-08-13
16:11 飞翔[未注册用户]
安装NetBPM时app_config.xml中只有MYSQL Config和MSSql Config,没有Oracle的配置,可以自己写吗? 谢谢!
#14楼[楼主] 2007-08-13
17:49 LuBen
@飞翔 当然可以自己写了,不过创建Oracle表的SQL语句也要自己写,原来只提供了MS SQLSERVER和MySQL的建表SQL;-)
支持(0)反对(0)
#15楼 2007-08-16
17:22 fly_bluewolf[未注册用户]
我已经将它移植到了spring.net下,spring.net的最新版本使用的是NHibernate 1.2GA版,目前它所有的unit testing都正常通过#16楼[楼主] 2007-08-17
09:05 LuBen
@fly_bluewolf,@win yee ;-) 恭喜. 你们是同一个人还是? 大家可以一起分享移植经验
支持(0)反对(0)
#17楼 2007-08-17
11:54 fly_bluewolf[未注册用户]
@LuBen不是同一个人。
可以加我的msn fly_bluewolf@hotmail.com
#18楼 2008-03-22
05:41 www.NetBPM.cn[未注册用户]
国内 NetBPM 的社区:http://www.NetBPM.cn#19楼 2008-05-07
15:25 obbit[未注册用户]
我怎么下载不了呢.用CVS#20楼 2008-06-10
15:54 Apollo.NET
思路很清晰,对我初步了解NetBpm起到了提纲挈领的作用,感谢楼主!支持(0)反对(0)
#21楼 2008-07-07
20:03 赖文华.NET
初识NetBpm,感谢!文章写得很好!支持(0)反对(0)
#22楼 2008-08-04
16:00 Bob&xiaobo.liu
@www.NetBPM.cn 访问不了啊
支持(0)反对(0)
#23楼 2008-10-07
16:43 YanSH1314
问个问题。 我今天才开始接触NetBpm,安装过后,可以进到登陆页面,但是一点Log in 就没反应了。
我用的是SQLServer2000,不太清楚NHibernate配置
2008-10-07 16:07:27,484 [2952] DEBUG NetBpm.Web.Presentation.Controllers.IntroController [(null)] <(null)> - index
2008-10-07 16:07:35,578 [2952] DEBUG NetBpm.Web.Presentation.Controllers.IntroController [(null)] <(null)> - PerformLogin username:ae password: **********
2008-10-07 16:07:35,578 [3024] DEBUG NetBpm.Web.Presentation.Controllers.IntroController [(null)] <(null)> - PerformLogin username:ae password: **********
2008-10-07 16:07:37,000 [2952] ERROR NetBpm.Workflow.Organisation.EComp.Impl.OrganisationEComp [(null)] <(null)> - error when finding actor by id ae
NHibernate.ADOException: cannot open connection ---> NHibernate.ADOException: Could not create connection from Driver ---> System.Net.Sockets.SocketException: 由于套接字没有连接并且(当使用一个 sendto 调用发送数据报套接字时)没有提供地址,发送或接收数据的请求没有被接受。
at System.Net.Sockets.Socket.Shutdown(SocketShutdown how)
at MySql.Data.Common.SocketStream.Read(Byte[] buffer, Int32 offset, Int32 count)
at System.IO.BufferedStream.ReadByte()
at MySql.Data.MySqlClient.PacketReader.ReadHeader()
at MySql.Data.MySqlClient.PacketReader.OpenPacket()
at MySql.Data.MySqlClient.NativeDriver.Open()
at MySql.Data.MySqlClient.MySqlPool.CreateNewPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetPooledConnection()
at MySql.Data.MySqlClient.MySqlPool.GetConnection()
at MySql.Data.MySqlClient.MySqlPoolManager.GetConnection(MySqlConnectionString settings)
at MySql.Data.MySqlClient.MySqlConnection.Open()
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
--- 内部异常堆栈跟踪的结尾 ---
at NHibernate.Connection.DriverConnectionProvider.GetConnection()
at NHibernate.Impl.SessionFactoryImpl.OpenConnection()
--- 内部异常堆栈跟踪的结尾 ---
at NHibernate.Impl.SessionFactoryImpl.OpenConnection()
at NHibernate.Impl.SessionImpl.get_Connection()
at NHibernate.Transaction.AdoTransaction.Begin(IsolationLevel isolationLevel)
at NHibernate.Transaction.TransactionFactory.BeginTransaction(ISessionImplementor session)
at NHibernate.Impl.SessionImpl.BeginTransaction()
at Castle.Facilities.NHibernateIntegration.SessionDelegate.BeginTransaction()
at Castle.Facilities.NHibernateIntegration.Internal.DefaultSessionManager.EnlistIfNecessary(Boolean weAreSessionOwner, ITransaction transaction, SessionDelegate session)
at Castle.Facilities.NHibernateIntegration.Internal.DefaultSessionManager.OpenSession(String alias)
at Castle.Facilities.NHibernateIntegration.Internal.DefaultSessionManager.OpenSession()
at NetBpm.Util.EComp.AbstractEComp.OpenSession() in d:\dotnet\NetBpmRepos\NetBpm\src\NetBpm\Util\EComp\AbstractEComp.cs:line 21
at NetBpm.Workflow.Organisation.EComp.Impl.OrganisationEComp.FindActorById(String actorId, Relations relations) in d:\dotnet\NetBpmRepos\NetBpm\src\NetBpm\Workflow\Organisation\EComp\Impl\OrganisationEComp.cs:line 80
支持(0)反对(0)
#24楼 2008-10-27
21:36 林海龙[未注册用户]
请问一下怎么将netbpm移植到一个实际项目中??? 怎么在工作流中画图??就是设节点的时候拖拽的按钮和线条??
谢谢
#25楼 2008-11-13
13:50 清凉夜雨[未注册用户]
非常感谢楼主#26楼 2009-03-03
14:08 evilmars[未注册用户]
#23楼 2008-10-07 16:43 闫帅豪 默认的配置是mysql,你把mysql的配置删除了,使用sqlserver2k的配置
#27楼 2011-03-02
17:24 Mervin
您好,请教下,有没有用ASP.NET实现Web部分,不是用Rails引擎的示例呢?麻烦发我一份儿,多谢了,gangqiang9861@163.com
支持(0)反对(0)
#28楼 2014-11-08
16:44 xuliyuan173
mark支持(0)反对(0)
刷新评论刷新页面返回顶部
注册用户登录后才能发表评论,请 登录 或 注册,访问网站首页。
【推荐】50万行VC++源码: 大型组态工控、电力仿真CAD与GIS源码库
【推荐】融云即时通讯云-专注为 App 开发者提供IM云服务
【推荐】如何让你的程序拥有象Excel一样强大的数据编辑功能
【活动】RDS邀您6.5折体验PostgreSQL
广告覆盖了页面 |
停止显示此广告 |
最新IT新闻:
· 芝麻分可办签证!新加坡卢森堡率先开通
· 哈佛大学获史上最大捐赠 校友保尔森豪掷4亿美元
· Wifi万能钥匙密码查询接口被破 可无限查询用户AP明文密码
· 新三板是改革的济世良药,机遇大于风险
· 我经历的北上广
相关文章推荐
- html embed用法(网站中视频、音频的添加)
- 通过JS语句判断WEB网站的访问端是电脑还是手机
- 国外的一些技术网站
- 新手怎么学习网站制作?
- 微服务架构——不是免费的午餐
- 开源项目网站
- 学习笔记:架构 移动应用架构 view层的组织和调用方案(二)
- JS网站右下角悬浮视窗可关闭广告
- [转]wget 下载整个网站,或者特定目录
- HA高可用集群
- iOS应用架构谈 view层的组织和调用方案
- iOS应用架构谈 开篇
- 几个技术类网站
- 从零開始学习OpenCL开发(一)架构
- SOA(面向服务的架构)
- Android 系统中 Location Service 的实现与架构
- IIS自定义404错误页避免暴露.NET网站路径信息
- 【转】地方门户网站:地区细分领域的蓝海市场
- 查询mac地址所属厂家的网站
- 网站的组成部件