我正在尝试为WS02(4.2.0)编写一个简单的自定义函数扩展。我的函数基本上接受一个String并返回大写。这是更高级自定义功能的第一步POC。
我实现了一个扩展org.wso2.siddhi.core.executor.function.FunctionExecutor类的类,并创建了一个ams.siddhiext文件。然后我使用maven-bundle插件将类和siddhiext打包在一个JAR文件中。
我的函数类看起来像这样
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;
}
}
然后我把jar放在/ repository / components / lib /中,因为/ repository / components / dropins /没有把它拿起来。
我目前有2个问题阻止了我。
@Plan:名称(&#39; AMSExecutionPlan&#39)
@Import(&#39; AMSStream:1.0.0&#39;) 定义流amsStream(metrics_json string);
@Export(&#39; AnomalyStream:1.0.0&#39;) define stream anomalyStream(异常字符串);
来自amsStream 选择ams:findAnomaly(metrics_json)为异常 插入anomalyStream
我的执行计划可能出现什么问题?
提前致谢!
答案 0 :(得分:0)
你可以将jar捆绑为OSGI包并试试吗?将jar转换为OSGI包时可能会出现问题。
答案 1 :(得分:0)
您指出的验证错误表明您的扩展程序未正确返回返回类型。但我可以看到你正确实现了getReturnType()。因此,由于问题2,您的源代码和实际运行代码可能无法同步。所以我们先解决这个问题。
在WSO2服务器中,lib文件夹用于为OSGi依赖项添加非OSGi依赖项和dropins。事实上,它在lib而不是dropins中工作表明你的jar没有打包成捆。要实现这一点,请从String扩展名下面的pom文件。有两点需要注意。
[1]捆绑包装的使用
[2]捆绑插件的用法
更新你的pom引用它,然后你就可以直接将你的包添加到dropins了。这也是您未能反映更改的原因。将jar添加到lib服务器时,会在内部将其转换为OSGi包并添加到dropins。现在,当您再次更新lib中的jar时,dropins中的jar将不会更新。这将是旧捆绑。因此,没有反映出变化。当您更新pom并正确构建捆绑包时,此问题也将消失。
[1] https://github.com/wso2/siddhi/blob/v3.1.0/modules/siddhi-extensions/string/pom.xml#L29
[2] https://github.com/wso2/siddhi/blob/v3.1.0/modules/siddhi-extensions/string/pom.xml#L57
希望这会有所帮助!!