zoukankan      html  css  js  c++  java
  • esper(4-4)-OverLapping Context

    语法

    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事件,却能触发监听器。

  • 相关阅读:
    FW 构建OpenStack的高可用性(HA,High Availability)
    nodeJS进程管理器pm2
    JS构造函数中 this 和 return
    js中通过Object.prototype.toString方法----精确判断对象的类型
    jpeg和jpg的区别是什么
    Http协议中Cookie详细介绍
    http协议与内容压缩
    设置TextView文字居中
    矩阵的等价,相似,合同
    “读者-写者问题”的写者优先算法实现
  • 原文地址:https://www.cnblogs.com/yaoyuan2/p/10601747.html
Copyright © 2011-2022 走看看