`

JBPM4配置文件解析

 
阅读更多
xml -> Binding -> Descriptor -> WireDefinition -> WireContext

xml     :JBPM配置文件,主配置文件jbpm.cfg.xml;
binding :解析JBPM配置文件中的标签,解析后生成Descritor对象;每个bind对象和xml中的标签一一对应;可以参看WireParser类中对bind的解析和初始化,bindings定义文件jbpm.wire.bindings.xml;
descritor:JBPM配置文件的描述对象,暂且没有实例化,但是有创建和初始化的方法;
wireDefinition:description对象的集合,用Map对象实现;
wireContext:解析上下文,包含wireDefine对象,封装了descrition的创建方法,相当于descritor的代理;


1、jbpm.tx.hibernate.cfg.xml中有如下定义:
    <command-service name="txRequiredCommandService">
      <skip-interceptor />
      <retry-interceptor />
      <environment-interceptor />
      <standard-transaction-interceptor />
    </command-service>

    <command-service name="newTxRequiredCommandService">
      <retry-interceptor />
      <environment-interceptor policy="requiresNew" />
      <standard-transaction-interceptor />
    </command-service>

2、Binding对象用于解析xml:

public class CommandServiceBinding extends WireDescriptorBinding {

  public CommandServiceBinding() {
    super("command-service");
  }
 
  protected CommandServiceBinding(String tagName) {
    super(tagName);
  }

  public Object parse(Element element, Parse parse, Parser parser) {
    CommandServiceDescriptor commandServiceDescriptor = new CommandServiceDescriptor();

    CommandService commandService = getCommandService(element, parse, parser);
    commandServiceDescriptor.setCommandService(commandService);
   
    List<Element> interceptorElements = XmlUtil.elements(element);
    for (Element interceptorElement : interceptorElements) {
      Descriptor interceptorDescriptor = (Descriptor) parser.parseElement(interceptorElement, parse, WireParser.CATEGORY_INTERCEPTOR);
      commandServiceDescriptor.addInterceptorDescriptor(interceptorDescriptor);
    }

    return commandServiceDescriptor;
  }

  protected CommandService getCommandService(Element element, Parse parse, Parser parser) {
    Boolean async = XmlUtil.attributeBoolean(element, "async", parse);
    if (Boolean.TRUE.equals(async)) {
      AsyncCommandService asyncCommandService = new AsyncCommandService();

      Boolean propagateUserId = XmlUtil.attributeBoolean(element, "propagate-auth", parse);
      if (propagateUserId!=null) {
        asyncCommandService.setPropagateUserId(propagateUserId);
      }
      return asyncCommandService;
    }
   
    return new DefaultCommandService();
  }
}

3、Descriptor的代码:
public class CommandServiceDescriptor extends AbstractDescriptor {

  private static final long serialVersionUID = 1L;
 
  CommandService commandService;
  List<Descriptor> interceptorDescriptors;

  public Object construct(WireContext wireContext) {
    CommandService interceptedCommandService = commandService;
    if (interceptorDescriptors!=null) {
      for (int i=interceptorDescriptors.size()-1 ; i>=0; i--) {
        Descriptor descriptor = interceptorDescriptors.get(i);
        Interceptor interceptor = (Interceptor) descriptor.construct(wireContext);
        interceptor.setNext(interceptedCommandService);
        interceptedCommandService = interceptor;
      }
    }
    return interceptedCommandService;
  }
 
  public Class< ? > getType(WireDefinition wireDefinition) {
    return (name==null ? CommandService.class : null);
  }
 
  public void addInterceptorDescriptor(Descriptor descriptor) {
    if (interceptorDescriptors==null) {
      interceptorDescriptors = new ArrayList<Descriptor>();
    }
    interceptorDescriptors.add(descriptor);
  }
 
  public void setCommandService(CommandService commandService) {
    this.commandService = commandService;
  }
}
分享到:
评论

相关推荐

    jbpm核心配置文件

    本篇文章将深入解析jbpm中的两个主要配置文件:jbpm.hibernate.cfg.xml和jbpm.cfg.xml。 首先,我们来看`jbpm.hibernate.cfg.xml`文件。这个名字表明它是与Hibernate ORM(对象关系映射)相关的配置,Hibernate是...

    jBPM4实战系列(二)jBPM4.4+ssh 整合配置及完整实例

    "源码"标签意味着我们将讨论实际的代码实现,可能包括配置文件、Java类、以及任何其他编程元素。"工具"标签则可能是指jBPM4作为流程管理工具的使用,以及SSH框架中的相关工具。 **文件名称解析:** "leave.sql" ...

    jbpm4jbpm5

    以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. **jbpm4表结构和表字段说明**: jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程...

    jBPM4的PVM实现解析

    - 通过读取配置文件(`jbpm.cfg.xml`)来初始化这些设置。 2. **EngineIOC**: - 使用了依赖注入技术来管理组件和服务的生命周期。 - 通过`ThreadLocal`来维护当前环境的上下文信息。 3. **IOC容器**: - 初始化时...

    JBPM4 java源代码分包详解JBPM4

    4. **org.jbpm.pvm.internal.cfg**: 这里包含了配置文件的解析和流程引擎的初始化。`JbpmConfiguration`和`SpringConfiguration`实现了`org.jbpm.api.Configuration`接口,使得可以从配置文件中加载并创建`...

    jbpm4源代码 简单实现公文流转

    - **配置文件**:如jbpm的配置文件(jbpm.cfg.xml),数据库连接配置,以及Web应用的部署描述符(web.xml)。 - **流程定义**:BPMN 2.0格式的XML文件,定义了公文流转的流程模型。 - **资源文件**:如HTML模板,CSS...

    jbpm4 完整的请假流程

    5. **配置文件(如jbpm.cfg.xml)**:定义jbpm4的工作环境,包括数据源、事务管理等。 初学者可以通过学习这个示例项目,了解如何: 1. **安装和配置jbpm4环境**:包括设置JDBC数据源、部署jbpm服务和工作流引擎。...

    jbpm4基本jar包

    2. **流程执行**:jbpm4能够解析并执行流程定义文件(.bpmn或.xml格式),管理流程实例的生命周期,包括启动、暂停、恢复、完成等操作。 3. **任务管理**:jbpm4提供任务服务,允许用户领取、完成任务,以及对任务...

    一个简单的Jbpm4项目源码

    4. **学习持久化机制**: 分析配置文件,了解JBPM4如何利用JPA存储流程实例和变量。 5. **掌握流程调试**: 在jbpm-console中跟踪流程实例,观察其运行轨迹,帮助调试和优化流程。 总之,这个JBPM4项目源码是一个很...

    JBPM4 学习使用总结

    2. **流程部署(Deployment)**:设计好的流程模型可以导出为XML文件,通过Jbpm Deployment Descriptor(JDD)进行配置后,部署到JBPM4服务器上。 ### 三、JBPM4执行与控制 1. **流程引擎(Process Engine)**:...

    jbpm4.rar_jbpm_jbpm designer_jbpm4

    jbpm4.doc文件可能包含了关于jBPM 4的详细文档,包括如何安装和配置jBPM环境,使用jBPM Designer创建和编辑流程,以及如何集成jBPM到Java应用程序中的步骤。文档可能还涵盖了jBPM 4的新特性、最佳实践和常见问题解答...

    jbpm myeclipse配置方法

    - **配置文件路径**: - 将下载好的插件文件放到对应的`plugins`和`features`文件夹中。 - 需要注意的是,这些文件应该放置在一个特定的目录下(例如`%MYELIPSE_HOME%/myplugin`)。 - **编写Java代码**: - 提供...

    jbpm4leave.zip_DEMO_java4leave_jbpm4lea_jbpm4leave_jbpm4leave.zi

    Demo中可能会有相应的数据库表结构和配置文件,用于存储流程实例、任务和变量等信息。 7. **流程实例与任务操作**:在运行时,用户可以通过Web界面或API启动流程实例,领取并完成任务。Java4Leave的实现将涵盖这些...

    JBPM视屏教程共9节 jBPM 4视频教程04设计请假流程

    - "jBPM 4视频教程04.pdf":这很可能是该教程的第四部分的文字版,详细解释了设计请假流程的步骤,可能包含了流程图的解析、代码示例以及实施技巧等内容。 - "family168.txt":文件名中的"family168"可能是一个网站...

    jbpm4设计器 Application化的雏形

    它可能定义了工作流的相关对象和函数,用于解析和执行jbpm4的工作流定义。 2. youi.workbench.js:工作台模块,可能是用来展示和管理流程实例、任务列表以及相关的操作,如启动流程、分配任务等。它为用户提供了一...

    jbpm视频环境配置

    3. jbpm服务器配置:深入解析服务器的安装和配置过程。 4. Eclipse插件安装:演示如何在Eclipse中安装和配置jbpm插件。 5. 创建第一个流程:引导用户创建并运行一个简单的jbpm流程。 6. 进阶功能:涵盖任务管理、...

    jbpm支持表_mysql的sql文件

    同时,你需要了解jbpm的数据库配置,这通常涉及修改jbpm的配置文件(如`jbpm.cfg.xml`),指定数据库连接的URL、用户名和密码。 标签“源码”和“工具”暗示了这篇博客可能不仅限于SQL脚本,还可能涉及到jbpm的源...

    jbpm4.4-demo

    5. **配置文件**:如`jbpm.cfg.xml`,这是jbpm的主要配置文件,用于设定数据库连接、事务管理、工作内存设置等。 6. **运行环境**:可能包括Tomcat、Jetty等应用服务器,用于部署和运行Web应用。 7. **测试用例**...

    Myeclipse优化JBPM4.0配置

    本文将深入解析JBPM4.0在Myeclipse环境下的配置优化,涵盖所需工具列表、下载资源及详细的安装步骤,旨在帮助开发者高效搭建JBPM4工作流开发环境。 ### 一、框架图 JBPM4.0是基于Java的开源工作流引擎,它提供了...

Global site tag (gtag.js) - Google Analytics