通过REST API以编程方式将KJAR部署到KIE执行服务器 [英] Deploy a KJAR to KIE execution server programmatically via REST API
问题描述
我想知道是否可以通过编程方式(通过API)将KJAR部署到执行服务器?我可以使用以下内容构建KJAR:
I want to know if it is possible to deploy a KJAR to the execution server programmatically (via API)? I can build a KJAR using the following:
final KieServices kieServices = KieServices.Factory.get();
final KieFileSystem kieFileSystem = kieServices.newKieFileSystem();
kieFileSystem.write("src/main/resources/" + ClassUtils.convertClassNameToResourcePath(getPackageNameForRule(rule.getValue())) + "/" + rule
.getCode() + ".drl", rule.getValue());
return kieServices.newKieBuilder(kieFileSystem).buildAll().getKieModule().getReleaseId();
并且我还可以通过REST KieServicesClient
在KIE执行服务器中创建一个容器,如下所示:
and I can also create a container in the KIE execution server through the REST KieServicesClient
like this:
KieContainerResource kieContainerResource =
new KieContainerResource(containerId, new org.kie.server.api.model.ReleaseId(buildNewReleaseId()));
kieServicesClient.createContainer(containerId, kieContainerResource);
但是当我这样做时,我在KIE服务器中收到一个异常,说:
but when I do so I get an exception in the KIE server saying that:
kie-server | 10:54:04,192 ERROR [org.kie.server.services.impl.KieServerImpl] (default task-2) Error creating container 'targeting' for module 'org.default:artifact:1.0.0': java.lang.RuntimeException: Cannot find KieModule: org.default:artifact:1.0.0
kie-server | at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:186)
kie-server | at org.drools.compiler.kie.builder.impl.KieServicesImpl.newKieContainer(KieServicesImpl.java:176)
kie-server | at org.kie.server.services.impl.KieServerImpl.createContainer(KieServerImpl.java:275)
kie-server | at org.kie.server.remote.rest.common.resource.KieServerRestImpl.createContainer(KieServerRestImpl.java:157)
kie-server | at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
kie-server | at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
kie-server | at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
kie-server | at java.lang.reflect.Method.invoke(Method.java:498)
kie-server | at org.jboss.resteasy.core.MethodInjectorImpl.invoke(MethodInjectorImpl.java:140)
kie-server | at org.jboss.resteasy.core.ResourceMethodInvoker.internalInvokeOnTarget(ResourceMethodInvoker.java:509)
我的KIE服务器在docker容器中运行.我是否必须以编程方式调用Maven才能将我的KJAR部署在docker容器内的存储库中?我希望有一个API以编程方式执行此操作.还有Drools Workbench如何做到这一点?
My KIE server is running in a docker container. Do I have to programmatically invoke Maven to deploy my KJAR in the repository inside the docker container? I hope there's an API to do this programmatically. Also how does the Drools Workbench do it?
推荐答案
我找到了它.在 org.kie.soup:kie-soup-maven-integration
中有一个API可以像这样使用:
I found it. There's an API in org.kie.soup:kie-soup-maven-integration
which one can use like this:
MavenRepository repository = getMavenRepository();
if (remote) {
RemoteRepository remoteRepository = new RemoteRepository.Builder("id", "type", "url").build();
repository.deployArtifact(remoteRepository, releaseId, kjar, pom);
} else {
repository.installArtifact(releaseId, kjar, pom);
}
这篇关于通过REST API以编程方式将KJAR部署到KIE执行服务器的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!