jBPM:通过 API 进行流程部署

jBPM: process deployment via API

我已经使用 Fluent API 创建了一个业务流程。我有几个问题:

  1. 流利 API 我能够创建新的流程并对其进行验证。但是在构建之后该文件 (*.bpmn) 是在哪里创建的?
RuleFlowProcessFactory factory = RuleFlowProcessFactory.createProcess("org.jbpm.HelloWorld");
factory
    .name("HelloWorldProcess")
    .version("1.0")
    .packageName("org.jbpm")
    .startNode(1).name("Start").done()
    .endNode(2).name("End").done()
    // Connections
    .connection(1, 2)
    .build();

将在何处创建 HelloWorld.bpmn 文件?

  1. 有没有办法在 kJar 文件中用一些 API 创建流程(*.bpmn 文件)?
  2. 即使我以某种方式使用 fluent API 创建了一个进程,我如何才能将它部署到一个已经存在的 kie 服务器上。我在 localhost:8080 上有一个 kie 服务器 运行,所以有没有办法在我的 kie 服务器上部署使用 fluent API 创建的进程。
  3. 如果不可能,有没有办法在不使用业务中心的情况下将 kJar 部署到 kie-server。有什么 API 吗?

为了执行一个进程,你应该创建一个Resource,它被用来创建一个KieBase。使用那个 KieBase,您可以创建一个 KieSession 来执行该过程。

对该进程定义使用 ProcessBuilderFactory.toBytes 将创建一个 ByteArrayResource 资源。

// Build resource from Process
KieResources resources = ServiceRegistry.getInstance().get(KieResources.class);
Resource res = resources                         
                        .newByteArrayResource(factory.toBytes(process))

或者,在您的情况下,来自 RuleFlowProcess 过程:

Resource res = ResourceFactory
               .newByteArrayResource(
                  XmlBPMNProcessDumper.INSTANCE.dump(process).getBytes());                          
如果使用 buildAll().

成功构建,

kieModule 会自动部署到 KieRepository

看看下面的例子:

// source path or target path must be set to be added into kbase                       
res.setSourcePath("/tmp/processFactory.bpmn2"); 

​
// Build kie base from this resource using KIE API
​KieServices ks = KieServices.Factory.get();
​KieRepository kr = ks.getRepository();
​KieFileSystem kfs = ks.newKieFileSystem();
​kfs.write(res);
​KieBuilder kb = ks.newKieBuilder(kfs);

// kieModule is automatically deployed to KieRepository if successfully built.
​kb.buildAll(); 

​KieContainer kContainer = ks.newKieContainer(kr.getDefaultReleaseId());
​KieBase kbase = kContainer.getKieBase();
​
// Create kie session using KieBase
​KieSessionConfiguration conf = ...;
​Environment env = ....;
​KieSession ksession = kbase.newKieSession(conf,env);

​// execute process using same process Id that is used to obtain ProcessBuilder instance
​ksession.startProcess("org.jbpm.HelloWorld")