`
pfwang
  • 浏览: 105756 次
社区版块
存档分类
最新评论

osworkflow代码分析

阅读更多

1.com.opensymphony.workflow.Workflow 工作流的用户接口。

       主要定义了用户对工作流的操作方法和用户获得工作流信息的方法。如doAction(long id, int actionId, Map inputs)方法可以执行工作流的Action并产生transaction;用户调用getAvailableActions(long id, Map inputs)可以获得知道工作流实例中符合条件的可以执行的Action。

2.com.opensymphony.workflow.WorkflowContext 工作流的Context接口。

      只有两个方法,其中getCaller()获得调用者,setRollbackOnly()可以回滚Action造成的transaction。

      setRollbackOnly()方法非常重要,可以在此方法中实现工作流数据与业务数据的事务处理。由于工作流引擎将流程数据与业务数据分离开管理,所以工作流数据与业务数据之间的事务处理往往比较困难,甚至有很多商业的工作流引擎都没有解决这个问题,造成软件上的漏洞。可惜在BasicWorkflowContext中并没有实现回滚时的事务处理,但实现起来应该不会很困难,在以后会单独考虑。

3.com.opensymphony.workflow.spi.WorkflowEntry 工作流实例的接口。

     定义了获得工作流实例信息的方法。

4.com.opensymphony.workflow.config.Configuration 工作流配置接口。

      获得osworkflw的配置信息和流程的定义信息, osworkflow中的例子就是使用此接口的默认实现。如果想让osworkflw与自己的系统更好的整合,这个接口需要自己实现。

5.com.opensymphony.workflow.loader.AbstractWorkflowFactory 流程定义的解析器。

      osworkflow中提供了此抽象类的3种实现,最常用的是XMLWorkflowFactory,可以对编写的工作流定义xml文件进行解析。

6.com.opensymphony.workflow.spi.WorkflowStore 工作流存储接口。

      实现此接口可以实现用多种途径保存工作流信息,jdbc,hibernate,ejb,memory.........

AbstractWorkflow类是workflow接口的最基本的实现。

1.public int[] getAvailableActions(long id, Map inputs)方法:

返回当前可以执行的Ation。

  • 得到工作流流程实例。
  • 得到工作流实例的定义。
  • 得到工作流实例的PropertySet。
  • 得到工作流的当前Step。
  • 产生TransientVars。
  • 得到Global Actions。
  • 判断可以执行的Global Action增加到可执行Action列表中。
  • 获得当前Steps中的可执行Action并添加到可执行Action列表中。
  • 返回可执行Actions。

2. public void setConfiguration(Configuration configuration)方法:

设置工作流配置方法。

3.public Configuration getConfiguration()方法:

返回工作流配置方法,如果没有获得配置信息,初始化配置信息。

4.public List getCurrentSteps(long id):

获得工作流当前所在步骤。

5.public int getEntryState(long id):

获得工作流的状态。

6.public List getHistorySteps(long id)

获得工作流的历史步骤。

7. public Properties getPersistenceProperties()

获得设置的持久化参数。

8.public PropertySet getPropertySet(long id)

得到工作流的PropertySet,调用store中的方法。

9.public List getSecurityPermissions(long id)

得到工作流当前Step的permissions。

10.public WorkflowDescriptor getWorkflowDescriptor(String workflowName)

得到工作流的定义。

11.public String getWorkflowName(long id)

根据工作流实例返回工作流定义名。

12. public String[] getWorkflowNames()

返回系统中配置的所有工作流的名字。

13.public boolean canInitialize(String workflowName, int initialAction),public boolean canInitialize(String workflowName, int initialAction, Map inputs),private boolean canInitialize(String workflowName, int initialAction, Map transientVars, PropertySet ps) throws WorkflowException

判断指定的工作流初始化Action是不是可以执行。

14.public boolean canModifyEntryState(long id, int newState)

判断工作流是不是可以转换到指定状态。

  • 不可以转换到CREATED状态。
  • CREATED,SUSPENDED可以转换到ACTIVATED状态。
  • ACTIVATED可以转换到SUSPENDED状态。
  • CREATED,ACTIVATED,SUSPENDED 可以转换到KILLED状态。

15.public void changeEntryState(long id, int newState) throws WorkflowException

转换工作流状态。

16.public void doAction(long id, int actionId, Map inputs) throws WorkflowException

执行Action。

  • 获得工作流store,和流程实例entry。
  • 判断是不是活动的工作流,不是就返回。
  • 获得工作流的定义。
  • 获得工作流当前所再Steps。
  • 获得工作流PropertySet。
  • 生成transientVars。
  • 从GlobalActions中和当前Steps的普通Actions中判断执行的Action是否试可执行的。
  • 完成Action的Transition。

17.public void executeTriggerFunction(long id, int triggerId) throws WorkflowException

调用工作流的Trigger Function

18.public long initialize(String workflowName, int initialAction, Map inputs) throws InvalidRoleException, InvalidInputException, WorkflowException

初始化一个新的流程实例。返回流程实例id。

19.public List query(WorkflowQuery query),public List query(WorkflowExpressionQuery query)

查询流程实例。

20.public boolean removeWorkflowDescriptor(String workflowName) throws FactoryException

删除已经配置的工作流定义。

21.public boolean saveWorkflowDescriptor(String workflowName, WorkflowDescriptor descriptor, boolean replace) throws FactoryException

保存工作流定义。

22.protected List getAvailableActionsForStep(WorkflowDescriptor wf, Step step, Map transientVars, PropertySet ps) throws WorkflowException

获得指定步骤的可用Actions。

23.protected int[] getAvailableAutoActions(long id, Map inputs)

返回可执行的AutoActions。

24.protected List getAvailableAutoActionsForStep(WorkflowDescriptor wf, Step step, Map transientVars, PropertySet ps) throws WorkflowException

返回指定Step中可执行的AutoActions。

25.protected WorkflowStore getPersistence() throws StoreException

返回配置的store。

26.protected void checkImplicitFinish(long id) throws WorkflowException

判断工作流是不是还有可执行的Action,如果没有,完成此工作流实例。

27.protected void completeEntry(long id, Collection currentSteps) throws StoreException

结束工作流实例,就是把改变流程实例的状态并把当前的Steps都放入到历史表中。 

28.protected boolean passesCondition(ConditionDescriptor conditionDesc, Map transientVars, PropertySet ps, int currentStepId) throws WorkflowException

29.protected boolean passesCondition(ConditionDescriptor conditionDesc, Map transientVars, PropertySet ps, int currentStepId) throws WorkflowException,protected boolean passesConditions(String conditionType, List conditions, Map transientVars, PropertySet ps, int currentStepId) throws WorkflowException

判断条件是不是符合。

30.protected void populateTransientMap(WorkflowEntry entry, Map transientVars, List registers, Integer actionId, Collection currentSteps) throws WorkflowException

产生临时变量transientVars,包含context,entry,store,descriptor,actionId,currentSteps,以及定义的register和用户的输入变量。

31.protected void verifyInputs(WorkflowEntry entry, List validators, Map transientVars, PropertySet ps) throws WorkflowException

验证用户的输入。

32.private boolean isActionAvailable(ActionDescriptor action, Map transientVars, PropertySet ps, int stepId) throws WorkflowException

判断Action是否可用。

33.private Step getCurrentStep(WorkflowDescriptor wfDesc, int actionId, List currentSteps, Map transientVars, PropertySet ps) throws WorkflowException

获得Action所在Step。

34.private boolean canInitialize(String workflowName, int initialAction, Map transientVars, PropertySet ps) throws WorkflowException

判断工作流是不是可以实例化。

35.private Step createNewCurrentStep(ResultDescriptor theResult, WorkflowEntry entry, WorkflowStore store, int actionId, Step currentStep, long[] previousIds, Map transientVars, PropertySet ps) throws WorkflowException

产生新的当前Step。

  • 从resulte中获得nextStep,如果为-1,nextStep为当前Step。
  • 获得定义中的owner,oldStatus,status。
  • 完成当前Step,并且将当前Step保存到历史库中。
  • 生成新的Step。

36.private void executeFunction(FunctionDescriptor function, Map transientVars, PropertySet ps) throws WorkflowException

执行Function。

37.private boolean transitionWorkflow(WorkflowEntry entry, List currentSteps, WorkflowStore store, WorkflowDescriptor wf, ActionDescriptor action, Map transientVars, Map inputs, PropertySet ps) throws WorkflowException

完成工作流的transation。

DefaultConfiguration是Configuration接口的默认实现,用于初始化系统的基本配置信息。
1.public WorkflowDescriptor getWorkflow(String name) throws FactoryException
根据工作流的定义名获得工作流的定义。
2.public WorkflowStore getWorkflowStore() throws StoreException
获得配置的持久化类Store。
3.public void load(URL url) throws FactoryException
装载配置信息。
  • 得到配置文件流,并解析。
  • 获得持久化信息,包括持久化类的路径和持久化类初始化参数。
  • 获得工作流信息解析类路径,并初始化。

4. public WorkflowStore getWorkflowStore() throws StoreException

获得工作流初始化类。

XMLWorkflowFactory用于解析工作流定义xml文件,获得工作流信息。
1.public WorkflowDescriptor getWorkflow(String name) throws FactoryException
根据工作流定义名获得工作流定义。
2.public String[] getWorkflowNames()
得到所有已经定义的工作流名称。
3.public void initDone() throws FactoryException
初始化workflows.xml文件中列出的工作流定义文件信息。

分享到:
评论

相关推荐

    osworkflow指导文档 + 源码

    ### 四、osWorkflow 源码分析 源码中包含了 osWorkflow 的核心组件,如 WorkflowEngine、WorkflowDefinition、PersistenceManager 等。通过阅读源码,我们可以了解其内部实现细节,如: - 如何解析 XML 流程定义...

    画流程图的例子(源码)OsWorkFlow.rar

    源码分析方面,OsWorkFlow的核心在于其解析XML配置文件的机制。这部分代码通常涉及DOM或SAX解析器,用于读取和解析XML中的流程定义。另外,流程引擎的执行部分涉及到状态机的设计,它根据当前状态和输入事件,决定...

    osworkflow源码

    源码分析可以帮助我们更好地理解和定制这些应用场景,提升工作效率。 总的来说,osWorkflow 源码的学习涵盖了工作流管理的关键技术,包括工作流定义、实例化、执行和监控等,对于想要深入理解工作流引擎的开发者来...

    OSWorkflow中文手册 OSWorkflow中文手册

    OSWorkflow有活跃的开发者社区,提供文档、示例代码和讨论论坛,方便用户解决问题和分享经验。 通过阅读这本50页的OSWorkflow中文手册,用户可以深入了解OSWorkflow的工作原理,掌握如何设计和实现符合业务需求的...

    OSWorkflow

    - **Java开发者**:对于那些希望通过开源工具提升业务流程自动化水平的Java开发者来说,这本书提供了实用的指导和丰富的代码示例。 - **系统架构师**:系统架构师可以从中学习到如何有效地将OSWorkflow集成到现有...

    osworkflow2.8

    解压缩 "osworkflow2.8.rar" 文件后,通常会包含源码、文档、示例和库文件。开发者需要根据项目需求进行配置,将OSWorkflow集成到应用中,这可能涉及到添加依赖、配置数据库连接以及初始化工作流表。 4. **API ...

    osworkflow-2.8.0.zip

    `lib`目录下是一些osWorkflow运行所依赖的第三方库,比如数据库连接池、XML解析库等。了解这些库可以帮助开发者更好地理解和配置osWorkflow的运行环境,确保其正常运行。 总的来说,osworkflow-2.8.0.zip提供了一...

    OSWorkFlow 请假实例

    在"OSWorkFlow_Helen"这个文件中,很可能是包含了一个示例项目或者代码,用于演示如何使用OSWorkFlow实现请假流程。文件可能包含了流程定义、Java代码示例、数据库脚本以及相关的配置文件。通过学习和分析这个实例,...

    查询osworkflow的历史记录代码

    OSWorkflow,全称为OpenSymphony Workflow,是一款开源的工作流引擎,用于在Java应用程序中实现复杂的...通过`HistoryService`提供的接口,我们可以有效地追踪和分析工作流的执行历程,从而为业务决策提供数据支持。

    OSWorkflow中文手册 2.8

    为了更好地理解如何使用OSWorkflow,可以参考官方提供的示例代码。这些示例通常会涵盖从环境搭建到流程设计的完整过程。通过运行示例,可以快速掌握OSWorkflow的基本用法。 - **加载示例工程**:将示例工程导入到...

    framework osworkflow / jbpm

    6. **监控和报表**:提供详细的运行时监控和统计报表,帮助企业分析和优化流程性能。 `OSWorkflow-Opendoc.pdf`可能包含了关于OSWorkflow的更多开放文档资料,对于深入研究OSWorkflow的高级特性会有帮助。 总的来...

    osworkflow.7z

    "osworkflow.7z"这个压缩包文件显然聚焦于解决这些难题,它集成了Java实现的AJAX文件上传、Excel解析以及OSWorkflow功能,并且提供了一些实用的工具类。以下是对这些关键知识点的详细解释: 1. **AJAX文件上传**:...

    osworkflow成功案例后的总结和升级方案

    2. osworkflow的源码分析,可能涉及到核心类和方法,以及如何通过修改源码来定制化工作流引擎。 3. 在实际项目中的部署和集成,包括配置、API调用、错误处理等。 4. 使用osworkflow解决的具体业务问题,例如流程自动...

    osworkflow开发指南

    10. **示例与实践**:通过实际案例分析,学习如何将osWorkFlow应用于具体业务场景,如请假审批、报销流程等。 在提供的两个PDF文档——"osworkflow-chinese-manual.pdf"和"OSWorkflow开发指南.pdf"中,你应该能找到...

    OSWorkflow工作流程源码(JAVA/JSP)

    源码分析 - **osworkflow-2.7.0.jar**: 这是OSWorkflow的主要库文件,包含了所有核心类和接口,如`com.opensymphony.workflow.Workflow`、`com.opensymphony.workflow.query.Query`等。 - **osworkflow数据库配置...

    osworkflow研究

    `TypeResolver` 是一个关键接口,它在 Spring 应用上下文中帮助获取和解析 bean。`Workflow` 接口则提供对 `Configuration` 和 `TypeResolver` 的访问,是整个工作流管理的核心。 当涉及到 Spring 集成时,我们需要...

    LIFERAY + JAVA WEB START + OSWORKFLOW设计器

    1. 创建Liferay Portlet:开发者需要编写portlet代码,负责处理用户的请求,展示OSWorkflow设计器,并与Liferay的API进行交互。 2. 配置JAVA WEB START:开发者需要创建JNLP文件,指定OSWorkflow设计器的JAR依赖,并...

    osworkflow dynamic split 动态会签的实现

    文章作者可能分享了如何结合源码和工具,如OSWorkflow提供的API和监听器机制,来实现动态会签的实践经验。 总结来说,OSWorkflow的动态会签功能是通过条件分支和并行会签节点实现的,开发者需要理解其工作原理,并...

    OSWorkflow——请假审批系统(代码全,数据库mysql)

    "源码" 表示这个项目提供了完整的源代码,开发者可以研究、学习或在现有基础上进行定制开发。 "工具" 暗示这可能是一个用于辅助开发或管理的工具,例如工作流引擎,它可以被整合到其他业务系统中,以实现自动化的...

Global site tag (gtag.js) - Google Analytics