Обработка событий внешними обработчиками
При необходимости возможно обрабатывать события внешними обработчиками написанными на любых языках (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" )