语法

create context context_name
initiated [by] initiating_condition
terminated [by] terminating_condition

OverLapping和NoOverLapping一样都有两个条件限制,但是区别在于OverLapping的初始条件可以被触发多次,并且只要被触发就会新建一个context,但是当终结条件被触发时,之前建立的所有context都会被销毁。

例子

package com.ebc.OverLappingContext;

import com.espertech.esper.client.*;

/**
* @author yaoyuan2
* @date 2019/3/26
*/
public class OverLappingContextTest {
public static void main(String[] args) {
EPServiceProvider epService = EPServiceProviderManager.getDefaultProvider();
EPAdministrator admin = epService.getEPAdministrator();
EPRuntime runtime = epService.getEPRuntime(); String initial = InitialEvent.class.getName();
String terminate = TerminateEvent.class.getName();
String some = SomeEvent.class.getName();
// 以InitialEvent事件作为初始事件,TerminateEvent事件作为终结事件
String epl1 = "create context OverLapping initiated " + initial + " terminated " + terminate;
String epl2 = "context OverLapping select context.id from " + initial;
String epl3 = "context OverLapping select * from " + some; admin.createEPL(epl1);
EPStatement state = admin.createEPL(epl2);
state.addListener(new OverLappingContextListener());
EPStatement state1 = admin.createEPL(epl3);
state1.addListener(new OverLappingContextListener2()); InitialEvent i = new InitialEvent();
System.out.println("sendEvent: InitialEvent");
runtime.sendEvent(i); SomeEvent s = new SomeEvent();
s.setId(2);
System.out.println("sendEvent: SomeEvent");
runtime.sendEvent(s); InitialEvent i2 = new InitialEvent();
System.out.println("sendEvent: InitialEvent");
runtime.sendEvent(i2); TerminateEvent t = new TerminateEvent();
System.out.println("sendEvent: TerminateEvent");
runtime.sendEvent(t); SomeEvent s2 = new SomeEvent();
s2.setId(4);
System.out.println("sendEvent: SomeEvent");
runtime.sendEvent(s2);
}
}
class InitialEvent{} class TerminateEvent{} class SomeEvent
{
private int id; public int getId()
{
return id;
} public void setId(int id)
{
this.id = id;
}
}
class OverLappingContextListener implements UpdateListener { @Override
public void update(EventBean[] newEvents, EventBean[] oldEvents)
{
if (newEvents != null)
{
EventBean event = newEvents[0];
System.out.println("context.id:" + event.get("id") + ", id:" + event.get("id"));
}
}
} class OverLappingContextListener2 implements UpdateListener { @Override
public void update(EventBean[] newEvents, EventBean[] oldEvents)
{
if (newEvents != null)
{
EventBean event = newEvents[0];
System.out.println("Class:" + event.getUnderlying().getClass().getName() + ", id:" + event.get("id"));
}
}
}

输出

sendEvent: InitialEvent
context.id:0, id:0
sendEvent: SomeEvent
Class:com.ebc.OverLappingContext.SomeEvent, id:2
sendEvent: InitialEvent
context.id:1, id:1
context.id:0, id:0

sendEvent: TerminateEvent
sendEvent: SomeEvent

每发送一个InitialEvent,都会新建一个context,以至于context.id=0和1。

当发送TerminateEvent后,再发送SomeEvent监听器也不会被触发了。而再发送InitialEvent事件,却能触发监听器。

