jBPM:通过 API 进行流程部署
jBPM: process deployment via API
我已经使用 Fluent API 创建了一个业务流程。我有几个问题:
- 流利 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 文件?
- 有没有办法在 kJar 文件中用一些 API 创建流程(*.bpmn 文件)?
- 即使我以某种方式使用 fluent API 创建了一个进程,我如何才能将它部署到一个已经存在的 kie 服务器上。我在 localhost:8080 上有一个 kie 服务器 运行,所以有没有办法在我的 kie 服务器上部署使用 fluent API 创建的进程。
- 如果不可能,有没有办法在不使用业务中心的情况下将 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")
我已经使用 Fluent API 创建了一个业务流程。我有几个问题:
- 流利 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 文件?
- 有没有办法在 kJar 文件中用一些 API 创建流程(*.bpmn 文件)?
- 即使我以某种方式使用 fluent API 创建了一个进程,我如何才能将它部署到一个已经存在的 kie 服务器上。我在 localhost:8080 上有一个 kie 服务器 运行,所以有没有办法在我的 kie 服务器上部署使用 fluent API 创建的进程。
- 如果不可能,有没有办法在不使用业务中心的情况下将 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")