Обработка событий внешними обработчиками
При необходимости возможно обрабатывать события внешними обработчиками написанными на любых языках (Php, Python, Perl, Bash и т.д.)
Внимание данный механизм обработки событий более ресурсоемкий и медленее, чем обработчик написанный на Java.
Для вызова внешнего обработчика необходимо обернуть его вызов в небольшой Java класс. К примеру для события GetAdditionalActionListEvent выводящего список дополнительных действий в договоре
скрипт будет выглядеть следующим образом
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" )