1

必要に応じて Wso2 CEP 製品を拡張し、この公式の wso2 cep リンクに示されているようにカスタム条件を作成したいと考えています。

「org.wso2.siddhi.core.executor.conditon.AbstractGenericConditionExecutor」を拡張する拡張クラスを作成し、以下に示すようにその抽象メソッドを実装できます。

    @SiddhiExtension(namespace = "myext", function = "startswithA")
public class StringUtils extends
        org.wso2.siddhi.core.executor.conditon.AbstractGenericConditionExecutor {

    static Log log = LogFactory.getLog(StringUtils.class);

    @Override
    public boolean execute(AtomicEvent atomicEvent) {
        log.error("Entered the execute method");
        log.error("Atomic event to string: " + atomicEvent.toString());

        return true;
    }
}

この拡張メソッドを次のように使用すると:

from allEventsStream[myext:startswithA(name)]
insert into selectedEventsStream *;

この状況では、名前フィールドの先頭に「A」がある場合、startswithA メソッドが true を返すようにしたいと考えています。ただし、CEPでこのクエリを実行すると、イベント全体が実行関数にドロップされます。つまり、「名前」フィールドを引数としてstartswithAメソッドに送信したことを示す兆候はありません。

ストリームのどのフィールドが引数として拡張メソッドに送信されるかを理解するにはどうすればよいですか?

また、次のような条件を書きたい

from allEventsStream[myext:startswith('A', name)]
insert into selectedEventsStream *;

どうすればこれを達成できますか?

4

2 に答える 2

3

「AbstractGenericConditionExecutor」には、エグゼキューターがインスタンス化されるときにパラメーターに含まれる式エグゼキューターのセットを提供する別のメソッドがあります。

public void setExpressionExecutors(List<ExpressionExecutor> expressionExecutors)

必ずしもこのメソッドをオーバーライドしてリストを保存する必要はありません。既に 'AbastractGenericConditionExecutor' という名前のリストとして保存されていexpressionExecutorsます。これらのエグゼキューターにイベントを渡して、イベントから関連する値を順番に取得できます。

たとえば、変数 ('name' など) をクエリに (インデックス 0 のパラメーターとして) 含めると、変数の値を取得するインデックス 0 のリストに 'VariableExpressionExecutor' が取得されます。イベントから。同様に、'A' のような定数の場合、呼び出されたときに値 'A' を与える別のエグゼキュータを取得します。

于 2013-06-12T09:19:18.843 に答える