esper(4-4)-OverLapping Context的更多相关文章

  1. python面对对象编程----------7:callable(类调用)与context(上下文)

    一:callables callables使类实例能够像函数一样被调用 如果类需要一个函数型接口这时用callable,最好继承自abc.Callable,这样有些检查机制并且一看就知道此类的目的是c ...

  2. Android:数据持久化(1/2)文件、SharedPreferences

    Summary 持久化的3种方法: 普通文件:I/O流操作文件: SharedPreferences:XML文件,通过key-value pair的形式存储数据: SQLite:Android自带数据 ...

  3. 复杂事件处理引擎—Esper入门(第二弹)

    说明: 以下内容,可以参考Esper官方网站<Qucik start & Tutorial >(顺序做了部分调整). PS:因为英语水平有限(大学期间刚过CET4的英语小盲童一枚) ...

  4. 以计算斐波那契数列为例说说动态规划算法(Dynamic Programming Algorithm Overlapping subproblems Optimal substructure Memoization Tabulation)

    动态规划(Dynamic Programming)是求解决策过程(decision process)最优化的数学方法.它的名字和动态没有关系,是Richard Bellman为了唬人而取的. 动态规划 ...

  5. [转] Spring4.3.x 浅析xml配置的解析过程(6)——解析context命名空间之property-placeholder和property-override标签

    在上一篇解析自定义命名空间的标签中,我们已经知道解析自定义命名空间的标签需要用到NamespaceHandler接口的实现类,并且知道spring是如何获取命名空间对应的命名空间处理器对象的.因此我们 ...

  6. 全局获取Context的技巧(再也不要为获取Context而感到烦恼)

    1.Context概念 Context,相信不管是第一天开发Android,还是开发Android的各种老鸟,对于Context的使用一定不陌生~~你在加载资源.启动一个新的Activity.获取系统 ...

  7. DRF框架(五)——context传参,二次封装Response类,两个视图基类(APIView/GenericAPIView),视图扩展类(mixins),子类视图(工具视图),视图集(viewsets),工具视图集

    复习 1.整体修改与局部修改 # 序列化get (给前端传递参数) #查询 ser_obj = ModelSerializer(model_obj) #只传递一个参数,默认是instance的参数,查 ...

  8. SQL Server安全(6/11):执行上下文与代码签名(Execution Context and Code Signing)

    在保密你的服务器和数据,防备当前复杂的攻击,SQL Server有你需要的一切.但在你能有效使用这些安全功能前,你需要理解你面对的威胁和一些基本的安全概念.这篇文章提供了基础,因此你可以对SQL Se ...

  9. 2017 ACM-ICPC 亚洲区(南宁赛区)网络赛 Overlapping Rectangles

    There are nn rectangles on the plane. The problem is to find the area of the union of these rectangl ...

随机推荐

  1. exe文件停止运行的情况

    1.程序问题. 2.服务器问题. 3.内存占用问题. 一般情况下,关掉程序,重新打开就可以. 上述情况不行,则关掉电脑,重启. 再不行,Ctr + Alt + Del关掉程序的进程. 不行, Win ...

  2. 观察者(Observer)模式 * 委托事件

    观察者(Observer)模式:定义了一种一对多的依赖关系.让多个观察者对象同时监听某一个主题对象.   这个主题对象发生变化时会通知所有观察者对象,使他们字段更新自己 /* * 抽象主题(Subje ...

  3. 【C#】MVC+EF+LINQ 综合小项目

    第一,创建数据库 create table category(id int primary key,name nvarchar(20)) create table news(id int primar ...

  4. Expression表单式树

    余于项目中逢Expression(表达式树),然今未明其用途也,记之以温. using System; using System.Collections.Generic; using System.L ...

  5. WinForm中DataGridView的使用(三) - 各种事件

    CellMouseDown/CellMouseUp 可获得行.列号 可用if (rowIndex >= 0 && e.Y > 4 && e.Y < ( ...

  6. 移动端复制粘贴clipboardjs

    官方网址: https://clipboardjs.com/ 不能一打开就直接触发复制粘贴: 参考博客: http://blog.csdn.net/twoByte/article/details/52 ...

  7. 【arc074e】RGB Sequence dp

    Description ​ 丰泽爷今天也在愉快地玩Minecraft! ​ 现在丰泽爷有一块1∗N1∗N的空地,每个格子按照顺序标记为11到NN.丰泽爷想要在这块空地上铺上红石块.绿宝石块和钻石块作为 ...

  8. 题解 P2350 【[HAOI2012]外星人】

    题目链接 还是本宝宝写题解的一贯习惯 $ :$ 先吐槽吐槽这道题$……$ 相信不少同学第一眼一定没有看懂题.(因为我也没看懂) ~~初中~~数学知识: 对于函数 $ f(x)$ 有 $f^{-1}(x ...

  9. Spark JavaRDD、JavaPairRDD、Dataset之间的相互转换

    主要内容: 1. JavaRDD to JavaPairRDD 2. Dataset to JavaPairRDD 3. JavaPairRDD to JavaRDD 4. JavaRDD to Da ...

  10. Sample-Code:Translator

    <h2>My Spanish Translator</h2> <p> Enter your text in English:  </p> <p&g ...