Esper系列(八)Method Definition、Schema

Method Definition

作用:以公共静态方法的方式去访问外部数据。

 

应用说明:

1、返回数据的方法必须是公共静态方法(方法参数可以有多个也可以没有);
2、如果返回一条数据或无返回数据,则方法的返回类型可以是Java类或者Map类型数据。如果返回多条数据(包括一条),则方法返回类型必须是Java类的数组或者Map数组;
3、如果方法的返回类型是Java类或者Java类数组,则Java的类定义必须包含针对属性的get方法。
4、如果方法的返回类型是Map或者Map数组,则Map的key-value定义固定为<String, Object>;
5、如果返回的数据是Map或者Map数组,除了定义返回数据的方法外,还要定义返回元数据的方法(这个元数据针对返回的数据)。方法是公共静态方法,且必须是无参数方法。方法返回类型为Map<String, Class>,String表示返回的数据的名称,Class表示返回的数据的类型。返回元数据的方法名称=返回数据的方法名称+Metadata。

 

例子:

文件名:MyEvent.java

public class MyEvent {
    public static Map<String, Object> getMapEvent(){
        Map<String, Object> map = new HashMap<String, Object>();
        map.put("key""chenx1");
        map.put("value",1);
        return map;
    }
   
    public static Map<String, Class> getMapEventMetadata(){
10          Map<String, Class> map = new HashMap<String, Class>(); 
11          map.put("key", String.class);
12          map.put("value"int.class);
13          return map;
14      }
15  }

文件名:orderMainTest.java

String epsql = "select * from method:MyEvent.getMapEvent() where value > 0";
EPStatement epstate = epAdmin.createEPL(epsql);
Iterator<EventBean> iter = epstate.iterator();
while (iter.hasNext()) {
EventBean bean = iter.next();
    System.out.println(bean.getUnderlying());
}

 

Schema

格式:

