2

我从GITHUB下载了为 spring 微服务编排提供的示例

它的工作原理与描述中给出的详细信息一样,但现在我正在尝试构建自己的工作流程,并且无法将调用流程(代码执行)从一个活动映射到另一个活动。

在 bpnm指南中,它显示第一个活动名称为Retrieve Shopping Cart,第二个活动名称为Validate Address但是当我从下面的代码中通过 rest 调用启动工作流时

public class ShoppingCartRestController {

    @Autowired
    private ProcessEngine camunda;

    @RequestMapping(value = "/{scId}/submit", method = RequestMethod.POST)
    public ResponseEntity<?> placeOrderPOST(@PathVariable("scId") String scId) {
        ProcessContext context = new ProcessContext();
        submitShoppingCart(scId, context);
        if (context.getError() != null) {
            return new ResponseEntity<>(context.getError(), HttpStatus.FORBIDDEN);
        }
        return new ResponseEntity<>(context.getResponse(), HttpStatus.OK);

    }

    private ProcessInstance submitShoppingCart(String scId, ProcessContext context) {
        return camunda.getRuntimeService().startProcessInstanceByKey(//
                "submitShoppingCart", //
                Variables //
                        .putValue(ProcessConstants.VAR_SC_ID, scId).putValue(ProcessConstants.VAR_CTX, context));
    }
}

从上面我无法了解它如何代表检索地址,然后代表验证地址等等来结束流程?

以及如何从 submitShoppingCart.bpmn 链接流程(此类中的名称与实际类不匹配?

4

1 回答 1

1

问题 2 首先:java api 和进程通过进程技术 id 匹配。您在“startProcessInstanceByKey”调用中看到它:submitShoppingCart是进程的技术 ID。在建模器中,您可以在属性面板的最顶部找到它。在此处输入图像描述

问题 1:camunda Java API 通过 JavaDelegate 接口将服务任务链接到执行。因此,对于每个服务任务,都有一个类实现其execute(DelegateExecution execution)方法中应该发生的事情。

在 Spring 项目中,这些代表通常由它们的 bean 名称引用……在您的示例中,“检索购物卡”服务由${retrieveShoppingCartActivity}代表支持。按照惯例,bean 名称等于类名称,因此RetrieveShoppingCartActivity请查看里面的内容。

于 2019-11-04T19:43:33.443 回答