Пример приложения функционал которого можно расширять во время его выполнения. Динамический функционал основывается на Groovy.
Расширение системы происходит двумя способами
- Написание модулей расширения, которые предоставляют дополнительные классы
- Написание скриптов, которые могут выполняться через веб-АПИ
Кроме базового АПИ платформы скрипты могут использовать ранее написанные модули расширения. Также можно реализовывать другие модули расширения которые полагаются на ранее загруженные в систему модули.
./mvnw clean verifyjava -jar target/dynamic-logic-0.0.1-SNAPSHOT.jarПредположим что мы хотим написать модуль расширения Math, который затем будем использовать в расчетах написанных на скрипте.
Пример модуля
package ru.cyberforum
public class Math
{
public int sum(int a, int b)
{
return a + b;
}
}и пример скрипта
import ru.cyberforum.Math;
def math = new Math();
math.sum(1, 3)Далее происходит загрузка модулей и скриптов в систему.
curl -X POST --location "http://localhost:8080/module_sources" \
-H "Content-Type: application/json" \
-d '{ "code": "Math", "source": "package ru.cyberforum public class Math { public int sum(int a, int b) { return a + b; } }" }'curl -X GET --location "http://localhost:8080/modules/reload" \
-H "Content-Type: application/json"curl -X GET --location "http://localhost:8080/module_sources" \
-H "Content-Type: application/json"curl -X POST --location "http://localhost:8080/script_sources" \
-H "Content-Type: application/json" \
-d '{ "code": "test", "source": "import ru.cyberforum.Math; def math = new Math(); math.sum(1, 3)" }'curl -X GET --location "http://localhost:8080/script_sources" \
-H "Content-Type: application/json"curl -X GET --location "http://localhost:8080/scripts/run/test?args=" \
-H "Content-Type: application/json"