`
dkn28dkn
  • 浏览: 17652 次
最近访客 更多访客>>
社区版块
存档分类
最新评论

jbpm3通过processDefinition.createProcessInstance()为什么能保存ProcessInstance之迷

 
阅读更多

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 
  
  
分享到:
评论

相关推荐

    JBPM4中ProcessDefinition、ProcessInstance、Execution、Task关系和区别

    JBPM4 中 ProcessDefinition、ProcessInstance、Execution、Task 关系和区别 ProcessDefinition 是流程的定义,也可以理解为流程的规范。它有一个 id,这个 id 的格式为 {key}-{version},其中 key 和 version 之间...

    jbpm4里的processDefinition、processInstance和Task的使用方法

    在jbpm4中,processDefinition、processInstance和Task是三个非常关键的概念,它们构成了流程管理的基础。 1. **ProcessDefinition**: ProcessDefinition是流程的蓝图,它定义了一个流程的结构和行为。它包含了...

    jbpm流程控制初学者容易接触的domo

    ProcessInstance pi=pd.createProcessInstance(); jc.close(); } public void testrun(){ //得到流程定义(在数据库) JbpmConfiguration jbpmConfiguration=JbpmConfiguration.getInstance(); ...

    jBPM实例开发 精品文档.docx

    流程定义通过XML文本解析成ProcessDefinition对象,然后创建ProcessInstance实例来启动执行。执行过程中,通过调用Token的signal()方法来推进流程状态。 1.2 数据库示例 jBPM的一大特点是能够将流程实例的执行状态...

    工作流与JBPM开发实例精解.docx

    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....

    jbpm.4.4.jar

    这个API定义了各种类和接口,如ProcessDefinition、ProcessInstance、TaskService等,使得开发者能够以面向对象的方式理解和操作流程。 jbpm-api-4.4-sources.jar是jbpm API的源代码包,对于开发人员来说,这是一个...

    JBPM4之基础学习及接口

    for (ProcessDefinition processDefinition : list) { System.out.println("流程定义Id:" + processDefinition.getId()); System.out.println("流程部署Id:" + processDefinition.getDeploymentId()); } ``` 删除...

    jbpm3.2开发总结.pdf

    jbpm3.2使用XML文件定义流程,比如processdefinition.xml文件。文档中提到了节点类型,如task-node(任务节点)、state-node(状态节点)、decision-node(决策节点)、fork(分叉节点)、join(合并节点),以及...

    JBPM数据库表说明.

    7. **ProcessDefinition表**:此表提供了关于流程定义的详细信息,包括流程ID、版本、资源名称、流程图XML等,帮助系统识别和解析流程模型。 8. ** SwimlaneInstance表**:泳道实例表记录了参与者的活动分配,泳道...

    jbpm3.2表说明

    JBPM_PROCESSINSTANCE JBPM_PROCESSINSTANCE FK_PROCIN_PROCDEF PROCESSDEFINITION_ 一个流程模板可能有很多的流程实例 JBPM_ACTION JBPM_ACTION FK_ACTION_PROCDEF PROCESSDEFINITION_ 一个流程可能有很多的action...

    jbpm4jbpm5

    文字版提供了jbpm的开发指导,可能涵盖了如何配置环境、创建流程定义(Process Definition)、设计工作流、处理事件、集成其他系统等方面的内容。开发者可以通过指南学习到jbpm的核心概念,如流程定义语言(bpmn2.0...

    javaee三大框架整合宅急送项目lib包

    ProcessDefinition processDefinition = processEngine.getRepositoryService().createProcessDefinitionQuery().processDefinitionId(processInstance.getProcessDefinitionId()).uniqueResult(); return ...

    JBPM流程监控的实现过程

    JBPM使用三张核心表来记录流程定义、实例和任务实例的信息:`JBPM_PROCESSDEFINITION`、`JBPM_PROCESSINSTANCE` 和 `JBPM_TASKINSTANCE`。 1. **获取所有已发布流程的最新版本** 通过`JbpmContext`对象可以访问到...

    JBPM数据库表说明.doc

    #### 1.1 JBPM_PROCESSDEFINITION 这个表存储了流程模板的信息,包括流程定义的元数据,如流程ID、版本、名称和XML定义。 #### 1.2 JBPM_NODE 此表包含了流程中的各个节点信息,如任务节点、决策节点等,记录了节点...

    jbpm3.2.3 源码

    在源码中,`org.jbpm.process.instance`包下的类扮演了关键角色,如ProcessInstance、NodeInstance等,它们实现了流程实例的生命周期管理,包括启动、暂停、恢复和结束流程。 4. **任务管理**: jbpm支持用户任务...

    jbpm开发指南--jbpm全面介绍

    通过查看JBPM的表,我们知道要实现流程监控功能就是把JBPM当中的JBPM_PROCESSDEFINITION(已发布的流程表),JBPM_PROCESSINSTANCE(流程实例表),JBPM_TASKINSTANCE(流程产生的任务实例表)这三张表串联起来就可以...

    JBPM数据表结构.doc

    - **JBPM_PROCESSDEFINITION**:这是流程模板表,存储了流程定义的信息,如流程ID、版本、名称等。外键与其它表关联,如JBPM_NODE表示流程中的节点信息,JBPM_TRANSITION表示流程中的转换,JBPM_EVENT表示流程中的...

    J2EE OA 框架JBPM开发步骤

    2. **部署流程定义**:通过`context.deployProcessDefinition(definition)`方法将`ProcessDefinition`对象部署到JBPM环境中。 3. **关闭JBPM上下文**:最后调用`context.close()`方法释放资源。 #### 五、启动和...

Global site tag (gtag.js) - Google Analytics