Пошаговая инструкция: делаем свой первый проект на Camunda и Kotlin
Camunda — это отличный бесплатный BPM-движок для автоматизации бизнес-процессов. В этой статье я расскажу как по шагам сделать первую заготовку проекта с использованием языка Kotlin и Camunda. Уровень сложности материала низкий — статья снабжена скриншотами и видеоверсией. Вам нужно просто пройти по инструкции.
Вот видеоверсия статьи, кому-то может быть удобнее:
Как вообще можно использовать Camunda
Camunda можно использовать в двух вариантах:
- Standalone-сервер — в этом случае вы ставите приложение с сервером отдельно и заливаете на него свои процессы с помощью .war-файлов. База общая, исполнители задач общие, админка общая.
Я разбирал такой вариант подробно на видео.
- Библиотека внутри приложения — в этом случае вы разрабатывает обычное Java-приложение (в нашем случае Kotlin), и в зависимостях указываете Camunda. База своя, задачи свои, админка своя, исполнители свои.
Первый вариант удобнее для эксплуатации — следить нужно только за одной базой и одной камундой, но создает проблему “шумных соседей” — если кто-то из коллег сделает кривой процесс, то лягут все.
Второй способ удобнее полной независимостью, но создает сложности в администрировании и управлении задачами. Какой вариант выбирать каждая компания сама решает, но я за второй: все проблемы решаются, а вот в первом с шумными соседями ничего не сделать. И это ОЧЕНЬ больно и неприятно на проде, когда вы начинаете падать из-за коллег.
Предварительная подготовка рабочего места
Для создания первого проекта на Camunda вам потребуется:
- Среда разработки — IntelliJ Idea (https://www.jetbrains.com/idea/download/#section=windows). В этой штуке мы будем программировать.
- Сама Java — https://java.com/ru/download/ . Эта штука позволит среде разработки понять, что мы написали и обьяснить компьютеру.
- Postgresql https://www.postgresql.org/download/windows/ . Это база данных, Camunda будет сохранять туда информацию о всём происходящем.
- Excamad — https://github.com/KotskinKotskin/camunda-excamad/releases . Это дополнительная админка, которая позволит нам лучше понимать что происходит в Camunda.
- Camunda modeler — https://camunda.com/products/modeler/ . Эта штука поможет нам создавать диаграммы в BPMN и решения в DMN.
Поставьте всё себе на компьютер,сложностей не должно возникнуть. Если возникли, то пишите в комментарии, разберемся.
Почему Kotlin и Spring(boot)
Вместо Java мы будем использовать язык Kotlin — это статически типизированный язык программирования, работающий поверх JVM. Он более лаконичный и безопасный, чем Java. И порог входа в него немного ниже, что в этом случае нам очень важно.
Еще мы будем использовать Spring — это набор библиотек для Java, которые делают жизнь проще. А Spring boot — это еще одна штука, которая делает жизнь разработчика со Spring еще проще 🙂 В ообщем, программерская магия, которая не имеет отношения к статье.
Создаем приложение
- Создаем приложение — воспользуемся сайтом https://start.spring.io/, он сформирует для нас структуру проекта и добавит нужные зависимости. Установите такие параметры:
- Скачиваем папку с приложением.
- Запускаем IDEA и откройте в ней папку с приложением:
В параметрах укажите что разрешаете авто-импорт зависимостей. - Создаем базу данных в postgres: запустите приложение PgAdmin, войдите в него с логином и паролем, которое указывали при установке.Подключитесь к локальному серверу и создайте базу camundabpmn2
- Указываем данные для подключения к базе в файле 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. У вас получилось? Напишите о вашем опыте в статье.
Комментарии