Встраивание API

Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine

REST API является самостоятельным артефактом, что означает, что его можно встроить в любое другое JAX-RS-приложение независимо от движка.

Предварительные требования

Классы REST API протестированы с RESTEasy и Jersey в качестве реализации JAX-RS. Кроме того, в classpath должны находиться классы движка и артефакт Jackson com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider (а также транзитивные зависимости Jackson).

Необходимые шаги

Шаг 1: Добавьте REST API в ваш проект как Maven-зависимость.

Импортируйте OpenBPM BOM, чтобы обеспечить правильные версии для каждого проекта OpenBPM.

<dependency>
  <groupId>io.openbpm.bpm</groupId>
  <artifactId>openbpm-engine-rest</artifactId>
  <classifier>classes</classifier>
</dependency>

Для контейнеров Jakarta EE 9+ (таких как WildFly) используйте вместо этого следующую зависимость:

<dependency>
  <groupId>io.openbpm.bpm</groupId>
  <artifactId>openbpm-engine-rest-jakarta</artifactId>
  <classifier>classes</classifier>
</dependency>

Шаг 2: Добавьте необходимые вам REST-ресурсы в ваше JAX-RS-приложение. Пример:

@ApplicationPath("/")
public class MyApplication extends Application {
  @Override
  public Set<Class<?>> getClasses() {
    Set<Class<?>> classes = new HashSet<Class<?>>();
    // add your own classes
    ...
    // add all camunda engine rest resources (or just add those that you actually need).
    classes.addAll(CamundaRestResources.getResourceClasses());

    // mandatory
    classes.addAll(CamundaRestResources.getConfigurationClasses());

    return classes;
  }
}

CamundaRestResources.getResourceClasses() содержит два JAX-RS-ресурса, которые служат точками входа. Один из них (io.openbpm.bpm.engine.rest.impl.NamedProcessEngineRestServiceImpl) предоставляет все REST-ресурсы, перечисленные в этом документе, по путям, начинающимся с /engine/{name}, а другой (io.openbpm.bpm.engine.rest.impl.DefaultProcessEngineRestServiceImpl) предоставляет доступ к ресурсам движка по умолчанию по корневому пути /.

Чтобы ограничить набор предоставляемых REST-ресурсов конкретными типами (например, только методами, связанными с определением процесса), можно реализовать подкласс io.openbpm.bpm.engine.rest.impl.AbstractProcessEngineRestServiceImpl и зарегистрировать его в JAX-RS-приложении. Такой подкласс может управлять тем, какие ресурсы предоставляются, предлагая методы с JAX-RS-аннотациями. В качестве примера см. исходные коды NamedProcessEngineRestServiceImpl и DefaultProcessEngineRestServiceImpl. Примечание: путь к субресурсу всегда должен совпадать с путём, определённым в интерфейсе субресурса.

Класс конфигурации JacksonConfigurator необходим для корректной настройки сериализации полей даты. Вам также может потребоваться добавить следующие провайдеры Jackson: com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider, io.openbpm.bpm.engine.rest.exception.JsonMappingExceptionHandler и io.openbpm.bpm.engine.rest.exception.JsonParseExceptionHandler. В зависимости от среды выполнения это может не потребоваться. В Wildfly они должны добавляться автоматически как неявная зависимость модуля.

Для корректных ответов об ошибках в формате, описанном в разделе Введение, необходимо включить RestExceptionHandler. ProcessEngineExceptionHandler используется для трансляции любого исключения, выброшенного движком и не обработанного явно классами REST API, в обобщённую ошибку HTTP 500 с тем же форматом тела ответа. Если вы хотите, чтобы все виды исключений транслировались в этот формат, можно использовать io.openbpm.bpm.engine.rest.exception.ExceptionHandler вместо ProcessEngineExceptionHandler.

Далее следует связывание REST API и процессного движка (или движков). Для этого необходимо создать Service Provider, реализующий интерфейс ProcessEngineProvider, и объявить его в файле META-INF/services/io.openbpm.bpm.engine.rest.spi.ProcessEngineProvider. Вы также можете объявить класс io.openbpm.bpm.engine.rest.impl.application.ContainerManagedProcessEngineProvider, который входит в состав REST API и использует методы, предоставляемые классом io.openbpm.bpm.BpmPlatform.

Лицензия и атрибуция

Эта документация была создана на базе материала "Camunda 7 Docs" от Camunda, находится под лицензией Creative Commons Attribution-ShareAlike 3.0 Unported License .

Оригинал документации: https://docs.camunda.org