create [map | objectarray] schema schema_name [as] 
    (property_name property_type [,property_name property_type [,...])
  [inherits inherited_event_type[, inherited_event_type] [,...]]
  [starttimestamp timestamp_property_name]
  [endtimestamp timestamp_property_name]
  [copyfrom copy_type_name [, copy_type_name] [,...]]

参数说明:

  1. map、objectarray分别表示当前定义的schema是map结构还是数组结构。
  2. schema_name表示schema的名字,全局唯一(as为可选内容)。
  3. property_name表示schema所包含的属性名称,property_type为属性的类型,多个属性用逗号分隔,所有属性用圆括号括起来可以使用的类型有:int、String等已经内置的Java类型;已经通过Configuration接口注册的事件类型,比如Map,数组,schema等;可以使用POJO类,如果没有import就要写全名,否则写类名即可。
  4. inherits表示继承别的事件类型,后面跟着的是要继承的事件类型。如果使用了继承,则当前定义的schema包含了继承的事件类型的所有属性。并且可以继承多个,用逗号分隔。
  5. starttimestamp和endtimestamp是两个特殊的关键字。单独使用starttimestamp时,表示为schema记一个时间戳。后面跟着已经声明的属性并且能够返回一个data-time值。如果联合endtimestamp使用,则表示这个schema只能在某段事件内使用。后面跟着的同样也是已经声明的属性并且能够返回一个data-time值。注意endtimestamp不能单独使用。
  6. copyfrom表示复制别的事件的所有属性到当前定义的schema中,并且可以copy多个事件,用逗号分隔。

示例:

// 创建schema
String inepl = "create schema myevent as orderEvent";
epAdmin.createEPL(inepl);
// 查询
EPStatement epstate = epAdmin.createEPL("select * from myevent");
时间: 2024-10-10 05:40:24

Esper系列(八)Method Definition、Schema的相关文章

struts2官方 中文教程 系列八:异常处理

在本教程中,我们将探讨如何启用Struts 2框架处理web应用程序生成的任何未捕获的异常.Struts 2提供了健壮的异常处理,包括能够自动记录任何未捕获的异常,并将用户重定向到错误web页面. 贴个本帖的地址,以免被爬:struts2官方 中文教程 系列八:异常处理  即 http://www.cnblogs.com/linghaoxinpian/p/6915066.html 下载本章节代码 全局异常处理(Global Exception Handling) 使用Struts 2框架,您可以

Cocos2d-x 系列八之Box2d入门

既然已有了cocos2d-x,为什么还要Box2d呢,是因为cocos2d-x作为一个图像引擎,只是用于显示图像,图像之间可以任意的重合,如果想要做到类物理学的碰撞等运动效果,就需要用到Box2d这个物理引擎用来模仿物理世界中的物体: 本讲主要简单讲述如何创建动态物体,静态物体,漂浮物体,以及它们与图像的绑定: 下面直接通过一个例子来看三种物体的创建方法: 首先需要说明的一点是:在Box2d中,使用的单位是米,而不是像素,所以,在进行位置转换的时候,需要按比例缩放,Box2d中,比较理想的距离大

S5PV210开发系列八_Yaffs的移植

S5PV210开发系列八 Yaffs的移植 象棋小子    1048272975 Nand作为市面上最基本的非易失性闪存技术之中的一个,应用在各种固态大容量存储解决方式中.因为Nand flash自身的特点,Nand存储器往往须要一款专用的Nand文件系统进行管理.开源的Yaffs文件系统因为其优异的性能,在Nand flash中受到广泛的应用,笔者此处就Yaffs的移植作一个简单的介绍. 1. Yaffs概述 Yaffs是由Aleph One公司所发展出来的Nand flash文件系统,专门为

Cocos2d-x 系列八之绘图API

本节来看一下在cocos2d-x中,常用的一些绘图api: 先来看一个工具类,以便于快速指定游戏窗口的一些位置,如左上,右上等:VisibleRect.h #ifndef __VISIBLERECT_H__ #define __VISIBLERECT_H__ #include "cocos2d.h" class VisibleRect { public: static cocos2d::Rect getVisibleRect(); static cocos2d::Vec2 left()

SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储

原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft SQL Server 2008 R2调测. 2.具备 Transact-SQL 编程经验和使用 SQL Server Management Studio 的经验. 3.具有使用 Microsoft Visual Studio 进行 Microsoft .NET Framework开发的经验. 4.具有

ARP欺骗(原始套接字系列八)

ARP欺骗的原理可简单的解释如下:假设有三台主机A,B,C位于同一个交换式局域网中,监听者处于主机A,而主机B,C正在通信.现在A希望能嗅探到B->C的数据,于是A就可以伪装成C对B做ARP欺骗--向B发送伪造的ARP应答包,应答包中IP地址为C的IP地址而MAC地址为A的MAC地址. 这个应答包会刷新B的ARP缓存,让B认为A就是C,说详细点,就是让B认为C的IP地址映射到的MAC地址为主机A的MAC地址.这样,B想要发送给C的数据实际上却发送给了A,就达到了嗅探的目的.我们在嗅探到数据后,还

C语言快速入门系列(八)

C语言快速入门系列(八) C语言位运算与文件 本章引言: 在不知不觉中我们的C快速入门系列已经慢慢地接近尾声了,而在这一节中,我们会对 C语言中的位运算和文件进行解析,相信这两章对于一些人来说是陌生的,因为很多 老师都会跳过这两个大知识点,其实这两个也是灰常重要的!比如一个问题,叫你算 变量a乘以2,怎么写效率高?直接a *2,很多人都这样写,但是如果你会位运算的话,你会a<<1; 位运算的效率可是比a*2高的哦!另一个问题,不用变量左中间值,直接交换两个变量的值? 你怎么做?也是用到位运算!

IDEA Method definition shorthands are not supported by current JavaScript version

sentinel-dashboard前端用到了AngularJS v1.4.8,在IDEA里修改js,触发js验证时有一些js文件会出现红色波浪线. 在代码行里鼠标一上去提示信息:Method definition shorthands are not supported by current JavaScript version 虽然不运行工程编译.启动运行,但像java文件有问题一样的红色波浪线看着不清爽. 看描述是JavaScript版本某些定义和写法不支持. 解决方法: File->Se

深入探索并发编程系列(八)-Acquire与Release语义

一般来说,在无锁(lock-free)注1编程中,线程有两种方法来操作共享内存:线程间相互竞争一种资源或者相互合作传递消息.Acquire与Release语义对后者来说很关键:保证在线程间可靠地相互传递消息.实际上,我大胆地猜测,不正确的或者缺乏Acquire与Release语义是导致无锁编程产生错误的最常见 原因. 在这篇文章中,我会去探讨许多在C++中获得Acquire与Release 语义的方法.还会简单介绍一下C++11原子库标准.所以,你事先不必具备这方面的知识.简明起见,这里的讨论仅