2012-10-19 20 views
0

我已经为我的应用需求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

现在考虑的测试场景

  1. 两种具有不同ID类型T1的事件,但具有相同的名称已输入系统
  2. 类型T2的一个事件输入系统

由于类型T1的两个事件驻留到视图和当类型T2的事件进入系统,NewData参数类型的事件豆含有T1的两个事件中的查看规范的(如果我使用在代码事件侦听器),但是由于第一个EPL语句指定它插入到第二个语句中,因此它找到了不匹配类型的错误,因为它预期为'StmtGroupingEvent'类型的T2事件,但是却发现了事件Bean。

所以我需要在EPL中处理数组类型的数据,这会很麻烦。

在另一方面,如果情况如下:输入到系统

  1. 只有一种类型的T1的事件。
  2. 类型T2的一个事件进入系统。

由于事件Bean已成功键入到T2类型,因此此方案不会产生任何错误。

所以请建议我任何替代方式做到这一点。

谢谢

回答

0

“它发现错配的类型”是什么意思?如果发现有异常记录,请将其发布并发布一个小测试课程并重现。此外,请确保您使用的是Esper的最新版本,如果有可能已在较新版本中解决的错误。

另外,使用“from bussinessObject.Type1.std:unique(S.Id)”而不是 pattern [every S = bussinessObject.Type1] .std:unique(S.Id)“,因为后者是笔直的每一个都是一样的

+0

让我纠正它说,它期待T1类型的对象,但发现EventBean –