Event组件接口说明

组件接口说明

10.5.1监听器接口

组件接口

com.chinacreator.event.Listener

方法:

public void handle(Event e);   

说明:事件监听器通过本方法来处理监听到的事件消息。由具体的监听器实现类来实现这个方法。


Event组件接口说明
 

使用实例:

 

public void handle(Event e) {

       Object source = e.getSource();//获取事件消息源

       if(e.getType().equals( ACLEventType.ROLE_INFO_CHANGE))//判断事件类型

       { 

           //进行特殊处理

       } 

}   

10.5.2注册监听器接口

注册事件监听器需要的相关组件接口说明如下:

10.5.2.1 com.chinacreator.event.NotifiableFactory

 

方法:

public static Notifiable getNotifiable()

说明:通过NotifiableFactory提供的静态方法获取到一个通用激发器对象

      然后在这个激发器对象上注册所有监听器 

10.5.2.2 com.chinacreator.event.Notifiable

l         方法 1

public void addListener(Listener listener) 

说明:注册监听器,监听所有类型的本地事件和远程本地事件

实例:

Listener listener = new ExampleListener();

NotifiableFactory.getNotifiable().addListener(listener); 

l         方法2

public void addListener(Listener listener,boolean remote)

说明:

注册监听器,根据参数remote的值监听不同传播方式的消息,

True-监听远程消息和本地远程消息以及远程消息。

False-监听本地消息和本地远程消息

实例:

Listener listener = new ExampleListener();

NotifiableFactory.getNotifiable().addListener(listener,false); 

l         方法3

public void addListener(Listener listener,List eventtypes);

说明:

注册监听器,监听远程消息,本地消息,本地远程消息,只监听eventtypes列表中列出的消息类型的消息。

实例:

List eventTypes = new ArrayList();

eventTypes.add(CMSEventType.EVENT_SITE_ADD);

eventTypes.add(CMSEventType.EVENT_SITE_DELETE);

eventTypes.add(CMSEventType.EVENT_SITE_UPDATE);     

eventTypes.add(CMSEventType.EVENT_SITESTATUS_UPDATE);      

eventTypes.add(CMSEventType.EVENT_CHANNEL_MOVE);

Listener listener = new ExampleListener();   

NotifiableFactory.getNotifiable().addListener(listener,eventType); 

l         方法4

public void addListener(Listener listener,List eventtypes,boolean remote);

说明:注册监听器,remotetrue监听远程消息、本地消息、本地远程消息,为false时监听本地消息、本地远程消息,同时只监听eventtypes列表中列出的消息类型的消息 

实例:

List eventTypes = new ArrayList();

//设置监听器需要监听的事件类型

eventTypes.add(CMSEventType.EVENT_SITE_ADD);

eventTypes.add(CMSEventType.EVENT_SITE_DELETE);

eventTypes.add(CMSEventType.EVENT_SITE_UPDATE);     

eventTypes.add(CMSEventType.EVENT_SITESTATUS_UPDATE);      

eventTypes.add(CMSEventType.EVENT_CHANNEL_MOVE);

Listener listener = new ExampleListener();   

NotifiableFactory.getNotifiable().addListener(listener,eventTypes,false);  

l         方法5

public void addListener(Listener listener,List eventtypes,int listenerType);

说明:

注册监听器,监听eventtypes中列出的对应消息类型的事件消息,根据listenerType的值来决定监听的不同传播途径的事件消息。listenerType的取值范围如下:

/**

     * 本地事件消息和本地远程事件西欧系监听器,

     */

    public static final int Listener.LOCAL = 0;

    /**

     * 本地远程事件和远程事件监听器

     */

    public static final int Listener.REMOTE = 1;   

    /**

     * 本地和远程事件及本地远程事件监听器

     */

    public static final int Listener.LOCAL_REMOTE = 2;

使用实例:

List eventTypes = new ArrayList();

//设置监听器需要监听的事件类型

