Встраивание API
|
Этот раздел перенесён из документации Camunda 7 и в дальнейшем будет доработан с учётом особенностей OpenBPM Engine |
REST API является самостоятельным артефактом, что означает, что его можно встроить в любое другое JAX-RS-приложение независимо от движка.
Необходимые шаги
Шаг 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