WSO2 Ballerina - программируемая интеграция - WSO2 Ballerina - программируемая интеграция
Blogs
Breadcrumbs
Компания WSO2 на протяжении уже нескольких лет ведёт разработку своего языка для программирования интеграционных взаимодействий. Идея появилась примерно в 2015 году и за это время от первых обсуждений всё эволюционировало в полноценное решение - https://ballerina.io/. Осенью прошлого года состоялся полноценный релиз первой версии языка. Давайте немного расскажем для чего же нужен этот новый язык и отдельно остановимся на процессе сборки исполняемого артефакта.
В программировании интеграционных решений традиционным лидером сейчас считается Apache Camel - давно развиваемый проект сообщества успешно используется в нескольких продуктах для описания и выополнения маршрутов интеграции. Описание маршрута в Apache Camel можно вести либо в Java, либо в xml представлении. Сборку проектов Apache Camel делают при помощи Maven или Gradle.
Ballerina - это попытка спрятать как можно больше деталей не связанных с непосредственной реализацией маршрутов от программиста. В большинстве случаев вам не надо будет создавать инфраструктуру проектов, следить за зависимостями сборки и выполнения - всё это платформа сделает за вас. Достаточно скачать установщик под нужную ОС, всё установить и можно творить.
В качестве примера на сайте даётся следующее:
- Создайте файл с расширением .bal
import ballerina/http; import ballerina/io; # A service representing a network-accessible API # bound to port `9090`. service hello on new http:Listener(9090) { # A resource respresenting an invokable API method # accessible at `/hello/sayHello`. # # + caller - the client invoking this resource # + request - the inbound request resource function sayHello(http:Caller caller, http:Request request) { // Sends a response back to the caller. error? result = caller->respond("Hello Ballerina!"); if (result is error) { io:println("Error in responding: ", result); } } }
- Запустите команду
$ ballerina run hello_world.bal
- В консоли появится следующее:
[ballerina/http] started HTTP/WS listener 0.0.0.0:9090
- Ваш сервис стартовал и можно обратиться к нему следующей командой:
$ curl http://localhost:9090/hello/sayHello
- Результатом вызова будет:
Hello Ballerina!
Идея создания подобного языка является вполне обоснованной - это попытка заполнить нишу интеграционных продуктов, где разработчик сконцентрирован только на реализации и не задумывается обо всём остальном.
Давайте заглянем немного глубже и посмотрим как проходит процесс сборки и что является его результатом.
Собирать и запускать можно как одиночные файлы с расширением .bal так и целые проекты. Просто собрать можно запустив команду:
$ ballerina build hello_world.bal
При этом будет происходить следующее:
- Вызывается Java Main класс - https://github.com/ballerina-platform/ballerina-lang/blob/master/cli/ballerina-tool/src/main/java/org/ballerinalang/tool/Main.java
- В списке команд есть org.ballerinalang.packerina.cmd.BuildCommand
- В рамках org.ballerinalang.packerina.cmd.BuildCommand формируется набор задач к исполнению - https://github.com/ballerina-platform/ballerina-lang/blob/master/cli/ballerina-packerina/src/main/java/org/ballerinalang/packerina/cmd/BuildCommand.java#L369
- Ниже привожу описание выполняемых задач (делался дебаг при сборке одиночного .bal файла)
1. CleanTargetDirTask - очистка папки target
2. CreateTargetDirTask - создание target и структуры директорий
3. CompileTask - компиляция bal в bir (Ballerina Intermediate Representation (BIR)) и запись в контекст - всё сохраняется внутри объекта BuildContext (есть SourceContext, CompileContext)
4. CreateLockFileTask - создание защиты от записи
5. CreateBaloTask - не используется в версии > 1.1
6. CreateBirTask - Ballerina Intermediate Representation (BIR) - это объектное представление bal файла(ов), которое в рамках этой задачи записывается в виде байтового потока в файловую систему. BirFileWriter.writeBIRToProjectCache.
7. CopyNativeLibTask - копирование библиотек, которые импортируются в модуль bal
8. CreateJarTask - создание jar файла с компилированными классами. Всё делается в классе BootstrapRunner при помощи java.lang.ProcessBuilder - добавляя в переменные окружения classpath и отдавая массив строковых команд в виде аргумента.
9. CopyModuleJarTask - Добавление списка библиотек, используемых в модуле в контекст выполнения.
10. CreateExecutableTask - записывает созданный на шаге 8 jar файл в папку bin. Добавляет в этот jar все нужные зависимости для автономности.
11. CopyExecutableTask - копирует jar из временных папок типа /var/folders/_8/383734tx4mx773y0nxtvt1h40000gn/T/ballerina-build-7658672360128857005707734734825/bin/test5.jar в папку, где лежит начальный bal файл
12. PrintExecutablePathTask - выводит в консоль название созданного jar
13. RunCompilerPluginTask - вызов дополнительных плагинов компиляции. Например, org.ballerinax.docker.DockerPlugin - https://github.com/ballerinax/docker/tree/master/samples.
14. CleanTargetDirTask - удаление временных папок.
Итогом сборки является исполняемый jar файл, который можно запускать как самостоятельно, так и в контейнерных окружениях в виде микросервиса.
Огромное количество готовых примеров можно найти по ссылке - https://ballerina.io/v1-1/learn/by-example/.
В качестве выводов можно сказать, что идея подобного языка оригинальна и нацелена на облегчение работы разработчика. Давайте последим за дальнейшим развитием - язык уже можно начинать использовать в реализациях интеграционных решений.
- 6.2 (12)
- 7.0 (12)
- activiti (14)
- apache camel (6)
- camel (11)
- devcon (6)
- devops (5)
- emdev (9)
- emdev limited (9)
- entaxy (13)
- esb (10)
- fuse (5)
- gartner (7)
- google apps (6)
- jboss (5)
- liferay (143)
- liferay 7.1 (11)
- liferay dxp (11)
- liferay7 (12)
- openshift (8)
- osgi (5)
- redhat (15)
- rest (6)
- wso2 (70)
- wso2 api-m (10)
- wso2 ei (8)
- wso2ei (5)
- wso2esb (7)
- wso2is (8)
- емдев (11)
Сайт использует файлы cookie. Они позволяют узнавать вас и получать информацию о вашем пользовательском опыте. Это нужно, чтобы улучшать сайт. Посещая страницы сайта и предоставляя свои данные, вы позволяете нам предоставлять их сторонним партнерам. Если вы согласны, продолжайте пользоваться сайтом. Если нет – установите специальные настройки в браузере или обратитесь в техподдержку.