eventTypes.add(CMSEventType.EVENT_SITE_ADD);

eventTypes.add(CMSEventType.EVENT_SITE_DELETE);

eventTypes.add(CMSEventType.EVENT_SITE_UPDATE);     

eventTypes.add(CMSEventType.EVENT_SITESTATUS_UPDATE);      

eventTypes.add(CMSEventType.EVENT_CHANNEL_MOVE);

Listener listener = new ExampleListener();   

NotifiableFactory.getNotifiable().addListener(listener,eventTypes, Listener.LOCAL_REMOTE); 

l         方法6

public void addListener(Listener listener,int listenerType);

说明:注册监听器,该监听器监听所有类型的事件消息,listenerType参数用来指定监听器需要监听的消息的传播方式,也就是说,监听器只监听以listenerType指定的传播方式传播的事件消息。listenerType的取值范围如下:

/**

     * 本地事件消息和本地远程事件西欧系监听器,

     */

    public static final int Listener.LOCAL = 0;

    /**

     * 本地远程事件和远程事件监听器

     */

    public static final int Listener.REMOTE = 1;   

    /**

     * 本地和远程事件及本地远程事件监听器

     */

    public static final int Listener.LOCAL_REMOTE = 2;

使用实例:

Listener listener = new ExampleListener();   

NotifiableFactory.getNotifiable().addListener(listener, Listener.LOCAL_REMOTE);

10.5.3事件消息发布接口

与事件发布相关的组件接口如下:

 

com.chinacreator.event.EventHandle

com.chinacreator.event.EventImpl

com.chinacreator.event.EventType

com.chinacreator.event.EventTarget

com.chinacreator.remote.Utils 

EventHandle是一个抽象类封装了所有事件广播(事件本地广播和事件远程广播)的所有功能。EventHandle分发事件消息可以同步分发消息也可以通过异步的方式发布消息。

EventImpl是事件消息的封装对象,封装的信息包括:

l         事件源信息,也就是事件需要广播的消息数据,是一个java.lang.Object类型的对象,当消息作为远程消息传递时消息对象必须实现java.io.Serializable接口,。

l         事件类型,所有的事件消息都需要指定一个事件类型,这样才会被特定的事件监听器所接收

l         事件消息广播方式,指定事件的传播途径,分为3种方式:

本地传播(Event.LOCAL) 只将相应的事件消息在本地应用中传播,发给本地监听器和本

地远程监听器

    远程传播(Event.REMOTE) 事件消息传递给远程服务器中的远程监听器和远程本地监听

器(远程服务器也包括本地服务器,因为本地服务器也启动了

远程消息监听器)

    本地远程传播 (Event.REMOTELOCAL)事件消息除了传递给本地监听器,也会在远程服务

器之间传播,远程服务器上的本地远程监听器和远程监听器会

接收到这个消息。

l         事件消息的目标地址,包含目标地址ip和端口。当指定的消息为REMOTEREMOTELOCAL这两种类型时,才能指定目标地址,如果对应的target不存在,那么这个事件消息就不会在服务器之间传播。如果指定目标地址,那么该消息就会直接传递给该地址对应的应用服务器上的监听器,否则就会广播给所有的远程服务器上的相关的事件监听器 

EventTarget封装事件发送目标地址,包括ip和端口两个信息。只有事件的eventBroadcastType为远程传播(Event.REMOTE) 本地远程传播 (Event.REMOTELOCAL)两种类型时,才可以指定target属性,如果targetnull,那么事件将被广播到所有的远程节点上面的监听器,否则只广播到target指定的目的地址对应的远程监听器,如果对应的target不存在,那么直接丢弃这个事件消息。 

com.chinacreator.remote.Utils:EventHandle组件采用Utils组件来广播远程消息。Utils中采用JGroups组播通讯控件来实现事件消息在远程服务器之间广播。具体消息的远程广播机制请参考系统集群配置说明一节。

上一篇:对话管理的一些思考


下一篇:EF调用存储过程