分享对门户研究坎坷路程

来源:互联网 发布:第三方打电话软件 编辑:程序博客网 时间:2024/06/05 08:37

为了重构公司的门户系统,花了很长一段时间在门户技术研究上。其中的坎坷只有自己知道。下面我就来分享一下各个技术的研究和个人想法:

原先公司门户使用的liferay开源项目进行的二次开发。来适应公司的门户需求。

大部分人给出的Liferay6.2主要优点是

1)使用第三放的开源项目,如Hibernate等。特别是前台界面部分使用了Struts技术;
 (2)支持包括中文在内的多种语言;
  (3)支持较多的先进技术,如Web Services、EJB, JMS, SOAP, XML等;

Liferay的缺点是它缺乏一个简单清晰可拓展的架构设计,整个架构比较复杂且庞大;Struts1.1本身并不支持JSR168,所以Liferay 在实现诸如上下文共享等问题上显得十分笨重且没有从根本上解决这些问题;portlet设计也显得比较凌乱。此外,如果你的门户系统准备应用于商业用途,你需要购买License。基于它进行二次开发比较困难。

 

所以我面临的就是三个选择

1.升级原先的liferay6.27.0
2.寻找更适用的开源门户项目来进行二次开发。

3.用合适的一些语言框架来自己实现开发。

 

第一步肯定是来搭建liferay7.0的环境了。具体步骤以及一些测试代码就不细说了,没有先人的开发经验,必须去官网找英文文档来看,其中官网的一个坑我必须提一下,就是搭环境编译代码的时候需要配置python环境,然而官网并没有给出任何说明,我傻乎乎的在那一直报错。看了半天的日志才找到需要python环境。我也是醉到了,哎,下面我还是来讲讲我的使用心得:

新版的liferay7.0,采用了各种更新的工具,以及支持ant,maven,gradle三大构建工具。在portlet开发,交互和扩展上面没有太大的问题,最新版的前端使用freemarker区别于JSP。拓展了更多的主题开发,在更改主题的时候有如下问题:

1、前端环境部署反应慢,门户网页至少几分钟的时间才能看到效果,对调试来说是个不容忽视的问题。

2、在环境配置的时候因为有区别于liferay6.2版本。简化了主题的开发,对规则的理解和获取途径难度较大。必须查看官方英文文档,在理解上有较大的偏差。

3、交流了网上很多正在使用liferay开发人员的人员,大多数人还是采用liferay6.2来开发,liferay7.0的相关资料缺乏,6.2版本在主题拓展上很容易产生性能问题,很难做到界面优化。

4、在建立各个portlet的时候和原先版本区别不大,基本没啥问题!

 


第二步又找了很多的开源项目,不是java写的第一个排除,在开源社区排行榜上去实践,一句话还没liferay好用,文档更少。我又试着去GitHub找找有没有人分享关于门户的代码。还真有:说明还挺详细的。我也搭建过可行的,不过是他们公司的项目,有属于自己规则的。我分享下地址

https://git.oschina.net/xautlx/s2jh4net

 

第三步在遇到的一些问题和实用性我权衡后,我开始考虑选用一些前端框架来实现门户,首先门户的的三大特点:

A. Personalization (个性化):用户自己定制自己所需页面        

B. Single sign on(单点登陆):一处登陆,处处通行        

C. Content aggregation(内容聚合):不同来源的信息整合到一个页面中

我们使用liferay就是为了使用门户的C内容聚合,就是liferay的portlet开发。如果能找到能够制作portlet方面的前端框架,完全可以使用该框架来重新开发门户。

jQuery UI Portlet

在用这个之前我找过extjsportlet。这东西用了下太重了。Extjs对于灵活的我压根不会去喜欢,

jQuery UI Portlet的由来:因为现有的Portlet插件都太难用,而且很多系统样式风格不兼容,一般公司的项目前端都是基于jQuery以及jQuery UI 框架开发的,所以为了更好的保持风格统一才有了jQuery UI Portlet

主要功能:

1.按照列的方式生成Portlet

