[英]BPMN process invoked by Java
我的微服務有一個 Rest 端點 (getLocationForCar()),它在輸入時接受汽車 DTO(如下所示),具有一些業務邏輯來在某個位置查找汽車並返回位置 DTO(如下所示)。
class Car {
String carId;
String carName;
String carType;
String carModel;
String carMake;
}
class Location {
String locationId;
String locationType;
String locationAddress;
}
我想將業務邏輯移至 BPMN 和 DMN。 我是 BPMN 和 DMN 的新手。 我瀏覽了一些 Camunda 教程,並認為這就是我如何使用 Camunda 進行工作的方法:
這種方法有問題(我需要幫助回答以下問題):
使用 Camunda(第三方庫)似乎是一種開銷,因為 Camunda 在它自己的服務器上運行,而 bpmn、dmn 部署在它上面,這會減慢我的進程。 所以我更傾向於 JBPM(雖然我不知道我是否可以使用這些中的任何一個來實現我的要求)。
DMN 是提取業務邏輯的好方法。 Imho Camunda 是最好的輕量級和免費的可能性來做到這一點。
這里有一個例子給你
org.camunda.bpm.dmn:camunda-engine-dmn
org.camunda.bpm.dmn:camunda-engine-dmn-bom
DmnEngine dmnEngine = DmnEngineConfiguration
.createDefaultDmnEngineConfiguration()
.buildEngine();
VariableMap variables = Variables
.putValue("carId", carId)
.putValue("carName", carName);
.putValue("carType", carType);
.putValue("carModel", carModel);
.putValue("carMake", carMake);
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());
}
}
}
如果您想使用更復雜的 DMN 圖,您可以使用決策需求圖(請參閱: https : //docs.camunda.org/manual/7.6/reference/dmn11/drg/ )。 使用 Camunda,您可以擁有多個輸出值,就像您在示例中需要的那樣。 此外,您可以使用 Camunda 擴展,例如 Feel Scala,這樣您就可以在 DMN 文件中使用函數。 此外,您可以為 DMN 編寫自己的自定義函數。 通過這種方法,您不需要使用 Camunda 平台。 只需使用 2 個依賴項,您就可以將邏輯移動到那些 DMN 文件中。 使用 Camunda Modeler,您可以上傳 dmn 文件:例如,您可以創建一個微服務來接收這些文件並將它們保存在數據庫中。 您的 DmnEngine 微服務將加載該文件並評估決策。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.