一、总体服务模型
主要包括:流程定义服务(Process Service)、流程执行服务(Execution Service)、流程管理服务(Management Service)、命令服务(Command Service)
二、数据结构说明
1. JBPM4_DEPLOYMENT 流程定义表@b@2. JBPM4_DEPLOYPROP 流程定义属性表@b@3. JBPM4_EXECUTION 流程实例表@b@ - 主要是存放JBPM4的执行信息,Execution机制代替了JBPM3的Token机制。@b@@b@4. JBPM4_PROPERTY 流程引擎表@b@ @b@5. JBPM4_TASK 任务表@b@ - 存放需要人来完成的Activities,需要人来参与完成的Activity 被称为Task@b@ @b@6. JBPM4_VARIABLE 上下文表 存的是进行时的临时变量@b@7. JBPM4_JOB 定时表 存放的是Timer的定义@b@8. JBPM4_LOB 存储表@b@9. JBPM4_SWIMLANE 泳道表@b@ - Swim Lane是一种Runtime Process Role。通过Swim Lane,多个Task可以一次分配到同一Actor身上。@b@ @b@10. JBPM4_PARTICIPATION 参与者表 @b@ - 存放 Participation的信息,Participation的种类有Candidate、Client、Owner、 Replaced Assignee和Viewer。而具体的Participation既可以是单一用户,也可以是用户组。
历史数据表@b@11. JBPM4_HIST_ACTINST 流程活动(节点)实例表 存放Activity Instance的历史记录@b@12. JBPM4_HIST_DETAIL 流程历史详细表 保存Variable的变更记录@b@13. JBPM4_HIST_PROCINST 流程实例历史表 存放Process Instance的历史信息@b@14. JBPM4_HIST_TASK 流程任务实例历史表 Task的历史信息。@b@15. JBPM4_HIST_VAR 流程变量(上下文)历史表 保存历史的变量
身份认证表结构@b@@b@16. JBPM4_ID_GROUP 组表@b@17. JBPM4_ID_MEMBERSHIP 用户角色表@b@18. JBPM4_ID_USER 用户表@b@@b@这三张表很常见,基本的权限控制
三、包路径定义说明
org.jbpm.pvm.internal.ant@b@ - 提供使用ant发布流程,辅助启动jboss的任务。@b@@b@org.jbpm.pvm.internal.builder@b@ - 用来构造各种模型,包括活动,活动行为,事件,事件处理器,流程定义,变量,任务,等等。@b@@b@org.jbpm.pvm.internal.cal@b@ - 提供日历,包括日期,时间段,持续时间,节假日。@b@@b@org.jbpm.pvm.internal.cfg@b@ - JbpmConfiguration和SpringConfiguration实现了org.jbpm.api.Configuration,用来从配置文件构造ProcessEngine@b@@b@org.jbpm.pvm.internal.xml@b@ - 主要用于解析xml的,主要解析jbpm.cfg.xml和流程定义文件@b@@b@org.jbpm.pvm.internal.util@b@ - 包含常用工具@b@ @b@org.jbpm.pvm.internal.wire@b@ - 用来在ioc里进行依赖绑定。子包包含binding, descriptor, operation和xml,而且默认的绑定方式是使用field,而不是常见的setter绑定方式。@b@ @b@org.jbpm.pvm.internal.type@b@ - 用来进行类型转换,主要是加载jbpm.cfg.xml对流程引擎进行初始化时,还有就是发布流程的时候进行类型转换。子包包括converter,matcher和variable,类型转换器,类型匹配器和变量。@b@@b@org.jbpm.pvm.internal.tx@b@ - 其中负责处理事务,JtaTransaction啦,SpringTransationInterceptor 啦,StandardTransaction啦,这些需要根据实际环境具体选择。jta的实现部分已经单独放到子包jta中了。希望spring中的事务 也能这样处理就好了。@b@@b@org.jbpm.pvm.internal.test@b@ - 包下放了一个JobTestHelper,显然是可以帮助在测试环境下运行job的,。@b@@b@org.jbpm.api.client@b@ - 这部分包含ClientExecution, ClientProcessDefinition, ClientProcessInstance。ClientExecution继承了OpenExecution,声明了end(), signal(), suspend(), resume()之类的方法。ClientProcessDefintion继承了OpenProcessDefintion,其中的功能主要是 createProcessInstance和startProcessInstance。@b@@b@org.jbpm.pvm.internal.cmd@b@ - 包含Command和CommandService,这是命令设计模式的基础。其中放着所有的命令,所有的流程操作都可以在这里找到。@b@@b@org.jbpm.pvm.internal.email@b@ - 下面有两个子包impl和spi,只要注意spi下的AddressResolver, MailProducer和MailSession就可以实现自定义的实现了。@b@@b@org.jbpm.pvm.internal.env@b@ - 包含Context, Environment, EnvironmentFactory, Transaction, WireObject。其中Context, Environment和EnvironmentFactory组成了jBPM4里的IoC系统。Transaction定义了通用事务。 WireObject用来做依赖绑定。下面保存着环境有关的实现类。包括Authentication权限认证,Environment与context 相关的各个类。@b@@b@org.jbpm.pvm.internal.hibernate@b@ - 下面的类是专门与hibernate进行交互的类,包含类型转换,命名策略和最主要的DbSessionImpl,所有与数据库的操作都来源于此。@b@@b@org.jbpm.pvm.internal.history@b@ - 下面是历史操作所需要的部分,其下还包含events和model包。@b@@b@org.jbpm.pvm.internal.identity@b@ - 包主要负责身份认证的操作。包含三个子包cmd, impl和spi,cmd下定义所用到的命令,impl下是实现类,spi下放着IdentitySession。@b@@b@org.jbpm.pvm.internal.jms@b@ - 包括JmsMessageSession和JmsMessageUtil,应该是用来处理jms的,JmsMessageSession与 org.jbpm.api.job.Message相关联。说明job下的Message是依靠jms发送异步消息的。@b@@b@org.jbpm.pvm.internal.job@b@ - 提供了对job, message和timer的实现@b@@b@org.jbpm.pvm.internal.jobexecutor@b@ - 提供了任务执行器,包括JobExecutorServlet和对应的线程池,以及一系列的命令和处理器。无论是job, message或是timer,最终都会被这里执行。@b@@b@org.jbpm.pvm.internal.lob@b@ - 主要用来处理流程发布时的文件内容,需要把jpdl.xml文件和图片,甚至是以后可能把class文件都以附件形式保存到数据库中,以备后用@b@@b@org.jbpm.pvm.internal.model@b@ - 这个模型包中包含了很多很多类,包括Activity, CompositeElement, Condition, ObservableElement, OpenProcessDefinitionTransition。简单分类一下。最底层的是ObservableElement,它是可以被事件监听的 元素,并且可以继承,CompositeElement继承了 ObservableElement,它里面可以装填多个活动。再加上Event中定义了多个事件,这些就构成了最基本的事件模型。Activity和 ActivityCoordinates分别定义了活动类和活动位置。以这些为基础,OpenProcessDefinition继承了 ProcessDefinition和CompositeElement。最终,我们还有一个Condition类,它只有一个evaluate方法,接 受OpenExecution作为参数返回boolean值,Condition和Activity组合成了Transition,这个转移包含了起点, 终点,以及条件判断。最庞大的模型部分,活动,转移,流程定义,流程实例的实现类都放在这里。在它的op子包中包含的是流程进行中的各项操作。@b@@b@org.jbpm.pvm.internal.query@b@History, Job, ProcessDefintion, ProcessInstance这四个query类的实现,还提供了一个Page类,但是其中只有firstResult和maxResults,所以没啥大用@b@@b@org.jbpm.pvm.internal.repository@b@ - 负责的是流程的发布,主要有Deployment和Repository对应的service, session和cache,这里使用的缓存,所以每次使用流程定义的时候可以利用缓存提高效率。@b@@b@org.jbpm.pvm.internal.script@b@ - 包含对脚本的支持,默认支持了JuelScriptEngine。@b@@b@org.jbpm.pvm.internal.session@b@ - 支持各种会话,DbSession, MessageSession, RepositorySession和TimerSession。@b@@b@org.jbpm.pvm.internal.spring@b@ - 只有一个CommandTransactionCallback用来实现从spring中获得事务,并用其执行jbpm中定义的各种命令@b@@b@org.jbpm.pvm.internal.stream@b@ - 用于从各种途径读取资源,无论是jbpm配置文件和流程资源都要通过这些来转换成流的形式,以供给jbpm处理。@b@@b@org.jbpm.pvm.internal.svc@b@ - 其中svc或许是service的缩写。这个包中除了包括org.jbpm.api包下定义的所有service接口的实现,还包括commandService的实现和认证拦截器。@b@@b@org.jbpm.pvm.internal.task@b@ - 代表了所有与任务,任务参与者相关的信息,包括Assignable, AssignmentHandler, OpenTask, Participation, Swimlane, Task, TaskDefinition。简单划分后,主要有任务,任务定义任务处理。剩下的都是与任务分配有关了。TaskDefinition从字面上来看是指 任务定义,里边只有一个getName()。Task中保存了任务相关的一些内容,OpenTask主要用来处理历史事件。参与者部分基本分成三个部分, 以Assignable和AssignmentHandler组成的自定义分配部分,Participation参与者和swimlane泳道。暂时没有 发现三者之间与任务的联系