Я пытаюсь написать простое расширение пользовательской функции для WS02 (4.2.0). Моя функция в основном принимает строку и возвращает верхний регистр. Это должно быть первым шагом POC для более продвинутой пользовательской функции.
Я реализовал класс, расширяющий класс org.wso2.siddhi.core.executor.function.FunctionExecutor, и создал файл ams.siddhiext. Затем я упаковал класс и siddhiext в файл JAR, используя плагин maven-bundle.
Мой класс функций выглядит так
public class AnomalyDetector extends FunctionExecutor {
private final static Logger LOG = LoggerFactory.getLogger(AnomalyDetector
.class);
@Override
protected void init(ExpressionExecutor[] expressionExecutors, ExecutionPlanContext executionPlanContext) {
LOG.info("In AD:init()");
}
@Override
protected Object execute(Object[] objects) {
return null;
}
@Override
protected Object execute(Object o) {
LOG.info("In AD:process(" + o.toString() + ")");
String eventData = (String) o;
LOG.info("Event data : " + eventData);
if (eventData != null) {
return eventData.toUpperCase();
} else {
return "Null event data";
}
}
@Override
public void start() {
LOG.info("In AD:start()");
}
@Override
public void stop() {
}
@Override
public Map<String, Object> currentState() {
return null;
}
@Override
public void restoreState(Map<String, Object> map) {
}
@Override
public Attribute.Type getReturnType() {
return Attribute.Type.STRING;
}
}
Затем я поместил банку в /repository/components/lib/, так как /repository/components/dropins/ не поднял ее.
У меня есть 2 проблемы, которые блокируют меня в настоящее время.
- Я хотел написать простой план выполнения, который берет значение из входного потока (String), вызывает мою пользовательскую функцию и записывает вывод в поток экспорта.
@Plan:имя('AMSExecutionPlan')
@Import('AMSStream:1.0.0') определить поток amsStream (строка metrics_json);
@Export('AnomalyStream:1.0.0') определить поток anomalyStream (строка аномалии);
из amsStream выберите ams:findAnomaly(metrics_json), поскольку аномалия вставляется в anomalyStream
Я получаю следующую ошибку проверки.
Что может быть не так с моим планом выполнения?
- Всякий раз, когда я меняю свой пользовательский класс функций, перестраиваю банку и заменяю ее в пути к классам wso2, а затем перезапускаю ws02, я не вижу изменений, отраженных в ws02. Строки журнала, которые я распечатываю в своем пользовательском классе функций, отражают более старую версию кода. Что мне нужно сделать, чтобы внести изменения в мой класс пользовательских функций в реальном экземпляре ws02?
Заранее спасибо!