- 浏览: 17652 次
最新评论
jbpm3通过processDefinition.createProcessInstance()为什么能保存ProcessInstance之迷
2011年08月01日
数据库提交操作是在jbpmcontext.close()方法执行后,事务才提交的. close方法如下: 其中的autoSave()方法如下: 一般人都认为是这里将processInstance保存到数据库.其实这里分2种情况,只有当以
jbpmContext.newProcessInstanceForUpdate(processNam e);方式启动流程时,才会执行这里的操作。
原因是autoSaveProcessInstances通过processDefinition.createProcessInstance()启动时没有值.
autoSave()方法里的循环操作,可以保存流程日志到数据库中.从另一个方面来讲只有以jbpmContext.newProcessInstanceForUpdate(processNam e);方式启动流程时,流程日志表才有数据.
那么我们的流程是通过processDefinition.createProcessInstance()方式启动的,为什么也能将processInstance保存到数据库呢.原因见
下面的堆栈信息.
EntityInsertAction.(Serializable, Object[], Object, Object, EntityPersister, SessionImplementor) line: 34
DefaultSaveOrUpdateEventListener(AbstractSaveEvent Listener).performSaveOrReplicate(Object, EntityKey, EntityPersister, boolean, Object, EventSource, boolean) line: 329
DefaultSaveOrUpdateEventListener(AbstractSaveEvent Listener).performSave(Object, Serializable, EntityPersister, boolean, Object, EventSource, boolean) line: 181
DefaultSaveOrUpdateEventListener(AbstractSaveEvent Listener).saveWithGeneratedId(Object, String, Object, EventSource, boolean) line: 121
DefaultSaveOrUpdateEventListener.saveWithGenerated OrRequestedId(SaveOrUpdateEvent) line: 187
DefaultSaveOrUpdateEventListener.entityIsTransient (SaveOrUpdateEvent) line: 172
DefaultSaveOrUpdateEventListener.performSaveOrUpda te(SaveOrUpdateEvent) line: 94
DefaultSaveOrUpdateEventListener.onSaveOrUpdate(Sa veOrUpdateEvent) line: 70
SessionImpl.fireSaveOrUpdate(SaveOrUpdateEvent) line: 507
SessionImpl.saveOrUpdate(String, Object) line: 499
CascadingAction$1.cascade(EventSource, Object, String, Object, boolean) line: 218
Cascade.cascadeToOne(Object, Type, CascadeStyle, Object, boolean) line: 268
Cascade.cascadeAssociation(Object, Type, CascadeStyle, Object, boolean) line: 216
Cascade.cascadeProperty(Object, Type, CascadeStyle, Object, boolean) line: 169
Cascade.cascade(EntityPersister, Object, Object) line: 130
DefaultSaveEventListener(AbstractSaveEventListener ).cascadeBeforeSave(EventSource, EntityPersister, Object, Object) line: 431
DefaultSaveEventListener(AbstractSaveEventListener ).performSaveOrReplicate(Object, EntityKey, EntityPersister, boolean, Object, EventSource, boolean) line: 265
DefaultSaveEventListener(AbstractSaveEventListener ).performSave(Object, Serializable, EntityPersister, boolean, Object, EventSource, boolean) line: 181
DefaultSaveEventListener(AbstractSaveEventListener ).saveWithGeneratedId(Object, String, Object, EventSource, boolean) line: 121
DefaultSaveEventListener(DefaultSaveOrUpdateEventL istener).saveWithGeneratedOrRequestedId(SaveOrUpdat eEvent) line: 187
DefaultSaveEventListener.saveWithGeneratedOrReques tedId(SaveOrUpdateEvent) line: 33
DefaultSaveEventListener(DefaultSaveOrUpdateEventL istener).entityIsTransient(SaveOrUpdateEvent) line: 172
DefaultSaveEventListener.performSaveOrUpdate(SaveO rUpdateEvent) line: 27
DefaultSaveEventListener(DefaultSaveOrUpdateEventL istener).onSaveOrUpdate(SaveOrUpdateEvent) line: 70
SessionImpl.fireSave(SaveOrUpdateEvent) line: 535
SessionImpl.save(String, Object) line: 523
SessionImpl.save(Object) line: 519
DbPersistenceService.assignId(Object) line: 330
Services.assignId(Object) line: 257
ProcessInstance.(ProcessDefinition, Map, String) line: 137
ProcessInstance.(ProcessDefinition) line: 92
ProcessDefinition.createProcessInstance() line: 125
JpdlServiceImpl.createProcess(String) line: 50
JpdlServiceImpl$$FastClassByCGLIB$$f5b03888.invoke (int, Object, Object[]) line: not available
MethodProxy.invoke(Object, Object[]) line: 149
Cglib2AopProxy$CglibMethodInvocation.invokeJoinpoi nt() line: 700
Cglib2AopProxy$CglibMethodInvocation(ReflectiveMet hodInvocation).proceed() line: 149
TransactionInterceptor.invoke(MethodInvocation) line: 106
Cglib2AopProxy$CglibMethodInvocation(ReflectiveMet hodInvocation).proceed() line: 171
ExposeInvocationInterceptor.invoke(MethodInvocatio n) line: 89
Cglib2AopProxy$CglibMethodInvocation(ReflectiveMet hodInvocation).proceed() line: 171
Cglib2AopProxy$DynamicAdvisedInterceptor.intercept (Object, Method, Object[], MethodProxy) line: 635
JpdlServiceImpl$$EnhancerByCGLIB$$ead8b30c.createP rocess(String) line: not available
JpdlProcessTest.testWorkflow() line: 11
发表评论
-
MTD NAND Analysis 1
2012-01-20 08:14 722MTD NAND Analysis 1 2011年05月06 ... -
内存映射对于大文件的使用
2012-01-20 08:14 666内存映射对于大文件的使用 2011年04月28日 平时很 ... -
rtems 下linkcmd分析代码
2012-01-20 08:14 988rtems 下linkcmd分析代码 2010年11月09日 ... -
连傻瓜都能看懂的基于代码注入的线程守护技术
2012-01-20 08:14 1662连傻瓜都能看懂的基于 ... -
mmap内存映射操作之一
2012-01-20 08:14 1082mmap内存映射操作之一 2011年06月09日 本博客 ... -
S7-300 PLC的串口无线通讯在火电厂污水处理中的应用
2012-01-19 13:31 687S7-300 PLC的串口无线通讯 ... -
IIS32位和64位切换
2012-01-19 13:31 870IIS32位和64位切换 2011年12月22日 X64 ... -
两平台下的自动登录telnet设置
2012-01-19 13:30 645两平台下的自动登录telnet设置 2011年12月28日 ... -
延时批处理
2012-01-19 13:30 797延时批处理 2012年01月12日 举个例子,我们要延时 ... -
ActionScript垃圾回收
2012-01-17 03:20 965ActionScript垃圾回收 2011年10月26日 ... -
计算机故障大全(二)
2012-01-17 03:20 642计算机故障大全(二) 2010年06月02日 硬盘 ... -
琢石成器――windows环境下32位汇编语言程序设计(第三版)笔记
2012-01-17 03:20 2086琢石成器――windows环境下32位汇编语言程序设计(第三版 ... -
WinCE驱动开发问题精华集锦
2012-01-17 03:20 600WinCE驱动开发问题精华 ... -
钢蹦爸爸的自白
2012-01-16 01:54 669钢蹦爸爸的自白 2009年10月24日 怀着复杂的心情 ... -
爱韩庚的100个理由
2012-01-16 01:54 634爱韩庚的100个理由 2009 ... -
火车上的随想
2012-01-16 01:54 553火车上的随想 2011年02 ... -
Android自定义VIEW取得XML的自定义值
2012-01-11 01:53 675Android自定义VIEW取得XML的自定义值 2011年 ... -
常用的正则表达式--Java
2012-01-11 01:53 715常用的正则表达式--Java 2011年08月01日 是 ... -
图片传输问题,IO操作
2012-01-11 01:52 591图片传输问题,IO操作 2011年08月01日 原题: ... -
jsp编码过滤器的配置和使用-用心做程序-iteye技术网站
2012-01-11 01:52 693jsp编码过滤器的配置和使用-用心做程序-iteye技术网站 ...
相关推荐
JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...
在jbpm4中,processDefinition、processInstance和Task是三个非常关键的概念,它们构成了流程管理的基础。 1. **ProcessDefinition**: ProcessDefinition是流程的蓝图,它定义了一个流程的结构和行为。它包含了...
ProcessInstance pi=pd.createProcessInstance(); jc.close(); } public void testrun(){ //得到流程定义(在数据库) JbpmConfiguration jbpmConfiguration=JbpmConfiguration.getInstance(); ...
流程定义通过XML文本解析成ProcessDefinition对象,然后创建ProcessInstance实例来启动执行。执行过程中,通过调用Token的signal()方法来推进流程状态。 1.2 数据库示例 jBPM的一大特点是能够将流程实例的执行状态...
import org.jbpm.graph.def.ProcessDefinition; import org.jbpm.graph.exe.ProcessInstance; import org.jbpm.graph.exe.Token; import org.jbpm.kernel.KnowledgeBase; import org.jbpm.kernel....
这个API定义了各种类和接口,如ProcessDefinition、ProcessInstance、TaskService等,使得开发者能够以面向对象的方式理解和操作流程。 jbpm-api-4.4-sources.jar是jbpm API的源代码包,对于开发人员来说,这是一个...
for (ProcessDefinition processDefinition : list) { System.out.println("流程定义Id:" + processDefinition.getId()); System.out.println("流程部署Id:" + processDefinition.getDeploymentId()); } ``` 删除...
jbpm3.2使用XML文件定义流程,比如processdefinition.xml文件。文档中提到了节点类型,如task-node(任务节点)、state-node(状态节点)、decision-node(决策节点)、fork(分叉节点)、join(合并节点),以及...
7. **ProcessDefinition表**:此表提供了关于流程定义的详细信息,包括流程ID、版本、资源名称、流程图XML等,帮助系统识别和解析流程模型。 8. ** SwimlaneInstance表**:泳道实例表记录了参与者的活动分配,泳道...
JBPM_PROCESSINSTANCE JBPM_PROCESSINSTANCE FK_PROCIN_PROCDEF PROCESSDEFINITION_ 一个流程模板可能有很多的流程实例 JBPM_ACTION JBPM_ACTION FK_ACTION_PROCDEF PROCESSDEFINITION_ 一个流程可能有很多的action...
文字版提供了jbpm的开发指导,可能涵盖了如何配置环境、创建流程定义(Process Definition)、设计工作流、处理事件、集成其他系统等方面的内容。开发者可以通过指南学习到jbpm的核心概念,如流程定义语言(bpmn2.0...
ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processInstance.getProcessDefinitionId()).uniqueResult(); return ...
JBPM使用三张核心表来记录流程定义、实例和任务实例的信息:`JBPM_PROCESSDEFINITION`、`JBPM_PROCESSINSTANCE` 和 `JBPM_TASKINSTANCE`。 1. **获取所有已发布流程的最新版本** 通过`JbpmContext`对象可以访问到...
#### 1.1 JBPM_PROCESSDEFINITION 这个表存储了流程模板的信息,包括流程定义的元数据,如流程ID、版本、名称和XML定义。 #### 1.2 JBPM_NODE 此表包含了流程中的各个节点信息,如任务节点、决策节点等,记录了节点...
在源码中,`org.jbpm.process.instance`包下的类扮演了关键角色,如ProcessInstance、NodeInstance等,它们实现了流程实例的生命周期管理,包括启动、暂停、恢复和结束流程。 4. **任务管理**: jbpm支持用户任务...
通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...
- **JBPM_PROCESSDEFINITION**:这是流程模板表,存储了流程定义的信息,如流程ID、版本、名称等。外键与其它表关联,如JBPM_NODE表示流程中的节点信息,JBPM_TRANSITION表示流程中的转换,JBPM_EVENT表示流程中的...
2. **部署流程定义**:通过`context.deployProcessDefinition(definition)`方法将`ProcessDefinition`对象部署到JBPM环境中。 3. **关闭JBPM上下文**:最后调用`context.close()`方法释放资源。 #### 五、启动和...