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.hibernate.cfg.xml和jbpm.cfg.xml。 首先,我们来看`jbpm.hibernate.cfg.xml`文件。这个名字表明它是与Hibernate ORM(对象关系映射)相关的配置,Hibernate是...
"源码"标签意味着我们将讨论实际的代码实现,可能包括配置文件、Java类、以及任何其他编程元素。"工具"标签则可能是指jBPM4作为流程管理工具的使用,以及SSH框架中的相关工具。 **文件名称解析:** "leave.sql" ...
以下是基于给定文件的信息,深入解析jbpm4和jbpm5的知识点: 1. **jbpm4表结构和表字段说明**: jbpm4.3表结构和表字段说明文档通常会详细介绍jbpm4中涉及的数据库表,包括实体如任务实例(TaskInstance)、流程...
- 通过读取配置文件(`jbpm.cfg.xml`)来初始化这些设置。 2. **EngineIOC**: - 使用了依赖注入技术来管理组件和服务的生命周期。 - 通过`ThreadLocal`来维护当前环境的上下文信息。 3. **IOC容器**: - 初始化时...
4. **org.jbpm.pvm.internal.cfg**: 这里包含了配置文件的解析和流程引擎的初始化。`JbpmConfiguration`和`SpringConfiguration`实现了`org.jbpm.api.Configuration`接口,使得可以从配置文件中加载并创建`...
- **配置文件**:如jbpm的配置文件(jbpm.cfg.xml),数据库连接配置,以及Web应用的部署描述符(web.xml)。 - **流程定义**:BPMN 2.0格式的XML文件,定义了公文流转的流程模型。 - **资源文件**:如HTML模板,CSS...
5. **配置文件(如jbpm.cfg.xml)**:定义jbpm4的工作环境,包括数据源、事务管理等。 初学者可以通过学习这个示例项目,了解如何: 1. **安装和配置jbpm4环境**:包括设置JDBC数据源、部署jbpm服务和工作流引擎。...
2. **流程执行**:jbpm4能够解析并执行流程定义文件(.bpmn或.xml格式),管理流程实例的生命周期,包括启动、暂停、恢复、完成等操作。 3. **任务管理**:jbpm4提供任务服务,允许用户领取、完成任务,以及对任务...
4. **学习持久化机制**: 分析配置文件,了解JBPM4如何利用JPA存储流程实例和变量。 5. **掌握流程调试**: 在jbpm-console中跟踪流程实例,观察其运行轨迹,帮助调试和优化流程。 总之,这个JBPM4项目源码是一个很...
2. **流程部署(Deployment)**:设计好的流程模型可以导出为XML文件,通过Jbpm Deployment Descriptor(JDD)进行配置后,部署到JBPM4服务器上。 ### 三、JBPM4执行与控制 1. **流程引擎(Process Engine)**:...
jbpm4.doc文件可能包含了关于jBPM 4的详细文档,包括如何安装和配置jBPM环境,使用jBPM Designer创建和编辑流程,以及如何集成jBPM到Java应用程序中的步骤。文档可能还涵盖了jBPM 4的新特性、最佳实践和常见问题解答...
- **配置文件路径**: - 将下载好的插件文件放到对应的`plugins`和`features`文件夹中。 - 需要注意的是,这些文件应该放置在一个特定的目录下(例如`%MYELIPSE_HOME%/myplugin`)。 - **编写Java代码**: - 提供...
Demo中可能会有相应的数据库表结构和配置文件,用于存储流程实例、任务和变量等信息。 7. **流程实例与任务操作**:在运行时,用户可以通过Web界面或API启动流程实例,领取并完成任务。Java4Leave的实现将涵盖这些...
- "jBPM 4视频教程04.pdf":这很可能是该教程的第四部分的文字版,详细解释了设计请假流程的步骤,可能包含了流程图的解析、代码示例以及实施技巧等内容。 - "family168.txt":文件名中的"family168"可能是一个网站...
它可能定义了工作流的相关对象和函数,用于解析和执行jbpm4的工作流定义。 2. youi.workbench.js:工作台模块,可能是用来展示和管理流程实例、任务列表以及相关的操作,如启动流程、分配任务等。它为用户提供了一...
3. jbpm服务器配置:深入解析服务器的安装和配置过程。 4. Eclipse插件安装:演示如何在Eclipse中安装和配置jbpm插件。 5. 创建第一个流程:引导用户创建并运行一个简单的jbpm流程。 6. 进阶功能:涵盖任务管理、...
同时,你需要了解jbpm的数据库配置,这通常涉及修改jbpm的配置文件(如`jbpm.cfg.xml`),指定数据库连接的URL、用户名和密码。 标签“源码”和“工具”暗示了这篇博客可能不仅限于SQL脚本,还可能涉及到jbpm的源...
5. **配置文件**:如`jbpm.cfg.xml`,这是jbpm的主要配置文件,用于设定数据库连接、事务管理、工作内存设置等。 6. **运行环境**:可能包括Tomcat、Jetty等应用服务器,用于部署和运行Web应用。 7. **测试用例**...
本文将深入解析JBPM4.0在Myeclipse环境下的配置优化,涵盖所需工具列表、下载资源及详细的安装步骤,旨在帮助开发者高效搭建JBPM4工作流开发环境。 ### 一、框架图 JBPM4.0是基于Java的开源工作流引擎,它提供了...