Обработка событий внешними обработчиками

При необходимости возможно обрабатывать события внешними обработчиками написанными на любых языках (Php, Python, Perl, Bash и т.д.)

Внимание данный механизм обработки событий более ресурсоемкий и медленее, чем обработчик написанный на Java.

Для вызова внешнего обработчика необходимо обернуть его вызов в небольшой Java класс. К примеру для события GetAdditionalActionListEvent выводящего список дополнительных действий в договоре

images/download/attachments/174882826/external_01.png

скрипт будет выглядеть следующим образом

package ru.bitel.bgbilling.wraper;
 
import java.util.Arrays;
 
import ru.bitel.bgbilling.kernel.event.events.GetAdditionalActionListEvent;
import ru.bitel.bgbilling.kernel.script.server.dev.EventScriptBase;
import ru.bitel.bgbilling.server.util.Setup;
import ru.bitel.common.sql.ConnectionSet;
 
public class TestExternalScript
extends EventScriptBase<GetAdditionalActionListEvent>
{
@Override
public void onEvent( GetAdditionalActionListEvent event, Setup setup, ConnectionSet set )
throws Exception
{
String result = doExternalScript( event, Arrays.asList( "/usr/bin/echo", "R:addAction\t1\tAction1\nR:addAction\t2\tAction2" ) );
}
}

Здесь /usr/bin/echo внешний обработчик, "R:addAction\t1\tAction1\nR:addAction\t2\tAction2" параметр вызова обработчика (их может быть несколько)

Во входной поток обработчика передается событие event сериализованное в json формат. Выходной поток возвращается в переменную result.

Дополнительно выходной поток обработчика обрабатывается на поиск строк определенного формата

R:<МЕТОД КЛАССА EVENT><TAB><ARG_1>[....<TAB><ARG_N>]<ENTER>

например для примера выше, в выходном потоке обработчика будут строки

R:addAction\t1\tAction1
R:addAction\t2\tAction2

обработка которых приведет к вызову метода event.addAction( 1, "Action1" ) и event.addAction( 2, "Action2" )