本教程以 liferay6.2官方教程为基础翻译而来,有不对处,请赐教,更正,谢谢~  

   作者:www.elearn007.com

     

  该开发教程需要你预先学习portal的基本知识,及具备一定的使用liferay网站管理的经验,至少理解什么是Liferay和如何应用Liferay进行日常的站点管理。

   本章节总结了如何为liferay开发应用和如何自定义liferay内置的应用,主题和相关配置,最后我们会了解下相关的开发插件的技术和工具。

1-1节 为Liferay开发应用程序

  

  Wikipedia上是这样定义一个WEB应用的:可以成功通过internet或intranet 来访问的应用。一个portal应用是一个可以与其他应用并存的web应用。Portal借助portal平台所提供的功能可以达到减少开发时间成本和一个对用户来说一致的使用体验。

  作为在Liferay Portal之上进行开发应用的程序员,你会问最好的快速开发的路径是什么?Liferay支持两种主要的基于标准技术的方案:portlets和OpenSocial gadgets.

Portlets

  Portlets是用java编写的小型的web应用程序,并且可以当作一个web页面的一部分存在,任何portal应用的核心一定是它的portlets,因为它们包含了实际的功能,一个portlet容器紧紧是让一组合适的portlets组合在一起作为一个完整的页面出现。

  因为它们完全是自包含的,portlets可以以最小的耦合来扩展 liferay,并且也是版本升级向前兼容性最好的选择,它们以插件的形式,热部署运行在liferay实例上。一个单独的插件可以包括多个portlets,这样允许我们对功能进行细粒度划分,然后这些功能片段重新组合成一个功能相对完整的web页面。Portlets可以使用任意的JAVA WEB框架,只要这些框架支持portlet 开发即可,包括Liferay指定的框架:MVC Portlet 和Alloy Portlet.因为portlets拥有针对java平台的完整技术和库,因此可以建立复杂的应用。

OpenSocial Gadgets

OpenSocial Gadgets 通常是小的应用,用浏览器端的技术编写,例如HTML,JavaScript.类似portlets,OpenSocial Gadgets提供了标准的方法来为portal环境开发应用。从技术方面看,这里的最大区别是不需要处理后台技术例如J2EE,Ruby,Python等等。另外的区别OpenSocial Gadgets主要用来实现社交应用,而portlets则可以实现任意类型的应用。因此,OpenSocial gadgets除了包括一组实现正常应用的api和技术外,也包括一组允许应用从社交程序中获取用户档案文件,活动信息,及社交关系信息等。

 

OpenSocial gadget在liferay以下面的形式存在:

 

远程gadget:在远程服务器上执行,但是在另外的平台程序中展现获取的信息,远程gadget不是非常简单,但是portal依靠远程的服务器来让gadget来工作,在局域网环境下,因为缺少对internet的完全权限的访问,不推荐使用远程gadget.

 

本地gadget:部署到liferay server与portlets类似,因为一个gadget在一个xml文件中定义,下载该文件就可以完成对该gadget的部署。

 

一旦你保存了一个新的gadget,它就可以让管理员添加到站点的页面上。

Liferay允许你暴露portlets给外部,当作一个OpenSocial gadgets,这意味你可以开发一个portlet,然后让任何人来访问你的portlet,并且当作一个远程的remote gadget添加到其他的portals上的页面上,或是社交网络上。

 

复用已经存在的WEB应用

如果你有个没有实现portlet的应用,或是OpenSocial gadget,应该怎么办?你有下面的几个选择:

重写应用为一个portlet.

生成简单的portlets负责与应用交互,并向最终用户提供服务。

生成一个OpenSocial对应用进行封装,gadget可以使用IFrame来在一个portal页面上展示应用的一部分。

生成一个portlet来整合远程应用可以使用IFrame或是一个http代理(例如使用Liferay的WebProxy portlet),这种方案需要在portal和应用之间实现单点登录。

如果该应用是使用struts1.x 实现的,可以经过小的改动转为portlet.

如果该应用是jsf来实现的,可以经过小的改动来转为portlet.

得到支持的技术框架

  Liferay做为一个平台,可以很好的与任意的java技术相兼容,这需要感谢portlet和j2ee设计架构标准,每个portlet应用都可以使用它自己的一组库和技术模块,不管它们是否被liferay采用。该部分我们重点推荐portlet 组件;其他类型的插件则有较多的限制,例如Ext插件只允许使用与liferay核心代码使用的库相兼容的库。

 

因为可供选择的可用框架和技术非常广泛,选择合适的框架和技术就比较困难,我们在这里提供些建议以帮助你按需选择最好的框架:

使用你熟悉的:如果你已经熟悉一个框架,那么可以作为你的第一个选项(struts2,Spring MVC,PHP,Ruby,等等)

合适你的真正需求:基于组件的框架例如jsf,vaadin和Google Web Toolkit(gwt),对于类似桌面的应用比较好,而mvc框架另一方面则提供了灵活性。

当不确定的时候,选择相对简单的解决方案:portlet应用通常要比独立的web应用简单,当不确定的时候,选择简单的框架例如 Liferay MVC portlet或Alloy portlet.

前面提到的一些框架包括它们自己的JavaScript代码来提供高交互性,例如使用gwt,vaadin和实现JSP的案例(例如ICEfaces或Rich Faces).你也许会写或者应用一个JavaScript脚本库。你可以结合Liferay 来使用任意的脚本库,例如jQuery,Dojo,YUI,Sencha(以前叫做ExtJs),和Sproutcore.

 

从版本6开始,liferay也有了自己的库叫做AlloyUI,是基于YUI3的。AlloyUI有一大组组件来建立现代用户界面。Liferay的核心portlets都采用了AlloyUI.你可以在你自己的portlets里用AlloyUI或是使用另外的js库,这都不会引起什么部署后应用上的的冲突。

 

Liferay的服务构建器可以为数据库持久化自动生成类和接口及服务层。它生成了实现数据库访问的绝大多数的代码,让你在更高层面上关注实现方案。你可以使用你的业务逻辑来实现本地接口,而结合你的权限检查来实现远程接口。在portal实例上的对象与本地接口交互,而外部的对象与远程接口交互,通过JSON,SOAP和 Java RMI.

 

除了上面提到的方案,还有很多框架和库让你处理持久化,远程服务连接等,liferay在使用哪种框架上没有强制要求,你需要做的是为自己选择最好的工具和架构。