Esper对事件有特殊的数据结构约定。能处理的事件结构有:POJO,java.util.Map,Object Array,XML。
对于POJO,Esper要求对每一个私有属性要有getter方法。Esper允许不必按照JavaBean规定的格式,但是getter方法是必须的。又或者可以在配置文件中配置可访问的方法来代替getter。
--Person.java
package com.lands.esper.test2;
import java.util.List;
import java.util.Map;
public class Person {
String name;
int age;
List<Child> children;
Map<String, Integer> phones;
Address address;
public final String getName() {
return name;
}
public final void setName(String name) {
this.name = name;
}
public final int getAge() {
return age;
}
public final void setAge(int age) {
this.age = age;
}
public final List<Child> getChildren() {
return children;
}
//查询指定的Child
public final Child getChildren(int index) {
return children.get(index);
}
public final void setChildren(List<Child> children) {
this.children = children;
}
public final Map<String, Integer> getPhones() {
return phones;
}
//查询指定某个号码
public final int getPhones(String name) {
return phones.get(name);
}
//更新号码
public void setPhones(String name,Integer number) {
phones.put(name, number);
}
public final void setPhones(Map<String, Integer> phones) {
this.phones = phones;
}
public final Address getAddress() {
return address;
}
public final void setAddress(Address address) {
this.address = address;
}
}
--MyListener.java
package com.lands.esper.test2;
import java.util.List;
import com.espertech.esper.client.EventBean;
import com.espertech.esper.client.UpdateListener;
public class MyListener implements UpdateListener {
public static final String EPL =
"select age, children, address, children[1], phones('home') from "
+ Person.class.getName()
+ " where name='liwei' ";
@Override
public void update(EventBean[] newEvents, EventBean[] oldEvents) {
if (newEvents != null) {
Integer age = (Integer) newEvents[0].get("age");
System.out.println(age);
List<Child> childs = (List<Child>) newEvents[0].get("children");
System.out.println(childs.get(0).getName());
Address ad = (Address) newEvents[0].get("address");
System.out.println(ad.getRoad());
Child child = (Child) newEvents[0].get("children[1]");
System.out.println(child.getName());
Integer num = (Integer) newEvents[0].get("phones('home')");
System.out.println(num);
}
}
}