Java调用的BPMN进程
我的微服务有一个Rest端点(getLocationForCar()),它接受一个汽车DTO(如下所示)作为输入,有一些业务逻辑在某个位置查找汽车并返回位置DTO(如下所示) 我想将业务逻辑转移到BPMN和DMN。我是BPMN和DMN的新手。 我阅读了卡蒙达的一些教程,并认为这就是我如何与卡蒙达合作的方法:Java调用的BPMN进程,java,jbpm,bpmn,camunda,Java,Jbpm,Bpmn,Camunda,我的微服务有一个Rest端点(getLocationForCar()),它接受一个汽车DTO(如下所示)作为输入,有一些业务逻辑在某个位置查找汽车并返回位置DTO(如下所示) 我想将业务逻辑转移到BPMN和DMN。我是BPMN和DMN的新手。 我阅读了卡蒙达的一些教程,并认为这就是我如何与卡蒙达合作的方法: 创建一个硬编码的DMN表,输入=carId,输出=locationId 创建一个具有 开始-> 从传递给Rest Web服务(getLocationForCar())的Car DTO中提取
- 开始->
- 从传递给Rest Web服务(getLocationForCar())的Car DTO中提取carId->
- 致电DMN向其提供carId->
- 将DMN的输出发送到java进程,以便将其作为webservice(getLocationForCar())响应发送
因此,我更倾向于JBPM(尽管我不知道是否可以使用其中任何一种来实现我的需求)。DMN是提取业务逻辑的好方法。Imho Camunda是最好的lightweigt和免费产品 这里给你举个例子
org.camunda.bpm.dmn:camunda引擎dmn bom
DmnEngine DmnEngine=DmnEngine配置
.createDefaultDmnEngineConfiguration()
.buildEngine();
VariableMap variables=变量
.putValue(“carId”,carId)
.putValue(“卡纳姆”,卡纳姆);
.putValue(“carType”,carType);
.putValue(“carModel”,carModel);
.putValue(“卡马克”,卡马克);
使用这种方法,您不需要使用Camunda平台。只需使用2个依赖项,您就可以将逻辑移动到这些DMN文件。使用Camunda Modeler,您可以上载dmn文件:例如,您可以创建一个接收这些文件并将其保存在数据库中的微服务。您的DMNEEngine micro服务将加载该文件并评估决策。Camunda可以嵌入您现有的java web应用程序中运行,或者如您所述,在将从web应用程序调用的sperate服务器上运行。(卡蒙达居住的地方是它自己的建筑决定。)卡蒙达文档非常优秀,周围有很多例子。请用一些代码更新您的问题,这些代码显示了您尝试过但不起作用的内容。另一个问题-是否可以使用OSGi、docker将jBPM或Camunda(免费版本)无缝嵌入到微服务中?docker肯定是(有示例),但是我对OSGi不熟悉。你能分享一个有助于我学习的例子的链接吗?我这里有一个后续问题()。如果可能的话,请回复。
class Car {
String carId;
String carName;
String carType;
String carModel;
String carMake;
}
class Location {
String locationId;
String locationType;
String locationAddress;
}
InputStream inputStream = CarDecider.class.getResourceAsStream("carDecisionFile.xml");
try {
DmnDecision decision = dmnEngine.parseDecision("decision", inputStream);
// evaluate decision
DmnDecisionTableResult result = dmnEngine.evaluateDecisionTable(decision, variables);
// print result
String desiredLocation = result.getSingleResult().getSingleEntry();
System.out.println("Decision: " + desiredLocation);
}
finally {
try {
inputStream.close();
}
catch (IOException e) {
System.err.println("Could not close stream: "+e.getMessage());
}
}
}