Service Builder是Liferay为业务开发而设计的模型驱动(model-driven)平台工具,提供一系列的实体类.数据持久化.服务相关的代码自动生成服务.支持Hibernate and Spring集成,缓存处理,动态查询等特性.令人惊讶的是,Liferay所有的持久化代码.Servie接口代码都是由Service Builder自动生成的,可见其自动化程度之高. 注意:Liferay的数据持久化开发不是必需用Service Builder,你可以直接用JDBC.JPA等任何技术…
Asset框架用于将您开发的门户内容添加Liferay的核心系统功能.打个比方,你开发了一个事件TodoList管理的插件,在列表显示的时候,你可以集成Asset框架,让你的自定义内容支持Tag标签.分类.评论.星标等功能.它可以关联任意的门户内容,文本.Int.Image.documents.blog entries, bookmarks,或者任何您自己定义的内容. 这带来门户的一致关联性,非常有益. Asset框架主要有下列功能: 1.关联Tag标签到自定义的内容类型,可以创建或关联已存在的…
Liferay Message Bus提供了松耦合的消息发送接收机制(生产和消费的设计模式),用于本地服务,不支持远程服务,支持集群. 主要用途: 两个或多个插件之间的通讯. 在事件中发送搜索索引,比如传递工作流的实例索引. 发送订阅邮件或系统消息,比如在工作流中的待办到达时,给用户发送提醒消息. 定时任务消息发送,比如在工作流中的定时任务启动时,给用户发送提醒消息. 运行异步过程 主要分几个组件 Message Bus: 管理消息发送: Destinations: 目标终端地址,用于注册监听者…
hook开发是Liferay客制扩展的一种方式,比插件灵活,即可以扩展liferay门户,也能对原有特性进行更改,Liferay有许多内置的服务,比如用hook甚至可以覆盖Liferay服务. 可作为系统服务挂钩(Liferay Service Hook),还有其他类型的hook... Liferay6.2 时的hook开发比较有限,而在Liferay7则大为不同,OSGi services的彻底改进至Liferay的底层模型框架,使得Liferay可以支持更多的定制扩展!OSGi plugin…
Portlet 生命周期 init() =〉 render() =〉 processAction() =〉 processEvent() =〉 serveResource() =〉destroy() init() 在Liferay容器部署portlet时,启动portlet实例化 init有两个写法: public void init() throws PortletException public void init(PortletConfig config) throws PortletEx…
开发目的: 实现通用流程自动化处理(即实现不需要hardcode代码的bpm统一处理后台,仅需要写少量前端html form代码和拖拽设计BPM定义) 既可独立运行或可依托于Liferay或依托其它门户系统(使用portlet规范技术实现)运行: 先实现一个JSP + Servlet版的通用流程处理,将来迁移到Portlet 迁移工作将保留大量的前后端代码,仅需要改动少量的注解. 考虑到Liferay的客户端体系是bootstrap+jQuery(对移动端的支持非常好),JSP的实现也用了这两者…
写到第12章才出现Liferay的内容,希望可以厚积薄发. 我们的目标是不使用不维护Activiti的用户组织架构,只维护Liferay的体系,这样的好处是非常明显的,即不用做组织架构的同步工作. 原理是继承实现org.activiti.engine.impl.interceptor.SessionFactory 首先继承用户实例,用liferay的用户模型 import org.activiti.engine.impl.persistence.entity.UserEntity; public…
在liferay7中开发不依赖Service Builder的对外服务类,非常简洁,只需要2点注解: 在类的前部定义: @ApplicationPath("/PathXXX") 方法前定义: @GET @Path("/ActionXXX") @Produces("text/plain") 例子:得到注册用户 import com.liferay.portal.kernel.model.User; import com.liferay.portal…
Liferay内置的工作流是企业版的功能,虽然简单粗糙,但依然不支持社区版.既然要用更强大的Activiti来替代它,那就非常有必要学习一下内置工作流的一些思想,以便借鉴. 它的特点: 实体的工作流操作可以通过service layer进行集成: 需要添加4个额外的字段来跟踪流程状态: 通过Service Builder来建立字段,然后更新service layer: 视图层UI可以显示实体的工作流状态. 实体集成逻辑 比如,发布一个实体类的工作流支持,首先添加注解: @Component( p…
Expando 是liferay的一种自定义表格扩展的方式,从5.0就已存在 , 可以在运行时新建表格\字段\行\值. 这是一种Service Builder之外的轻量级替代扩展方式,不必像Service Builder那么繁琐, 实现的具体技术实际上是列转行,其中ExpandoValue有点像Activiti的act_ru_variable 主要有4种接口,分别是表\行\列\值 ExpandoTableLocalServiceUtil ExpandoRowLocalServiceUtil Ex…