开源地址:https://github.com/bluejoe2008/openwebflow(欢迎star)java
OpenWebFlow是基于Activiti扩展的工做流引擎。Activiti (官方网站http://activiti.org/,代码托管在https://github.com/Activiti/Activiti)是一个新兴的基于 Apache 许可的支持 BPMN 2.0 标准的开源 BPM 产品,它是一个轻量级,可嵌入的 BPM 引擎,而且提供了功能丰富的开发和流程设计工具。OpenWebFlow与业务应用系统之间的关系以下图所示。mysql
相对于Activiti,OpenWebFlow扩展的功能包括:git
1) 彻底接管了Activiti对活动(activity)权限的管理。
Activiti容许在设计model的时候指定每一个活动的执行权限,可是,业务系统可能须要根据实际状况动态设置这些任务的执行权限(如:动态的Group)。OpenWebFlow彻底实现了与流程定义时期的解耦,即用户对活动的访问控制信息单独管理(而不是在流程定义中预先写死),这样有利于动态调整权限,详见自定义活动权限管理;github
2) 彻底接管了Activiti对用户表(IDENTITY_XXX表)的管理。
在标准的工做流定义中,每一个节点能够指定其候选人和候选用户组,可是比较惨的是,Activiti绑架了用户信息表的设计!这个是真正致命的,由于几乎每一个业务系统都会属于本身的用户信息结构(包括User/Group/Membership),但不必定它存储在Activiti喜欢的那个库中,表的结构也不必定同样,有的时候,某些信息(如:动态的Group)压根儿就不采用表来存储。OpenWebFlow剥离了用户信息表的统一管理,客户程序能够忘掉Activiti的用户表、群组表、成员关系表,详见自定义用户成员关系管理;web
3) 容许运行时定义activity!
完全知足“中国特点”,并提供了安全的(同时也是优雅的)催办、代办、加签(包括前加签/后加签)、自由跳转(包括前进/后)、分裂节点等功能;spring
OpenWebFlow的发布形式是一组正常的jar,其中openwebflow-core.XXX.jar包含了核心的工做流控制模块,以及基于内存的管理器实现模块。sql
此外,OpenWebFlow还提供了几个jar:openwebflow-mgr-hibernate.XXX.jar,openwebflow-mgr-mybatis.XXX.jar,它们提供了管理器的SQL实现模块,分别选取hibernate和mybatis做为ORM模型。还有一个是openwebflow-mgr-test.XXX.jar,它包含了几个测试类。数据库
最新版本的下载地址:express
https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-core/target/openwebflow-core-0.9-SNAPSHOT.jar注意这些jar具备较多的依赖, https://gitee.com/bluejoe/openwebflow/tree/master/openwebflow-core/target/lib列举了全部的依赖包以下:apache
以maven的方式引入OpenWebFlow比较简单,pom.xml中的依赖项写成:
<dependency> <groupId>org.openwebflow</groupId> <artifactId>openwebflow-core </artifactId> <version>0.9-SNAPSHOT</version> </dependency>
在引入依赖项以前可能须要先在本地仓库中安装OpenWebFlow项目。具体操做是在eclipse中选择OpenWebFlow项目,【右键菜单】【Maven】【install】。
准备SpringIoC配置文件,分别是settings.properties 、activiti.cfg.core.xml和activiti.cfg.mem.xml(或者是activiti.cfg.sql.XXX.xml):
settings.properties文件是一个正常的属性文件,用以spring IOC文件加载。以下是一个属性文件的内容:
mail.host=smtp.bluejoe.cn mail.port=25 mail.username=sdb-support@cnic.cn mail.password=sdbsupport mail.from=sdb-support@cnic.cn model.dir=../models alarm.mail.template=classpath:/alarm-template.txt hibernate.dialect=org.hibernate.dialect.MySQLDialect hibernate.hbm2ddl.auto=none activitidb.url=jdbc:h2:mem:activiti;DB_CLOSE_DELAY=1000 activitidb.driver=org.hDriver activitidb.username=sa activitidb.password= owfdb.url=jdbc:mysql://localhost:3306/openwebflow?useUnicode=true&characterEncoding=UTF-8 owfdb.driver=com.mysql.jdbc.Driver owfdb.username=root owfdb.password=1
各属性的含义以下:
属性名 |
示例值 |
含义 |
mail.host |
smtp.bluejoe.cn |
催办邮件发件服务器主机地址 |
mail.port |
25 |
催办邮件发件服务器端口号 |
mail.username |
sdb-support@cnic.cn |
催办邮件发件帐号名 |
mail.password |
sdbsupport |
催办邮件发件帐号密码 |
mail.from |
sdb-support@cnic.cn |
催办邮件发件人 |
model.dir |
../models |
自动加载的BPMN模型路径 |
alarm.mail.template |
classpath:/alarm-template.txt |
催办邮件正文模板 |
hibernate.dialect |
org.hibernate.dialect.MySQLDialect |
Hibernate方言 |
hibernate.hbm2ddl.auto |
none |
Hibernate DDL设置 |
activitidb.url |
jdbc:h2:mem:activiti;DB_CLOSE_DELAY |
Activiti数据库JDBC URL |
activitidb.driver |
org.h2.Driver |
Activiti数据库JDBC驱动 |
activitidb.username |
sa |
Activiti数据库帐号名 |
activitidb.password |
|
Activiti数据库帐号密码 |
owfdb.url |
jdbc:mysql://localhost:3306/openwebflow?useUnicode |
OpenWebFlow数据库JDBC URL |
owfdb.driver |
com.mysql.jdbc.Driver |
OpenWebFlow数据库JDBC驱动 |
owfdb.username |
root |
OpenWebFlow数据库帐号名 |
owfdb.password |
1 |
OpenWebFlow数据库帐号密码 |
activiti.cfg.core.xml的配置与Activiti要求的那个配置文件有点类似,但能够多一些内容,以下是个例子:
<!-- 工做流核心数据库配置 --> <bean id="activitiDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${activitidb.driver}" /> <property name="url" value="${activitidb.url}" /> <property name="username" value="${activitidb.username}" /> <property name="password" value="${activitidb.password}" /> <property name="initialSize" value="20" /> <property name="maxActive" value="50" /> <property name="maxIdle" value="20" /> <property name="minIdle" value="10" /> </bean> <!-- 任务催办配置 --> <bean id="myTaskAlarmService" class="org.openwebflow.alarm.impl.TaskAlarmServiceImpl"> <!-- 截止日期提早量 --> <property name="periodInAdvance" value="P2D" /> <!-- 设置消息通知机制 --> <property name="messageNotifier"> <!-- 采用邮件发送 --> <bean class="org.openwebflow.alarm.impl.MailMessageNotifier"> <property name="subjectTemplate" value="请尽快处理#{'$'}{task.name}任务" /> <property name="messageTemplateResource" value="${alarm.mail.template}" /> <property name="mailSender"> <bean class="org.openwebflow.alarm.impl.MailSender"> <property name="serverHost" value="${mail.host}" /> <property name="serverPort" value="${mail.port}" /> <property name="authUserName" value="${mail.username}" /> <property name="authPassword" value="${mail.password}" /> <property name="mailFrom" value="${mail.from}" /> </bean> </property> </bean> </property> <property name="membershipManager" ref="myMembershipManager" /> <property name="userDetailsManager" ref="myUserDetailsManager" /> <property name="taskNotificationManager" ref="myTaskNotificationManager" /> </bean> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="activitiDataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" /> <!-- 配置对象 --> <bean id="processEngineConfiguration" class="org.openwebflow.cfg.ProcessEngineConfigurationEx"> <property name="dataSource" ref="activitiDataSource" /> <property name="transactionManager" ref="transactionManager" /> <property name="databaseSchemaUpdate" value="true" /> <property name="jobExecutorActivate" value="false" /> <property name="startEngineEventListeners"> <list> <!-- 加载自定义表单元素类型 --> <bean class="org.openwebflow.cfg.LoadDummyFormTypes"> <property name="typeNames" value="user" /> </bean> <!-- 自定义成员关系管理 --> <bean class="org.openwebflow.cfg.ReplaceMembershipManager"> <property name="customMembershipManager" ref="myMembershipManager" /> </bean> <!-- 自定义活动权限管理 --> <bean class="org.openwebflow.cfg.ReplaceTaskAssignmentHandler"> <!-- 受权处理器列表,会组成一个链,越靠后优先级越高(越靠外) --> <property name="handlers"> <list> <!-- 自定义受权项列表 --> <bean class="org.openwebflow.assign.permission.ActivityPermissionAssignmentHandler"> <property name="activityPermissionManager" ref="myActivityPermissionManager" /> </bean> <!-- 容许受权代理 --> <bean class="org.openwebflow.assign.delegation.TaskDelagationAssignmentHandler"> <property name="delegationManager" ref="myDelegationManager" /> <property name="membershipManager" ref="myMembershipManager" /> <property name="hideDelegated" value="false" /> </bean> </list> </property> </bean> <!-- 自动导入流程模型 --> <bean class="org.openwebflow.cfg.ImportDefinedProcessModels"> <property name="modelDir" value="${model.dir}" /> </bean> <!-- 启动催办管理器 --> <bean class="org.openwebflow.cfg.StartTaskAlarmService"> <property name="taskAlarmService" ref="myTaskAlarmService" /> <property name="runOnStartup" value="false" /> </bean> <!-- 加载自定义activity --> <bean class="org.openwebflow.cfg.LoadRuntimeActivityDefinitions"> <property name="activityDefinitionManager" ref="myActivityDefinitionManager" /> </bean> </list> </property> </bean> <!-- processEngine --> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" /> </bean> <!-- 工做流流转服务对象工厂 --> <bean class="org.openwebflow.ctrl.impl.DefaultTaskFlowControlServiceFactory" /> <!-- processEngineTool --> <bean id="processEngineTool" class="org.openwebflow.util.ProcessEngineTool" />
其中processEngineConfiguration是加强型的工做流引擎配置对象,能够设置自定义用户群组成员关系管理策略、自定义活动权限管理策略等。
完整的例子参见:https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.core.xml
在activiti.core.xml中会用到一些manager,activiti.mem.xml定义基于内存的manager实现,默认的activiti.mem.xml内容以下:
<!-- 自定义成员关系管理 --> <bean id="myMembershipManager" class="org.openwebflow.mgr.mem.InMemoryMembershipManager" /> <bean id="myUserDetailsManager" class="org.openwebflow.mgr.mem.InMemoryUserDetailsManager" /> <!-- 自定义的活动权限表管理 --> <bean id="myActivityPermissionManager" class="org.openwebflow.mgr.mem.InMemoryActivityPermissionManager" /> <!-- 代理关系管理 --> <bean id="myDelegationManager" class="org.openwebflow.mgr.mem.InMemoryDelegationManager" /> <!-- 自定义的动态自定义活动管理 --> <bean id="myActivityDefinitionManager" class="org.openwebflow.mgr.mem.InMemoryRuntimeActivityDefinitionManager" /> <bean id="myTaskNotificationManager" class="org.openwebflow.mgr.mem.InMemoryTaskNotificationManager" />
这里面定义了6个manager:
Manager类别 |
含义 |
|
|
|
|
|
|
|
|
|
|
|
|
完整的例子参见:https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.mem.xml
与activiti.cfg.core.xml相似的可替代文件为activiti.cfg.sql.hibernate.xml和activiti.cfg.sql.mybatis.xml。
activiti.sql.hibernate.xml提供基于SQL的manager实现,采用的ORM框架为Hibernate 4。
各manager的定义以下:
<!-- 代理记录管理 --> <bean id="myDelegationManager" class="org.openwebflow.mgr.hibernate.service.SqlDelegationManager" /> <!-- 自定义成员关系管理 --> <bean id="myMembershipManager" class="org.openwebflow.mgr.hibernate.service.SqlMembershipManager" /> <!-- 自定义用户表 --> <bean id="myUserDetailsManager" class="org.openwebflow.mgr.hibernate.service.SqlUserDetailsManager" /> <!-- 自定义的活动权限表管理 --> <bean id="myActivityPermissionManager" class="org.openwebflow.mgr.hibernate.service.SqlActivityPermissionManager" /> <!-- 自定义的动态自定义活动管理 --> <bean id="myActivityDefinitionManager" class="org.openwebflow.mgr.hibernate.service.SqlRuntimeActivityDefinitionManager" /> <bean id="myTaskNotificationManager" class="org.openwebflow.mgr.hibernate.service.SqlTaskNotificationManager" />
此外,还须要定义数据源、Hibernate Session工厂,以及事务。
<!-- 数据库脚本见openwebflow.sql --> <bean id="owfDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${owfdb.driver}" /> <property name="url" value="${owfdb.url}" /> <property name="username" value="${owfdb.username}" /> <property name="password" value="${owfdb.password}" /> <property name="initialSize" value="20" /> <property name="maxActive" value="50" /> <property name="maxIdle" value="20" /> <property name="minIdle" value="10" /> </bean> <!-- 配置SessionFactory --> <bean id="sessionFactory" class="org.springframework.orm.hibernate4.LocalSessionFactoryBean"> <property name="dataSource" ref="owfDataSource" /> <property name="hibernateProperties"> <props> <prop key="hibernate.dialect">${hibernate.dialect}</prop> <!-- <prop key="hibernate.dialect">org.hibernate.dialect.SQLServer2008Dialect</prop> --> <!-- 服务启动经过实体建立数据库表信息 --> <prop key="hibernate.hbm2ddl.auto">${hibernate.hbm2ddl.auto}</prop> <prop key="hibernate.show_sql">true</prop> <prop key="hibernate.format_sql">true</prop> <prop key="hibernate.jdbc.batch_size">20</prop> <prop key="hibernate.connection.release_mode">auto</prop> <prop key="hibernate.autoReconnect">false</prop> <prop key="hibernate.connection.autocommit">true</prop> <prop key="hibernate.temp.use_jdbc_metadata_defaults">false</prop> <prop key="hibernate.jdbc.use_streams_for_binary">true</prop> <prop key="hibernate.current_session_context_class">org.springframework.orm.hibernate4.SpringSessionContext </prop> <!--解决weblogic没法使用hql的问题 --> <prop key="hibernate.cglib.use_reflection_optimizer">true</prop> </props> </property> <!-- 自动扫描备注解的实体 --> <property name="packagesToScan"> <list> <value>org.openwebflow.mgr.hibernate.entity</value> </list> </property> </bean> <!-- 配置一个事务管理器 --> <bean id="transactionManager" class="org.springframework.orm.hibernate4.HibernateTransactionManager"> <property name="sessionFactory" ref="sessionFactory" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />
采用HibernateORM,openwebflow-mgr-hibernate的代码结构以下:
其中,DAO类、实体类、服务类分别存放在dao、entity、service包下面。service类的事务声明以及entity的映射皆采起注解方式。
完整的例子参见:https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.sql.hibernate.xml
activiti.sql.mybatis.xml提供基于SQL的manager实现,采用的ORM框架为mybatis 3。
各manager的定义以下:
<!-- 代理记录管理 --> <bean id="myDelegationManager" class="org.openwebflow.mgr.mybatis.service.SqlDelegationManager" /> <!-- 自定义成员关系管理 --> <bean id="myMembershipManager" class="org.openwebflow.mgr.mybatis.service.SqlMembershipManager" /> <!-- 自定义用户表 --> <bean id="myUserDetailsManager" class="org.openwebflow.mgr.mybatis.service.SqlUserDetailsManager" /> <!-- 自定义的活动权限表管理 --> <bean id="myActivityPermissionManager" class="org.openwebflow.mgr.mybatis.service.SqlActivityPermissionManager" /> <!-- 自定义的动态自定义活动管理 --> <bean id="myActivityDefinitionManager" class="org.openwebflow.mgr.mybatis.service.SqlRuntimeActivityDefinitionManager" /> <bean id="myTaskNotificationManager" class="org.openwebflow.mgr.mybatis.service.SqlTaskNotificationManager" />
此外,还须要定义数据源、SqlSessionFactory,以及事务。
<!-- 数据库脚本见openwebflow.sql --> <bean id="owfDataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="${owfdb.driver}" /> <property name="url" value="${owfdb.url}" /> <property name="username" value="${owfdb.username}" /> <property name="password" value="${owfdb.password}" /> <property name="initialSize" value="20" /> <property name="maxActive" value="50" /> <property name="maxIdle" value="20" /> <property name="minIdle" value="10" /> </bean> <!-- 建立SqlSessionFactory,同时指定数据源--> <bean id="owlSqlSessionFactory" class="org.mybatis.spring.SqlSessionFactoryBean"> <property name="dataSource" ref="owfDataSource" /> </bean> <!-- 配置一个事务管理器 --> <bean id="transactionManager" class="org.springframework.jdbc.datasource.DataSourceTransactionManager"> <property name="dataSource" ref="owfDataSource" /> </bean> <tx:annotation-driven transaction-manager="transactionManager" />
采用Mybatis ORM,openwebflow-mgr-mybatis的代码结构以下:
其中,Mapper接口、实体类、服务类分别存放在mapper、entity、service包下面。service类的事务声明以及Mapper的映射皆采起注解方式。
完整的例子参见:https://gitee.com/bluejoe/openwebflow/blob/master/openwebflow-test/src/test/resources/activiti.cfg.sql.mybatis.xml
首先,Activiti引擎自己须要用到一系列的数据表,设置好数据源后,Activiti会自动生成这些表。
Activiti的表都以ACT_开头,第二部分是表示表的用途的两个字母标识。用途也和服务的API对应。
OpenWebFlow为一系列manager提供了基于数据库的实现,须要用到一些数据表,对应的建库脚本参见https://gitee.com/bluejoe/openwebflow/tree/master/doc目录下的:
其中共定义了6张表格:
注意:OWF_MEMBERSHIP和OWF_USER仅为测试使用,建议用户使用本身的数据表(OpenWebFlow自己努力的一个方向就是将用户及成员关系管理与工做流引擎剥离开),并包装本身的Manager。
采用Spring IoC框架加载完XML配置文件以后,ApplicationContext中会包含以下变量,可供客户程序使用:
以下是使用OpenWebFlow的示例代码,能够看出来与Activiti的用法彻底一致:
ApplicationContext ctx = new ClassPathXmlApplicationContext("classpath:activiti.cfg.mem.xml"); ProcessEngineTool tool = ctx.getBean(ProcessEngineTool.class); ProcessEngine processEngine = tool.getProcessEngine(); // 启动流程实例 ProcessInstance instance = processEngine.getRuntimeService().startProcessInstanceByKey("test1"); TaskService taskService = processEngine.getTaskService(); //会自动跳转到第一个task //management能够访问该task Assert.assertEquals(1, taskService.createTaskQuery().taskCandidateGroup("management").count());
在openwebflow-test项目源代码中,用户能够找到一组测试用例来对工做流引擎的功能进行测试,它们分别是:
以上3个测试类都继承于AbstractProcessEngineTest:
AbstractProcessEngineTest提供了测试方法:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
其中为了配合测试设计了一个复杂的流程(models/test2.bpmn)如图所示:
选择指定的测试单元(如:MemProcessEngineTest),以“JUnit测试”的方式运行(Run As…),便可观察到测试结果:
也能够选择运行测试套件AllTests:
用户能够下载OpenWebFlow的zip包,下载地址为:https://gitee.com/bluejoe/openwebflow/archive/master.zip
也能够经过git方式获取到最新源码,git资源库地址为:https://gitee.com/bluejoe/openwebflow.git
OpenWebFlow源码包含5个maven工程,其中openwebflow工程是父工程,它声明了包含openwebflow-core、openwebflow-mgr-hibernate、openwebflow-mgr-mybatis、openwebflow-test等4个model。
获取到的项目源码能够采用Maven完成build和install,以下为build截图:
ProcessEngineConfigurationEx是针对Activiti提供的ProcessEngineConfiguration类的派生类:
两者大部分参数彻底一致,惟一不一样的是,ProcessEngineConfigurationEx提供了一个属性:startEngineEventListeners。
startEngineEventListeners用以定义工做流引擎启动的时候须要同时启动的其它任务,startEngineEventListeners是个List,所以能够随意增长新的任务,默认的core.xml中会加载以下任务:LoadDummyFormTypes、ReplaceMembershipManager、ReplaceTaskAssignmentHandler、ImportDefinedProcessModels、StartTaskAlarmService、LoadRuntimeActivityDefinitions。各任务及类属性列表以下:
任务类 |
用途 |
属性名 |
属性含义 |
LoadDummyFormTypes |
加载一些无用的Form类型,用以屏蔽一些自定义Form带来的错误 |
typeNames |
须要屏蔽的Form类型名,以;分隔,如:user |
ReplaceMembershipManager |
直接接管用户组成员关系 |
customMembershipManager |
指定客户程序自定义的管理器 |
ReplaceTaskAssignmentHandler |
接管Activiti的用户权限管理,若是你想实现动态的节点权限分配,那必需要打开它。 |
handlers |
定义一个受权处理器列表,值类型为List,运行时刻各受权处理器列表会组成一个链,越靠后优先级越高(越靠外) |
ImportDefinedProcessModels |
自动从指定目录导入BPMN模型 |
modelDir |
用以指定模型的路径,能够是classpath:等路径 |
StartTaskAlarmService |
启动任务催办服务 |
taskAlarmService |
设置催办服务对象 |
|
|
runOnStartup |
是否一开始就启动(默认为true) |
LoadRuntimeActivityDefinitions |
加载运行时的节点定义,主要用来支持在运行时刻定义新的节点 |
activityDefinitionManager |
指定节点定义管理器 |
ProcessEngineTool提供了一些工具方法,这些方法的功能通常很难经过ProcessEngine直接拿到:
方法摘要 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
OpenWebFlow提供了一些常见的工具类,以下所示:
类摘要 |
|
|
|
|
|
|
|
|
|
|
|
TaskFlowControlService用以实现流程的自由控制,它提供的方法以下:
方法摘要 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
TaskFlowControlService须要一个TaskFlowControlServiceFactory来建立,能够从applicationcontext中获取到该工厂对象。
OpenWebFlow须要用户提供6类管理器的接口,它们分别是:
除了这些Manager以外,用户会发现OpenWebFlow还提供了一系列的ManagerEx接口:
能够简单的认为,Manager接口主要用以信息读取(read),ManagerEx接口主要用以信息写入(write),注意使用OpenWebFlow引擎时,ManagerEx不是必需要提供相应实现的!OpenWebFlow引擎的全部操做只会调用到Manager而非ManagerEx,提供ManagerEx的惟一用处是为了测试(若是没有写入,读取返回的永远是空白,测试就没法正常进行了)。
客户程序每每须要在运行时候调整某个工做流的流程,如:让活动step5执行完以后跳转至step2,这样的操做须要建立一个新的路径,为了保证后续流程的正常执行(特别是应用重启以后),这样的路径须要保存和加载。
RuntimeActivityDefinitionManager包含以下方法:
|
|
|
|
|
|
|
|
RuntimeActivityDefinitionEntity对应于一条活动的定义信息:
|
||
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
活动权限的管理接口为ActivityPermissionManager,它的定义以下:
|
|
|
|
很是简单,它只须要一个方法,该方法返回一个ActivityPermissionEntity,该实体的定义以下:
|
|
|
|
|
|
|
|
ActivityPermissionManagerEx实现对活动权限表的“写”操做:
|
|
|
|
|
|
TaskNotificationManager负责读取和设置任务催办的状态,该接口也很简单:
|
|
|
|
|
|
能够理解成TaskNotificationManager维护了一个队列,记录了每一个任务的通知状态(已通知为true,未通知为false)。
TaskNotificationManagerEx实现了对通知记录的“写”操做:
|
|
|
|
DelegationManager用以维护用户之间的代理关系。接口包含2个方法:
|
|
|
|
|
|
DelegationEntity
描述一条代理关系:
|
|
|
|
|
|
DelegationManagerEx用以实现对代理记录的“写”操做:
|
|
|
|
|
|
UserDetailsManager负责获取用户的信息(包括E-mail、昵称、手机号等),主要用以发送催办通知。UserDetailsManager接口包含的方法以下:
|
|
|
|
UserDetailsEntity
用以描述用户详细信息,注意它没有强制要求提供诸如getName()这样的方法,而是提供了一个getProperty(Stringname)方法:
|
||
|
|
|
|
|
|
|
|
|
|
|
UserDetailsEntity
同时提供了几个字符串常量:
|
|
|
|
|
|
|
|
|
|
UserDetailsManagerEx用以实现用户信息的“写”操做:
|
|
|
|
|
|
IdentityMembershipManager负责获取用户组成员关系,简单点,就是获取指定用户所在的组的ID列表,以及指定组内的成员ID列表。
|
|
|
|
|
|
IdentityMembershipManagerEx提供了对成员关系信息的“写”操做:
|
|
|
|
|
|
本文档的下载地址为:https://gitee.com/bluejoe/openwebflow/tree/master/doc,可经过该地址及时查阅最新版本。
若是用户须要查阅OpenWebFlow的Java API,能够参考javadoc(https://gitee.com/bluejoe/openwebflow/tree/master/openwebflow-core/doc/javadoc)。
另外能够关注Wiki(https://gitee.com/bluejoe/openwebflow/wiki),提交话题(https://gitee.com/bluejoe/openwebflow/issues),以及与做者bluejoe2008@gmail.com直接联系。
目前做者发现Activiti框架存在2个bug,主要表如今:
第一个bug是在BaseBpmnJsonConverter将BPMN模型转存为JSON格式的时候,会忽略对true布尔值的输出,这个bug会形成JsonConverterUtil.getPropertyValueAsBoolean()获取到false值(由于此时的判断标准变成Yes或No)。该bug的报告地址:https://github.com/Activiti/Activiti/pull/464#event-204722250
另一个bug是在BPMN文件加载的时候,当本地字符集为非UTF-8(如:GB2312)时,会出现模型加载的错误。该bug的报告地址:https://github.com/Activiti/Activiti/pull/486#event-220121880
目前(2014年)做者已经针对以上两个bug提交了bugfix并被master版本合并。不过考虑到版本稳定性问题,OpenWebFlow最新版本仍是采用了其余方法来避免了如上bug的发生。