`

JBPM4根据JPDL字符串部署流程

    博客分类:
  • jbpm
阅读更多

JBPM4对流程定义的部署的所有方式如下:

package org.jbpm.api;

import java.io.File;
import java.io.InputStream;
import java.net.URL;
import java.util.zip.ZipInputStream;

/** extends a {@link Deployment} with method for creating a new 
 * deployment.
 * 
 * @see RepositoryService#createDeployment()
 * 
 * @author Tom Baeyens
 */
public interface NewDeployment extends Deployment {

  /** typically correspond to the file name or url or some other 
   * form of identifying the source archive file for this deployment. */
  NewDeployment setName(String name);
  
  /** the timestamp can optionally be given and represents the last updated timestamp 
   * of the archive file that is being deployed. 
   * JBoss deployer makes use of this to remember if a file is already deployed or not.*/
  NewDeployment setTimestamp(long timestamp);
  
  /** adds a resource as a string */
  NewDeployment addResourceFromString(String resourceName, String string);

  /** adds a resource as a string */
  NewDeployment addResourceFromInputStream(String resourceName, InputStream inputStream);
  
  /** adds a resource as a resource from the classpath */
  NewDeployment addResourceFromClasspath(String resourceName);
  
  /** adds a resource as a url */
  NewDeployment addResourceFromUrl(URL url);
  
  /** adds a resource as a zip stream */
  NewDeployment addResourcesFromZipInputStream(ZipInputStream zipInputStream);

  /** adds a resource from a file */
  NewDeployment addResourceFromFile(File file);
  
  /** after adding resources, this will perform the actual deployment.
   * @return the generated deploymentId identification for this deployment
   * in the {@link RepositoryService repository}. */
  String deploy();

}

 

 

       但我在使用NewDeployment addResourceFromString(String resourceName, String string);来部署时却在表jbpm4_deployprop中没有数据并且JBPM也不提示部署有错,经查看其源代码才明白是怎么回事。

       我部署的代码是这样写的:

repositoryService.createDeployment().addResourceFromString("process",getJpdlAsString().deploy()

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

    所以我最终把 "process"改为"process.jpdl.xml"就OK了!

分享到:
评论

相关推荐

    根据jbpm4的.jpdl.xml流程定义文件,绘制出流程图

    本篇我们将聚焦于Jbpm4中的流程定义文件——jpdl.xml,以及如何根据该文件绘制出对应的流程图。 首先,我们要理解什么是JPDL(Jbpm Process Definition Language)。JPDL是一种基于XML的语言,用于描述Jbpm中的业务...

    jBPM-jPDL学习笔记——流程设计与控制

    jBPM-jPDL流程设计与控制 jBPM-jPDL是基于Java的业务流程管理(BPM)系统,它提供了一个灵活的流程设计和控制机制,允许开发者定义、执行和监控业务流程。下面,我们将通过学习笔记,了解jBPM-jPDL的流程设计与控制...

    jbpm-jpdl-designer-3.0.13.zip_jbpm_jbpm design_jbpm designer_jbp

    jbpm-jpdl-designer-3.0.13 是一个与jbpm相关的软件包,主要功能是提供jbpm流程定义的图形化设计工具。jbpm(Java Business Process Management)是一个开源的工作流管理系统,用于管理和执行业务流程。JPDL(JBoss ...

    jBPM-jPDL学习笔记——流程设计与控制(转载)

    《jBPM-jPDL学习笔记——流程设计与控制》 在IT行业中,流程管理和自动化是企业提升效率的关键。jBPM(Java Business Process Management)是一个开源的工作流和业务流程管理套件,它允许开发者通过定义流程定义...

    jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    **jBPM-JPDL v3.2 环境部署详解** jBPM (Java Business Process Management) 是一个开源的工作流管理系统,用于处理业务流程的建模、部署、执行和监控。JPDL (jBPM Process Definition Language) 是jBPM使用的流程...

    jBPM-JPDL流程引擎

    此外,jBPM还提供了命令行工具和API,方便开发者进行流程部署、实例管理和监控。 **四、jBPM集成** jBPM可以轻松地与其他Java应用集成,如Spring框架。它还支持与各种数据库系统的连接,以及通过JMS、EJB、Web服务...

    JBPM视频教程 JPDL 流程设计器

    【JBPM视频教程 - JPDL与流程设计器】 JBPM(Java Business Process Management)是一个开源的工作流和业务流程管理系统,它提供了全面的BPM解决方案,包括流程建模、执行、监控和集成。本视频教程主要围绕JPDL...

    jbpm-jpdl-suite-3.2.3的安装配置

    jBPM一直在不断发展,其核心特性是使用了JBoss jBPM Process Definition Language (jPDL)来定义业务流程,而不是遵循传统的WfMC's XPDL、BPML、ebXML或BPEL4WS等规范。jBPM的优势在于它将业务逻辑与数据管理分离,...

    jBPM开发资料 jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    相当不错的资料 jBPM-JPDL v3.2环境部署——发布到Tomcat + MySQL

    jbpm-jpdl-suite-3.2.3安装配置.doc

    4. **jbpm-jpdl-suite-3.2.3部署**: - 在MySQL中执行修改后的jbpm.jpdl.mysql.sql脚本,初始化jbpm所需的表结构。 - 配置jbpm的数据库连接信息,通常是在jbpm的配置文件中(如jbpm-config.xml或相关的JNDI配置)...

    jbpm-jpdl.jar

    jbpm-jpdl.jar jbpm-jpdl.jar

    jbpm-jpdl-3.2.3.zip

    6. **规则引擎集成**:jbpm可以与Drools等规则引擎结合,使流程决策可以根据预定义的规则动态变化。 7. **监控和管理**:jbpm提供了强大的监控和管理工具,可以查看运行中的流程实例,跟踪流程状态,以及对历史数据...

    jBPM-jPDL学习笔记

    jPDL(jBPM Process Definition Language)是jBPM用来描述和执行业务流程的一种专用语言,它基于XML,简洁且易于理解,允许开发者以声明式的方式定义流程逻辑。 1、系统环境部署: 在开始jBPM-jPDL的学习之前,首先...

    jbpm-jpdl-designer-3.1.3.zip

    2. **Eclipse插件**:jbpm-jpdl-designer通常作为一个Eclipse插件存在,使得开发者能够在熟悉的Eclipse集成开发环境中进行流程设计。 **压缩包内的文件说明:** 1. **release.notes.html**:这是发布说明文件,通常...

    jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)

    jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载 jbpm-jpdl-suite-3.2GA -(5)分开压缩(共5个文件)jbpm下载

    jbpm-jpdl-designer-3.1.7.zip

    这个插件允许开发者在Eclipse集成开发环境中创建、编辑和管理JPDL(JBPML,JBPM流程定义语言)文件,这是一种用于描述业务流程的XML语法。 **JBPM** 是一个开源的工作流管理系统,它提供了业务流程自动化的能力,...

    jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip jbpm-jpdl-designer-site-3.1.7.zip

    jbpm-jpdl-designer-nodeps-3.1.4

    综上所述,"jbpm-jpdl-designer-nodeps-3.1.4"提供了独立于特定依赖环境的Jbpm流程设计器,便于开发者通过JPDL来定义和管理业务流程。它包含的文档和资源有助于用户安装、理解和使用该工具,同时遵守相应的开源许可...

Global site tag (gtag.js) - Google Analytics