0

我正在尝试使用埃斯珀。

我的问题是关于事件之间的多态性。

示例(伪代码):

我使用两个类 GPSEvent 和 PositionEvent 作为事件类型。它们可能看起来像:

class GPSEvent{
    double longitude
    double latitude
}

class PositionEvent extends GPSEvent{
    Date timeOfOccurence
}

如果我使用规则:

select * from GPSEvent.win:length_batch(5)

并且以下事件将被发送到引擎: GPSEvent g1, GPSEvent g2, GPSEvent g3, GPSEvent g4, PositionEvent p1

该规则将触发

我现在的问题是如果发送子类型事件如何防止触发

或者

仅当事件类型是没有任何子类型的超类型时如何触发?

是否有任何最佳实践而不增加规则的复杂性或在 eventtype 类中使用“开销”?


附加信息:

在检测到 5 个 GPSEvents 后,我想将 PositionEvent 路由到订户之外的引擎

4

1 回答 1

0

我看到三种方式。您可以向类添加一个标志(没有开销,因为它的常量,例如“getType(){return“P”}”,这提供了一个属性“类型”)。您可以制作 EPL UDF 以进行自定义检查。您可以使用“instanceof/typeof”。

于 2015-02-03T13:50:16.780 回答