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)的更多相关文章

  1. Liferay7 BPM门户开发之37: Liferay7下的OSGi Hook集成开发

    hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为 ...

  2. Liferay7 BPM门户开发之34: liferay7对外服务类生成(RestService Get Url)

    在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方 ...

  3. Liferay7 BPM门户开发之25: Liferay7应用程序配置(APPLICATION CONFIGURATION)

    首先有几个概念需要明确.1.第一个概念是这里的应用程序配置不是写XML之类的配置文件,是类似字典的类型化配置这意味着应用程序配置不只是一个字符串键值对的列表.值还可以有类型,如整数列表,字符串列表,一 ...

  4. Liferay7 BPM门户开发之24: Liferay7应用程序安全

    整理中...... Resources, Roles, and PermissionsPortal Access Control List (PACL) Custom SSO Providers Au ...

  5. Liferay7 BPM门户开发之1:Liferay7开发环境准备

    liferay sdk下载 \IDE下载 \ Tomcat 安装细节不在此赘述 网上有很多. 只讲核心关键坑点 进入2016年,从Liferay6.2.5 ga6版本开始,到7.0 ga3,在ivy环 ...

  6. Liferay7 BPM门户开发之10: 通用流程实现从Servlet到Portlet(Part1)

    开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门 ...

  7. Liferay7 BPM门户开发之17: Portlet 生命周期

    Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() ...

  8. Liferay7 BPM门户开发之12:acitiviti和liferay用户权限体系集成

    写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原 ...

  9. Liferay7 BPM门户开发之45: 集成Activiti文件上传部署流程BPMN模型

    开发文件上传,部署流程模板. 首先,开发jsp页面,deploy.jsp <%@ include file="/init.jsp" %> <h3>${RET ...

随机推荐

  1. LINQ之let关键字

    let子句用于在LINQ表达式中存储子表达式的计算结果.let子句创建一个范围变量来存储结果,变量被创建后,不能修改或把其他表达式的结果重新赋值给它.此范围变量可以再后续的LINQ子句中使用. 实例1 ...

  2. Go学习笔记:Win7+LiteIDE+Go+Beego 环境搭建

    安装过程比较简单 1.安装go语言环境: 2.安装git: 3.git bash      安装beego,输入“go get github.com/astaxie/beego”,等待一会儿,在D盘的 ...

  3. node.js中使用 http-proxy 创建代理服务器

    代理,也称网络代理,是一种特殊网络服务,允许一个终端通过代理服务与另一个终端进行非直接的连接,这样利于安全和防止被攻击. 代理服务器,就是代理网络用户去获取网络信息,就是信息的中转,负责转发. 代理又 ...

  4. javaweb开发1.环境配置(javaweb插件下载及tomact在eclips中配置)

    一.下载javaweb插件 1.安装好jdk,下载eclips(Juno版本) 2.打开eclips,安装Web插件和JavaEE插件 3 在Eclipse中菜单help选项中选择install ne ...

  5. 教你用PS快速抠出长发

    抠简单的长发背景时可以利用快速选择工具,十分方便就能抠出来. 这类背景的图片只需要一个工具就行了,没错,只用快速选择工具. 拖到ps,然后选择快速选择工具. 用工具选中大部分的人 选择.选择并遮住 选 ...

  6. Python基础(六)

  7. C#部分试题实例

    1.在C#中,下列选项中自定义方法的语句错误的是().(选择一项) 正确答案:AD 解析:本题考查自定义方法的定义及调用.A项void是无返回值类型,D项定义方法的时候没有写返回值类型:故选AD. 2 ...

  8. To handling editor letter

    一般崔稿信写法: Dear Editor: Sorry for disturbing you. We’re not sure if it is the right time to contact yo ...

  9. Linux 第七天

    软件包管理 1.软件包分类 1)源码包(脚本安装包) 优点: l  开源,如果有足够的能力,可以修改源代码 l  可以自由选择所需的功能 l  软件是编译安装,所以更加适合自己的系统,更加稳定也效率更 ...

  10. android 测试

    Android Monkey压力测试 monkey测试结果详细分析 Android自动化测试工具 UiAutomator使用详解 在Android Sudio中使用Uiautomator 六款Andr ...