我已经为我的应用需求CEP实现了ESPER。在使用EPL我遇到了一个特定的方案是如下:Esper EPL leftouter加入转发到其他流
我已经加上左外两个事件加入,以确保每一个事件从第一可以触发声明,只有那些从第二个流包含特定属性可以一起来。我创建了一个视图来存储基于某些字段的唯一数据。我EPLS是
@Name ('StmtCombinedEvent')
Insert into CombinedEvent
Select S as T1,
L as T2,
From pattern[every S= bussinessObject.Type1].std:unique(S.Id) as S
left outer join
bussinessObject.Type2.std:unique(name) as L
on S.name = L.name;
@Name ('StmtGroupingEvent')
Insert into Position
Select
G.T1 as T1
G.T2 as T2
From CombinedEvent.std:unique(T1.Id) as G;
我在配置文件中使用java.util.Map类型CombinedEvent的dataType
现在考虑的测试场景
- 两种具有不同ID类型T1的事件,但具有相同的名称已输入系统
- 类型T2的一个事件输入系统
由于类型T1的两个事件驻留到视图和当类型T2的事件进入系统,NewData参数类型的事件豆含有T1的两个事件中的查看规范的(如果我使用在代码事件侦听器),但是由于第一个EPL语句指定它插入到第二个语句中,因此它找到了不匹配类型的错误,因为它预期为'StmtGroupingEvent'类型的T2事件,但是却发现了事件Bean。
所以我需要在EPL中处理数组类型的数据,这会很麻烦。
在另一方面,如果情况如下:输入到系统
- 只有一种类型的T1的事件。
- 类型T2的一个事件进入系统。
由于事件Bean已成功键入到T2类型,因此此方案不会产生任何错误。
所以请建议我任何替代方式做到这一点。
谢谢
让我纠正它说,它期待T1类型的对象,但发现EventBean –