这篇博客介绍如何利用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引擎处理。