andywei520 2010-08-05 22:17
浏览 282
已采纳

JBpm部署流程后,其他的表都有值,jbpm4_deployprop表为空

我采用的以下方式,部署流程
InputStream is = new ByteArrayInputStream(definitionXml.getBytes());
repositoryService.createDeployment().addResourceFromInputStream("process", is).deploy();

  • 写回答

1条回答 默认 最新

  • oyj7454103 2010-08-06 09:05
    关注

    问题就出在参数resourceName:process上,JBPM部署时会判断resourceName是否以“.jpdl.xml“作为后缀,如果是,JBPM才会解析第二个参数为流程定义,否则不做处理。所以在jbpm4_deployprop就不会有数据了。JBPM相关源码在ProcessDeployer.java中如下:

    Java代码
    @SuppressWarnings("unchecked")

    public void deploy(DeploymentImpl deployment) {

    for (String resourceName: deployment.getResourceNames()) {

    if (resourceName.endsWith(extension)) {   
      byte[] bytes = deployment.getBytes(resourceName);   
      InputStream inputStream = new ByteArrayInputStream(bytes);   
      Parse parse = parser.createParse();   
      parse.contextMapPut(Parse.CONTEXT_KEY_DEPLOYMENT, deployment);   
      parse.setProblems(deployment.getProblems());   
      parse.setInputStream(inputStream);   
      parse.execute();   
      List<ProcessDefinitionImpl> processDefinitions = (List<ProcessDefinitionImpl>) parse.getDocumentObject();   
      if (processDefinitions!=null) {   
        for (ProcessDefinitionImpl processDefinition : processDefinitions) {   
          if ((processDefinition != null) && (processDefinition.getName() != null)) {   
            String processDefinitionName = processDefinition.getName();   
    
            processDefinition.setSuspended(deployment.isSuspended());   
    
            String imageResourceName = resourceName.substring(0, resourceName.lastIndexOf(extension)) + ".png";   
            if (deployment.getResourceNames().contains(imageResourceName)) {   
              processDefinition.setImageResourceName(imageResourceName);   
            }   
    
            processDefinition.setDeploymentDbid(deployment.getDbid());   
    
            if (deployment.hasObjectProperties(processDefinitionName)) {   
              String key = deployment.getProcessDefinitionKey(processDefinitionName);   
              String id = deployment.getProcessDefinitionId(processDefinitionName);   
              Long version = deployment.getProcessDefinitionVersion(processDefinitionName);   
              processDefinition.setId(id);   
              processDefinition.setKey(key);   
              processDefinition.setVersion(version.intValue());   
    
            } else {   
              checkKey(processDefinition, deployment);   
              checkVersion(processDefinition, deployment);   
              checkId(processDefinition, deployment);   
    
              deployment.setProcessDefinitionId(processDefinitionName, processDefinition.getId());   
              deployment.setProcessDefinitionKey(processDefinitionName, processDefinition.getKey());   
              deployment.setProcessDefinitionVersion(processDefinitionName, new Long(processDefinition.getVersion()));   
    
              //execute migration   
              Map<ProcessDefinition, MigrationDescriptor> migrations = (Map<ProcessDefinition, MigrationDescriptor>)parse.contextMapGet(Parse.CONTEXT_KEY_MIGRATIONS);   
              if (migrations != null) {   
                MigrationDescriptor migrationDescriptor = migrations.get(processDefinition);   
                if (migrationDescriptor != null) {   
                  InstanceMigrator.migrateAll(processDefinition, migrationDescriptor);   
                }   
              }   
    
            }   
    
            deployment.addObject(processDefinitionName, processDefinition);   
          }   
        }   
      }   
    }   
    

    }

    }

    @SuppressWarnings("unchecked")
    public void deploy(DeploymentImpl deployment) {

    for (String resourceName: deployment.getResourceNames()) {
    
      if (resourceName.endsWith(extension)) {
        byte[] bytes = deployment.getBytes(resourceName);
        InputStream inputStream = new ByteArrayInputStream(bytes);
        Parse parse = parser.createParse();
        parse.contextMapPut(Parse.CONTEXT_KEY_DEPLOYMENT, deployment);
        parse.setProblems(deployment.getProblems());
        parse.setInputStream(inputStream);
        parse.execute();
        List<ProcessDefinitionImpl> processDefinitions = (List<ProcessDefinitionImpl>) parse.getDocumentObject();
        if (processDefinitions!=null) {
          for (ProcessDefinitionImpl processDefinition : processDefinitions) {
            if ((processDefinition != null) && (processDefinition.getName() != null)) {
              String processDefinitionName = processDefinition.getName();
    
              processDefinition.setSuspended(deployment.isSuspended());
    
              String imageResourceName = resourceName.substring(0, resourceName.lastIndexOf(extension)) + ".png";
              if (deployment.getResourceNames().contains(imageResourceName)) {
                processDefinition.setImageResourceName(imageResourceName);
              }
    
              processDefinition.setDeploymentDbid(deployment.getDbid());
    
              if (deployment.hasObjectProperties(processDefinitionName)) {
                String key = deployment.getProcessDefinitionKey(processDefinitionName);
                String id = deployment.getProcessDefinitionId(processDefinitionName);
                Long version = deployment.getProcessDefinitionVersion(processDefinitionName);
                processDefinition.setId(id);
                processDefinition.setKey(key);
                processDefinition.setVersion(version.intValue());
    
              } else {
                checkKey(processDefinition, deployment);
                checkVersion(processDefinition, deployment);
                checkId(processDefinition, deployment);
    
                deployment.setProcessDefinitionId(processDefinitionName, processDefinition.getId());
                deployment.setProcessDefinitionKey(processDefinitionName, processDefinition.getKey());
                deployment.setProcessDefinitionVersion(processDefinitionName, new Long(processDefinition.getVersion()));
    
                //execute migration
                Map<ProcessDefinition, MigrationDescriptor> migrations = (Map<ProcessDefinition, MigrationDescriptor>)parse.contextMapGet(Parse.CONTEXT_KEY_MIGRATIONS);
                if (migrations != null) {
                  MigrationDescriptor migrationDescriptor = migrations.get(processDefinition);
                  if (migrationDescriptor != null) {
                    InstanceMigrator.migrateAll(processDefinition, migrationDescriptor);
                  }
                }
    
              }
    
              deployment.addObject(processDefinitionName, processDefinition);
            }
          }
        }
      }
    }
    

    }
    所以把 "process"改为"process.jpdl.xml"就OK了!

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论

报告相同问题?

悬赏问题

  • ¥15 C++使用Gunplot
  • ¥15 这个电路是如何实现路灯控制器的,原理是什么,怎么求解灯亮起后熄灭的时间如图?
  • ¥15 matlab数字图像处理频率域滤波
  • ¥15 在abaqus做了二维正交切削模型,给刀具添加了超声振动条件后输出切削力为什么比普通切削增大这么多
  • ¥15 ELGamal和paillier计算效率谁快?
  • ¥15 file converter 转换格式失败 报错 Error marking filters as finished,如何解决?
  • ¥15 Arcgis相交分析无法绘制一个或多个图形
  • ¥15 关于#r语言#的问题:差异分析前数据准备,报错Error in data[, sampleName1] : subscript out of bounds请问怎么解决呀以下是全部代码:
  • ¥15 seatunnel-web使用SQL组件时候后台报错,无法找到表格
  • ¥15 fpga自动售货机数码管(相关搜索:数字时钟)