这篇博客介绍如何利用Esper来处理POJO的嵌套事件。通过上篇博客已经知道具体的Esper引擎是怎么处理POJO对象的了,其实对于嵌套的POJO对象处理也是一样的。
首先建立POJO嵌套对象。
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 String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getAge() {
return age;
}
public void setAge(int age) {
this.age = age;
}
public List<Child> getChildren() {
return children;
}
public void setChildren(List<Child> children) {
this.children = children;
}
public Map<String, Integer> getPhones() {
return phones;
}
public void setPhones(Map<String, Integer> phones) {
this.phones = phones;
}
public Address getAddress() {
return address;
}
public void setAddress(Address address) {
this.address = address;
}
}
package test;
public class Child {
String name;
int gender;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public int getGender() {
return gender;
}
public void setGender(int gender) {
this.gender = gender;
}
}
package test;
public class Address {
String road;
String street;
int houseNo;
public String getRoad() {
return road;
}
public void setRoad(String road) {
this.road = road;
}
public String getStreet() {
return street;
}
public void setStreet(String street) {
this.street = street;
}
public int getHouseNo() {
return houseNo;
}
public void setHouseNo(int houseNo) {
this.houseNo = houseNo;
}
}
有了这个嵌套的POJO对象之后就和上篇博客的操作一样了,就是开启引擎,书写相应的业务EPL语句进行事件监听。
class AppleListener implements UpdateListener {
@Override
public void update(EventBean[] newEvents, EventBean[] oldEvents) {
if (newEvents != null) {
Integer age = (Integer) newEvents[0].get("age");
//List<Child> children = (List<Child>) newEvents[0].get("children");
//Address address = (Address) newEvents[0].get("address");
System.out.println("age is:"+age);
/*for(int i=0;i<children.size();i++){
}
System.out.println(age);*/
}
}
}
String epl = "select age,children,address from " + person
+ " where name='cjq'";
这时候运行之后控制台就会输出,
具体的POJO嵌套对象进入监听代码如下:
public static void main(String[] args) {
EPServiceProvider epService = EPServiceProviderManager
.getDefaultProvider();
EPAdministrator admin = epService.getEPAdministrator();
String person = Person.class.getName();
String epl = "select age,children,address from " + person
+ " where name='cjq'";
EPStatement state = admin.createEPL(epl);
state.addListener(new AppleListener());
EPRuntime runtime = epService.getEPRuntime();
Person person1 = new Person();
Address address1=new Address();
address1.setHouseNo(1);
address1.setRoad("shangdi30");
address1.setStreet("shangdi30");
person1.setAddress(address1);
person1.setAge(7);
List<Child> children1=new ArrayList<Child>();
Child child11=new Child();
child11.setGender(1);
child11.setName("x");
Child child12=new Child();
child12.setGender(2);
child12.setName("y");
Child child13=new Child();
child13.setGender(3);
child13.setName("z");
children1.add(child11);
children1.add(child12);
children1.add(child13);
person1.setChildren(children1);
person1.setName("cjq");
Map<String,Integer> phones1=new HashMap<String,Integer>();
phones1.put("zhuzhai", 1234567);
phones1.put("jiating", 2345678);
person1.setPhones(phones1);
runtime.sendEvent(person1);
Person person2 = new Person();
Address address2=new Address();
address2.setHouseNo(1);
address2.setRoad("shangdi30");
address2.setStreet("shangdi30");
person2.setAddress(address2);
person2.setAge(11);
List<Child> children2=new ArrayList<Child>();
Child child21=new Child();
child21.setGender(1);
child21.setName("x");
Child child22=new Child();
child22.setGender(2);
child22.setName("y");
Child child23=new Child();
child23.setGender(3);
child23.setName("z");
children2.add(child21);
children2.add(child22);
children2.add(child23);
person2.setChildren(children2);
person2.setName("cjq");
Map<String,Integer> phones2=new HashMap<String,Integer>();
phones2.put("zhuzhai", 1234567);
phones2.put("jiating", 2345678);
person2.setPhones(phones2);
runtime.sendEvent(person2);
Person person3 = new Person();
Address address3=new Address();
address3.setHouseNo(1);
address3.setRoad("shangdi30");
address3.setStreet("shangdi30");
person3.setAddress(address3);
person3.setAge(12);
List<Child> children3=new ArrayList<Child>();
Child child31=new Child();
child31.setGender(1);
child31.setName("x");
Child child32=new Child();
child32.setGender(2);
child32.setName("y");
Child child33=new Child();
child33.setGender(3);
child33.setName("z");
children3.add(child31);
children3.add(child32);
children3.add(child33);
person3.setChildren(children3);
person3.setName("cjq2");
Map<String,Integer> phones3=new HashMap<String,Integer>();
phones3.put("zhuzhai", 1234567);
phones3.put("jiating", 2345678);
person3.setPhones(phones3);
runtime.sendEvent(person3);
}
其实到这里应该对esper处理事件更加清晰明了了,下篇介绍Map事件的esper引擎处理。