2.支持各种回调:创建、读取内容、刷新等

3.支持多种内容获取方式:纯文本、functionajaxjson

4.支持加载Javascript文件,可以为每个portlet配置多个js文件路径

5.支持单视图模式

挺不错的东西。

 

接下来寻找portlet的制作,和实现portlet之间的相互通信,以及环境的需要:

 

1JSR168

Portlet 是部署在容器内用来生成动态内容的 Web组件,与 servlet类似,portlet的整个生命周期从 initdestroy的过程都在 portlet容器中进行。Java Portlet Specificationportlet API、 标准化用户数据、参数设置、portlet请求以及响应、部署、打包以及安全等方面都做了详细的规定,以此来实现 portlet之间以及 portletportlet容器之间的交互和协作。 Java Portlet Specification 1.0,Java Specification RequestJSR168发布于 200310月。

2)JSR286

JSR 168 在业界受到广泛支持,且得到开放源码支持。标准和产品的第一个版本存在一定的缺陷,仅支持最基本的用例,在功能上有一些限制。而且Java Portlet Specification V1.0 也存在这种情况,因此,经过三年之后,大多数支持Java Portlet Specification V1.0 的门户产品都提供一些附加扩展,以支持更高级的用例,这些附加的扩展造成了各个门户产品的标准不统一,彼此间的交互协作成了不可避免的问题。为了更好地规 范portlet 开发,以适应业界发展,并提供适应于最高级别用例的标准解决方案,从而为这些高级功能提供互操作性,在2005 11 月开始了Java Portlet Specification V2.0(称为JSR 286)的开发,在2008 年 正式发布。JSR 286最终草案兼容JSR 168,并完善了JSR 168 的部分功能,并提供了诸多JSR 168 所没有的新特性,例如资源服务、事件、portlet过滤器、共享呈现参数及 portlet窗口等。与 V1.0类似,V2.0基于 J2EE 1.4,因此可让Portlet 使用J2EE 1.4 增强(如JSP 2.0)。下面是该新规范的一些主要功能及特性:

资源服务:一种新的通过 portlet 呈现资源的方式。

事件:通过发送事件和接收事件来实现 portlet 之间的通信。

Portlet 过滤器:与 servlet过滤器类似,根据 Portlet请求和响应动态的呈现内容的变换。存在以下四种类型的 portlet过滤器:

Action 过滤器

Render 过滤器

Resource 过滤器

Event 过滤器

共享呈现参数:除了 portlet 私有的呈现参数之外,新增了可以在portlet 之间共享的呈现参数。

Portlet 窗口:提供 portlet窗口 IDportlet使用。

为实现portlet之间的通讯,找了很多典型的案例,不过这方面的东西是真少,不用google还真找不到,下面这个文章还是很吸引我。

《DWR简化portlet之间的ajax通信》:

http://zqsmm.qiniucdn.com/data/20060906115921/index.html

这是解决portlet之间通信的问题的。

 

接下来我开始寻找放置portlet的容器:

ApachePortals项目中有一个名叫Pluto的子项目很吸引我,它致力于构建一个简单的Portlet Container,让程序员可以Deploy并运行所开发的PortletPluto相对于BEAIBM等大公司提供的Portal Server而言,尽管显得功能简陋,但是作为Portlet API的一个参考实现还是挺有权威的,其简单性也正好让我们更加关注Portlet的本质。更重要的是,它是开源的,大家都很容易从网上找到它。于是,Pluto就成为我们进行实践的不二之选了。

然后经过项目部署,portlet开发实现。发现Pluto就是一个类似门户的东西。Pluto是最简单的门户,对portlet的支持和扩展性很好,但是对主题方面,和门户的功能方面并有没有提供很好的二次开发,这就是简化版的开源项目了。很多开源项目都是基于这东西来实现的,如EXO platfrom还是比较灵活的。


其中还有很多开发项目名字记不起来了。Liferay能在开源门户项目中排第一还是有一定道理的。

 

 

 

 

 

0 0
原创粉丝点击