现在的位置: 首页 > 综合 > 正文

Esper处理嵌套POJO事件

2014年04月04日 ⁄ 综合 ⁄ 共 4438字 ⁄ 字号 评论关闭

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

抱歉!评论已关闭.