Пошаговая инструкция: делаем свой первый проект на Camunda и Kotlin

Camunda — это отличный бесплатный BPM-движок для автоматизации бизнес-процессов. В этой статье я расскажу как по шагам сделать первую заготовку проекта с использованием языка Kotlin и Camunda. Уровень сложности материала низкий — статья снабжена скриншотами и видеоверсией. Вам нужно просто пройти по инструкции.

Вот видеоверсия статьи, кому-то может быть удобнее:

Как вообще можно использовать Camunda

Camunda можно использовать в двух вариантах:

  • Standalone-сервер — в этом случае вы ставите приложение с сервером отдельно и заливаете на него свои процессы с помощью .war-файлов. База общая, исполнители задач общие, админка общая.

Я разбирал такой вариант подробно на видео.

  • Библиотека внутри приложения — в этом случае вы разрабатывает обычное Java-приложение (в нашем случае Kotlin), и в зависимостях указываете Camunda. База своя, задачи свои, админка своя, исполнители свои.

Первый вариант удобнее для эксплуатации — следить нужно только за одной базой и одной камундой, но создает проблему “шумных соседей” — если кто-то из коллег сделает кривой процесс, то лягут все.

Второй способ удобнее полной независимостью, но создает сложности в администрировании и управлении задачами. Какой вариант выбирать каждая компания сама решает, но я за второй: все проблемы решаются, а вот в первом с шумными соседями ничего не сделать. И это ОЧЕНЬ больно и неприятно на проде, когда вы начинаете падать из-за коллег.

Предварительная подготовка рабочего места

Для создания первого проекта на Camunda вам потребуется:

Поставьте всё себе на компьютер,сложностей не должно возникнуть. Если возникли, то пишите в комментарии, разберемся.

Почему Kotlin и Spring(boot)

Вместо Java мы будем использовать язык Kotlin — это статически типизированный язык программирования, работающий поверх JVM. Он более лаконичный и безопасный, чем Java. И порог входа в него немного ниже, что в этом случае нам очень важно.

Еще мы будем использовать Spring — это набор библиотек для Java, которые делают жизнь проще. А Spring boot — это еще одна штука, которая делает жизнь разработчика со Spring еще проще 🙂 Вообщем программерская магия, которая не имеет отношения к статье.

Создаем приложение

  1. Создаем приложение —  воспользуемся сайтом https://start.spring.io/, он сформирует для нас структуру проекта и добавит нужные зависимости. Установите такие параметры:
  2. Скачиваем  папку с приложением.
  3. Запускаем IDEA и откройте в ней папку с приложением:
    В параметрах укажите что разрешаете авто-импорт зависимостей.
  4. Создаем базу данных в postgres: запустите приложение PgAdmin, войдите в него с логином и паролем, которое указывали при установке.Подключитесь к локальному серверу и создайте базу camundabpmn2
  5. Указываем данные для подключения к базе в файле application.properties

logging.level.org.springframework.web=DEBUG
spring.datasource.url=jdbc:postgresql://localhost/camundabpmn2
spring.datasource.username=postgres
spring.datasource.password=mypassword
spring.jpa.generate-ddl=true
spring.jpa.properties.hibernate.jdbc.lob.non_contextual_creation=true

Вы получили работающее приложение, давайте проверим что всё ок. Запустите его:Переходим по адресу в браузере http://localhost:8080. Если вы видите такую картину, то вы красавчик! У вас есть пустое работающее spring приложение.

Запускаем пустую Camunda

Для запуска камунды нам нужно добавить зависимости в файл pom.xml. В этом файле хранится информация о том, какие внешние библиотеки мы используем. Добавим много библиотек — для тестирования, логирования, саму Camunda, REST интерфейсы, работа c JSON. За что отвечает каждая из библиотек понятно из названия. В итоге раздел в pom.xml должен выглядеть так:

<dependencies>
  <dependency>
    <groupId>io.github.microutils</groupId>
    <artifactId>kotlin-logging</artifactId>
    <version>1.6.24</version>
  </dependency>
  <dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-webapp</artifactId>
    <version>3.2.0</version>
  </dependency>
  <dependency>
    <groupId>org.apache.commons</groupId>
    <artifactId>commons-csv</artifactId>
    <version>1.6</version>
  </dependency>
  <dependency>
    <groupId>org.camunda.bpm.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-rest</artifactId>
    <version>3.2.0</version>
  </dependency>
  <dependency>
    <groupId>org.camunda.bpm.extension.springboot</groupId>
    <artifactId>camunda-bpm-spring-boot-starter-test</artifactId>
    <version>2.2.0</version>
  </dependency>
  <dependency>
    <groupId>org.assertj</groupId>
    <artifactId>assertj-core</artifactId>
    <version>2.6.0</version>
  </dependency>

  <dependency>
    <groupId>org.camunda.bpm.assert</groupId>
    <artifactId>camunda-bpm-assert</artifactId>
    <version>3.0.0-alpha1</version>
    <scope>compile</scope>
  </dependency>
  <dependency>
    <groupId>org.camunda.bpm.assert</groupId>
    <artifactId>camunda-bpm-assert</artifactId>
    <version>3.0.0</version>
    <scope>test</scope>
  </dependency>
  <dependency>
    <groupId>org.camunda.spin</groupId>
    <artifactId>camunda-spin-dataformat-json-jackson</artifactId>
    <version>1.6.7</version>
  </dependency>
  <dependency>
    <groupId>org.camunda.spin</groupId>
    <artifactId>camunda-spin-core</artifactId>
    <version>1.6.7</version>
  </dependency>
  <dependency>
    <groupId>org.camunda.bpm</groupId>
    <artifactId>camunda-engine-plugin-spin</artifactId>
    <version>7.10.0</version>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-data-jpa</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-jdbc</artifactId>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-web</artifactId>
  </dependency>
  <dependency>
    <groupId>com.fasterxml.jackson.module</groupId>
    <artifactId>jackson-module-kotlin</artifactId>
  </dependency>
  <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-reflect</artifactId>
  </dependency>
  <dependency>
    <groupId>org.jetbrains.kotlin</groupId>
    <artifactId>kotlin-stdlib-jdk8</artifactId>
  </dependency>

  <dependency>
    <groupId>org.postgresql</groupId>
    <artifactId>postgresql</artifactId>
    <scope>runtime</scope>
  </dependency>
  <dependency>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-test</artifactId>
    <scope>test</scope>
  </dependency>
</dependencies>

Ждём, пока скачаются все зависимости (полоска в правом нижнем углу).

  • В главный класс дописываем аннотацию @EnableProcessApplication

  • Добавляем проект excamad в папку static, для того чтобы заработала моя дополнительная админка
  • Запускаем приложение, перейдем по ссылке http://localhost:8080/. Если видим приглашение зарегистрироваться, делаем учетную запись demo/ demo
  • Заходим по ссылке http://localhost:8080/index.html, видим котиков — значит excamad работает. В разделе settings пропишем http://localhost:8080/rest/

Если вы сделали всё правильно, то у вас готова чистая Camunda на Kotlin. Теперь её можно наполнять вашими бизнес-процессами, этим займемся в других статьях.

В итоге

Как вы видите, сделать подготовительную работу  для последующей автоматизации на Camunda совсем не сложно. Проще, чем развернуть кластер IBM BPM. У вас получилось? Напишите о вашем опыте в статье.

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Комментарии

Вам так же понравится

Сообщить об опечатке

Текст, который будет отправлен нашим редакторам: