Liferay7 BPM门户开发之22: Liferay7模型监听器(Model Listeners)
Model Listeners实现ModelListener接口,用于持久化时的AOP处理
一些使用场景:
- Audit Listener: 在一个独立而分离的数据库,做信息更新的审计;
- Cache Clearing Listener: 缓存清除时做的额外定制处理;
- Validation Listener: 实体的验证
- Entity Update Listener: 实体的更新处理
在一个实体模型上可以有多个侦听器,并且无法控制他们运行的顺序。
Liferay7中你只需要处理2件事情,比6.2要简单:
- 1、实现 ModelListener
- 2、在Liferay’s OSGi运行时自动注册服务
在Liferay7中的写法:
package ...; import ...; @Component(
immediate = true,
service = ModelListener.class
)
public class CustomEntityListener extends BaseModelListener<CustomEntity> { /* Override one or more methods from the ModelListener
interface.
*/
@Override
public void onAfterCreate(CustomEntity entity) throws ModelListenerException {
...
}
}
在Liferay7中不用编写docroot/WEB-INF/liferay-hook.xml,增加<portal-properties>portal.properties</portal-properties>,方便很多
在Liferay6中的写法:
package com.liferay.samples.hooks; import com.liferay.portal.ModelListenerException;
import com.liferay.portal.model.BaseModelListener;
import com.liferay.portal.model.User; public class MyUserListener extends BaseModelListener<User> { @Override
public void onAfterCreate(User user) throws ModelListenerException {
System.out.println(user.getFullName());
} public void onAfterUpdate(User user) throws ModelListenerException {
System.out.println(user.getFullName());
}
}
CustomEntity用于告诉监听器,实体模型的类型。
注册Liferay’s OSGi runtime:
@Component(
immediate = true,
service = ModelListener.class
)
可以实现的模型事件:
- onAfterAddAssociation: 处理关联模型的AfterAdd
- onAfterCreate: 在模型的DAO持久化类中Cearte事件之后,做些你的业务逻辑
- onAfterRemove: 在模型的DAO持久化类中Remove事件之后,做些你的业务逻辑
- onAfterRemoveAssociation: 处理关联模型的AfterRemove
- onAfterUpdate: 在模型的DAO持久化类中Update事件之后,做些你的业务逻辑
- onBeforeAddAssociation:
- onBeforeCreate:
- onBeforeRemove:
- onBeforeRemoveAssociation:
- onBeforeUpdate:
如果你熟悉Spring的AOP,是不是有种似曾相识的感觉,这就是Liferay7方式的AOP,好处是可以和之前的旧业务处理代码解耦(你可以做一个新的独立的ModelListener工程)
而不是在DAO持久化类或Service中去添加业务代码。
Hook钩子的其中实现方法之一就是基于Model Listeners
Liferay7 BPM门户开发之22: Liferay7模型监听器(Model Listeners)的更多相关文章
- Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发
hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...
- Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)
在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...
- Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)
首先有几个概念需要明确.1.第一个概念是这里的应用程序配置不是写XML之类的配置文件,是类似字典的类型化配置这意味着应用程序配置不只是一个字符串键值对的列表.值还可以有类型,如整数列表,字符串列表,一 ...
- Liferay7 BPM门户开发之24: Liferay7应用程序安全
整理中...... Resources, Roles, and PermissionsPortal Access Control List (PACL) Custom SSO Providers Au ...
- Liferay7 BPM门户开发之1:Liferay7开发环境准备
liferay sdk下载 \IDE下载 \ Tomcat 安装细节不在此赘述 网上有很多. 只讲核心关键坑点 进入2016年,从Liferay6.2.5 ga6版本开始,到7.0 ga3,在ivy环 ...
- Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...
- Liferay7 BPM门户开发之17: Portlet 生命周期
Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...
- Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成
写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...
- Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型
开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp <%@ include file="/init.jsp" %> <h3>${RET ...
随机推荐
- Halcon常用算子02
threshold:阈值分割 minGray<=g<=maxGray select_shape:选取特定区域(Region) regiongrowing:区域生长法分割图像获得 ...
- 微擎系统jssdk系统快速签名变量
jssdkconfig = {php echo json_encode($_W['account']['jssdkconfig']);} || { jsApiList:[] }; jssdkco ...
- C++中绝对值的运算
首先,输入-42333380005结果取出来的绝对值却是616292955. 开始我以为是long型的取值范围有问题,就把long型全部改为long long型的了,结果还是一样,就觉得绝对值这个函数 ...
- pymongo操作mongodb
此验证中只开启两个mongodb节点,可以连接任意节点,以下操作不涉及读写,不涉及连接那个节点 mongodb连接: from pymongo import MongoReplicaSetClient ...
- 每月IT摘录201903
技术 1.在开发高并发系统时,有很多手段来保护系统,如缓存.降级.限流等.缓存可以提升系统的访问速度,降级可以暂时屏蔽掉非核心业务,使得核心业务不受影响.限流的目的是通过对并发访问进行限速,一旦达到一 ...
- KBEngine 编译出现 MSB802 无法找到v140的生成工具
我用的vs版本是vs2017professional版本,并未安装所有的工具 在编译kbengine源码时候出现 MSB802 无法找到v140的生成工具错误 修复办法在菜单栏选择 工具--> ...
- 281. Zigzag Iterator z字型遍历
[抄题]: Given two 1d vectors, implement an iterator to return their elements alternately. Example: Inp ...
- NFS服务简介与配置
NFS简介 NFS特点 NFS(Network File System)即网络文件系统,是FreeBSD支持的文件系统中的一种,它允许网络中的计算机之间通过TCP/IP网络共享资源 在NFS的应用中, ...
- Calendar类常用需求方法
经常处理一些日期相关的信息,Calendar类是处理日期的常用类,写下几个方法,不用重复造轮子了. 1.求上一天,下一天的日期 Date now = new Date();Calendar c = C ...
- 牛客练习赛42 C 反着计算贡献
https://ac.nowcoder.com/acm/contest/393/C 题意 给你一个矩阵, 每次从每行挑选一个数,组成一个排列,排列的和为不重复数字之和,求所有排列的和(n,m<= ...