本地事件通知组件概述
组件简介
基于插件扩展的同一系统内部的事件通知机制;
可以注册多个监听,按注册指定的顺序依次执行;
功能说明
- 基于插件扩展的同一系统内部的事件通知机制;
- 支持多个监听,按注册指定的顺序依次执行;
- 支持事件和监听的注册;
整体设计
依赖环境
组件采用Maven进行编译和打包发布,其对外提供的依赖方式如下:
<dependency>
<groupId>com.yonyou.iuap</groupId>
<artifactId>iuap-organization</artifactId>
<version>${iuap.modules.version}</version>
</dependency>
${iuap.modules.version} 为平台在maven私服上发布的组件的version。
数据库表
目前未提供界面需要通过数据库注册的方式。
事件类型pub_eventtype
名称 | 代码 | 注释 |
主键 | id | |
事件源编码 | sourceid | 一般用来描述产生事件的对象或单据。例如用户,租户等 |
事件源名称 | sourcename | |
事件源名称多语编码 | sourcenamei18n | |
事件类型编码 | eventtypecode | 一般用于描述事件对象或单据的具体行为。例如:新增、修改、删除等 |
事件类型名称 | eventtypename | |
事件类型名称多语编码 | eventtypenamei18n | |
详细说明 | note | 主要对事件的消息内容格式做出说明,便于后续监听插件安格式获取数据。 |
最后更新时间 | last_time | |
版本 | version |
事件通知业务插件表pub_eventlistener
名称 | 代码 | 注释 |
主键 | id | |
事件类型主键 | event_type_id | |
插件名称 | name | |
插件名称多语编码 | namei18n | |
插件全类名 | implclassname | 对应插件的类名,需要实现IBusinessEventListener接口 |
插件功能备注 | note | |
插件执行顺序号 | operindex | 同一业务系统内顺序号唯一,同一业务系统内事件按插件顺序执行 |
是否启用 | enabled | Y/N |
最后更新时间 | last_time | |
版本 | version |
使用说明
集成说明
1、服务启动,Spring初始化配置文件路径中添加classpath:eventLocal-applicationContext.xml,请参考示例工程。
2、执行建表脚本
依次执行examples项目下sql目录中的dll.sql、index.sql、dml.sql建立数据库并初始化数据。
配置说明
组件需要访问数据库,eventLocal-applicationContext.xml文件定义了一个依赖id为dataSource数据源的bean,请在主配置文件中提供id为dataSource的数据源,或者修改配置文件eventlocal-applicationContext.properties,具体配置参数请参考示例工程。
使用示例
假定一个事件用户新增前事件:
(1) 新增处理插件
需要实现IBussinessListener,如图所示,新增一个处理插件: com.yonyou.iuap.event.local.test.LocalEventPluginImpl;
(2) 注册监听
注册事件类型
INSERT INTO pub_eventtype (id, sourceid, sourcename, sourcenamei18n, eventtypecode, eventtypename, eventtypenamei18n, note, last_time, version) VALUES ('1', 'USER', '用户', 'user_code', 'ADD_BEFORE', '新增前', 'add_before_code', null, null, 1);注册事件监听插件
INSERT INTO pub_eventlistener (id, event_type_id, name, namei18n, implclassname, note, operindex, enabled, last_time, version) VALUES ('1', '1', '测试', 'test_code', 'com.yonyou.iuap.event.local.test.LocalEventPluginImpl', null, 1, 'Y', null, 1);
(3) 事件触发
BusinessEvent event = new BusinessEvent("USER","ADD_BEFORE",System.currentTimeMillis()/*事件要发送的内容,格式是字符型*/); EventDispatcher.fireEvent(event);
(4)监听类实现IBussinessListener
public class LocalEventPluginImpl implements IBussinessListener{
/**
* 事件响应
*/
public void doAction(BusinessEvent businessEvent) {
System.out.println("doAction, time="+(System.currentTimeMillis()-Long.valueOf(String.valueOf(businessEvent.getUserObject())))+",event="+businessEvent);
}
public void doBackAction(BusinessEvent businessEvent) {
System.out.println("doBackAction, event="+businessEvent);
}
}