`
wyuch
  • 浏览: 72811 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于Portal、JSR168的一些想法和疑惑

阅读更多
最近因项目的需要,计划做一个Portal产品。初略地试用了几个Portal产品,看了一堆的关于Portal和JSR168的文章,还不是太明白,但已经有了一些想法和疑惑,恳请熟悉Portal的朋友指点。

首先,我理解Portal产品可以分为两部分。一部分是Web应用,提供了诸如页、布局、主题等功能,能够添加、删除Portlet;另一部分即是Portlet容器,两部分共处于一个Servlet容器中。

而Portlet是一个符合JSR168标准的类,是运行于Portal上的真正代表业务逻辑的部件,负责展现内容、处理请求。

这里有两个疑问:
一是Portal通常是改造了的Servlet容器,例如JetSpeed、LifeRay都对容器作了修改,几个厂商的Portal就更不用说了。为什么Portal不能作为单独的Web应用部署,以便于做到与中间件无关?这个问题可能是因为我还了解得比较浅,没有具体去实现javax.portlet中的接口,希望了解的朋友先指点我一下。

二是根据我目前的了解,Portlet成了最重要的资产,是实现集成的关键,一个Portlet对应着一个业务系统的某部分功能。但现实中这样做似乎不可行,例如Portal要集成财务系统的一个功能,以便于显示当前用户的薪资情况,但薪资的计算有赖于财务系统的数据库和一系列的类,并不容易单独抽取出来形成一个Portlet。

我目前有一个简单的想法:
1、各个系统(假定都是J2EE吧)将需要集成到Portal中的功能做成一个小的JSP页面(不妨称之为伪Portlet),这个小页面和业务系统处于同一个容器,根据不同的用户和请求参数输出不同的HTML片断。
2、一个类似portlet.xml的配置文件将这些JSP页面注册到Portal,Portal根据portlet.xml中提供伪Portlet的列表,用户从中选择并加入到Portal的页中。
3、用户访问Portal时,Portal将用户凭证(假定类似于Kerberos的票据)、用户对Portlet执行的操作等信息作为参数提交给伪Portlet对应的URL,伪Portlet在业务系统内部运行并返回HTML片断。
4、Portal将同一个页上用户定义的所有Portlet的HTML片段一一展现,并实现拖拽、最小化、删除Portlet、添加Portlet等一系列动作。稍微扩展一些也可以实现Edit、Help、Maximize之类的动作。

按照我上面的想法,似乎也可以很好的集成各个业务系统,实现这样一个伪Portlet的成本比从业务系统抽取逻辑实现一个JSR168的Portlet要小得多,用户的使用感受和JSR 168基本一致。但在这个想法中,实际没有Portlet容器的位置,也不需要Portlet规范,还可以集成AJAX,很容易地实现Portlet的单独更新。那么这个想法有没有人尝试过,具体实现会有什么问题、难点或瓶颈?
分享到:
评论
88 楼 miaow 2010-04-30  
抛出异常的爱 写道
大家都知道用portlet来集成portal producter是很方便的。
那你要集成的不是portal producter项目怎么办?

没太看明白问题,猜一下哈。
没有一定的解决方法吧。记得前几年折腾oracle portal,两条路,都挺龌龊的:
1,改原应用。只是jsp不一样的另搞一套。oracle顾问的随口建议。
2,用个抓页面的portlet。这个龌龊在经常抓不对,特别是对ajax就是个杯具,而且没法指望有太大改进。
87 楼 抛出异常的爱 2010-04-29  
nmvr2600 写道
wyuch 写道

还是推荐用Spring的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Spring,那么请再多读一遍吧。
还是推荐用Hibernate的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Hibernate,那么请再多读一遍吧。
还是推荐用JAVA的同学把JDK的文档好好研究一遍。如果看完了你还是不知道什么是JAVA,那么请再多读一遍吧。


首先我不是什么高人,只所以把这个两个jsr的文档提出来是因为前面太多讨论都是和到底什么是portlet这个问题有关系。很显然,有些人对到底是portlet并不清楚,而这个两个jsr就是在讲portlet的规范,它清晰的说明了什么是portlet,以及portlet特性。另外jsr并不会讲它应该怎么实现和怎么用。所以和你后面举的这些例子中文档与产品的关系并不相同。

好了,不管怎么样,愿不愿意研究这两个文档是你的自由,我只是提醒下它们能帮助你理解portal的问题。你有时间和精力和我在这里争论我回帖态度的问题还不如多去看两眼文档。

大家都知道用portlet来集成portal producter是很方便的。
那你要集成的不是portal producter项目怎么办?
86 楼 IAmOK 2010-02-25  
楼主的态度让这贴火热的讨论死掉了
85 楼 infante_yin 2009-08-21  
大家开发Portlet,有没有一个交流群啊?分享一些经验...最近我也在学习Liferay Portlet...
84 楼 wyuch 2009-08-11  
nmvr2600 写道
wyuch 写道

还是推荐用Spring的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Spring,那么请再多读一遍吧。
还是推荐用Hibernate的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Hibernate,那么请再多读一遍吧。
还是推荐用JAVA的同学把JDK的文档好好研究一遍。如果看完了你还是不知道什么是JAVA,那么请再多读一遍吧。


首先我不是什么高人,只所以把这个两个jsr的文档提出来是因为前面太多讨论都是和到底什么是portlet这个问题有关系。很显然,有些人对到底是portlet并不清楚,而这个两个jsr就是在讲portlet的规范,它清晰的说明了什么是portlet,以及portlet特性。另外jsr并不会讲它应该怎么实现和怎么用。所以和你后面举的这些例子中文档与产品的关系并不相同。

好了,不管怎么样,愿不愿意研究这两个文档是你的自由,我只是提醒下它们能帮助你理解portal的问题。你有时间和精力和我在这里争论我回帖态度的问题还不如多去看两眼文档。


唉.....

为什么是我来对你的态度发表意见,而不是别人呢?别人实际做过Portal实施的,对你认为他们“到底是portlet并不清楚”的判断都没有意见,我这个没有还没有做过Portal的却来表示意见,看来我得反思。

可能是我泡论坛的时间较少,我还是不喜欢这种方式的推荐、提醒、帮助,还是比较喜欢言之有物的回复,能够说明白是哪里不清楚,能够讨论具体的问题,而不是高人似的对别人下结论:“不知道什么是portlet、对到底是Portlet并不清楚”云云,没有任何实质性内容。

当然这也是你的自由。

好了,你说的也很有道理,我与其在这里回帖,还不如去干点别的什么。
83 楼 nmvr2600 2009-08-07  
wyuch 写道

还是推荐用Spring的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Spring,那么请再多读一遍吧。
还是推荐用Hibernate的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Hibernate,那么请再多读一遍吧。
还是推荐用JAVA的同学把JDK的文档好好研究一遍。如果看完了你还是不知道什么是JAVA,那么请再多读一遍吧。


首先我不是什么高人,只所以把这个两个jsr的文档提出来是因为前面太多讨论都是和到底什么是portlet这个问题有关系。很显然,有些人对到底是portlet并不清楚,而这个两个jsr就是在讲portlet的规范,它清晰的说明了什么是portlet,以及portlet特性。另外jsr并不会讲它应该怎么实现和怎么用。所以和你后面举的这些例子中文档与产品的关系并不相同。

好了,不管怎么样,愿不愿意研究这两个文档是你的自由,我只是提醒下它们能帮助你理解portal的问题。你有时间和精力和我在这里争论我回帖态度的问题还不如多去看两眼文档。
82 楼 wyuch 2009-08-06  
nmvr2600 写道
虽然这个帖子了提到了这么多次JSR168,但是不晓得有多少同学真的去把这个JSR的好好看过了,portlet的概念和特性这个文档都描述的很清楚。如果说以前portal产品对这个标准支持的不是很好,但是现在基本上都支持的不错。
另外portlet 2对应的jsr是286,不是268,老是有人讲错。286里有一些新的特性,尤其是针对portlet之间的交互。现在portal产品基本上也都支持这个标准了。

还是推荐做portal的同学把这两个jsr的文档好好研究一遍。如果看完了你还是不知道什么是portlet,那么请再多读一遍吧。


无语......

说实话,不太喜欢这样的交流风格,毕竟大家是要讨论具体问题,而这样的回复除了透露出一股高人的味道,对别人并没有帮助。当然,也没有人有义务一定要去帮助别人。而且,虽然我没有“好好研究一遍”两个JSR文档,我只看了一下JSR 168,但我没有找到关于我的想法和疑惑的回答,如果你能直接指出,我将非常感谢你提供的这条捷径。

最后那句话真是可以放之四海而皆准:

还是推荐用Spring的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Spring,那么请再多读一遍吧。
还是推荐用Hibernate的同学把它的文档好好研究一遍。如果看完了你还是不知道什么是Hibernate,那么请再多读一遍吧。
还是推荐用JAVA的同学把JDK的文档好好研究一遍。如果看完了你还是不知道什么是JAVA,那么请再多读一遍吧。
81 楼 nmvr2600 2009-08-06  
虽然这个帖子了提到了这么多次JSR168,但是不晓得有多少同学真的去把这个JSR的好好看过了,portlet的概念和特性这个文档都描述的很清楚。如果说以前portal产品对这个标准支持的不是很好,但是现在基本上都支持的不错。
另外portlet 2对应的jsr是286,不是268,老是有人讲错。286里有一些新的特性,尤其是针对portlet之间的交互。现在portal产品基本上也都支持这个标准了。

还是推荐做portal的同学把这两个jsr的文档好好研究一遍。如果看完了你还是不知道什么是portlet,那么请再多读一遍吧。
80 楼 wyuch 2009-08-05  
hanjiangit 写道
httpclient 能做到sso吗 能和cas联合么


当然可以呀,Portal可以使用CAS的代理模式,每次通过httpclient访问业务系统时在URL中带上ProxyTicket即可。
79 楼 hanjiangit 2009-08-05  
httpclient 能做到sso吗 能和cas联合么
78 楼 wyuch 2009-07-31  
popoer 写道
其实做整合项目,光一个portal是解决不了问题的,我做过的项目,一般都会先做好统一认证、身份管理,这两个问题解决了,再做数据、应用的整合就轻松多了。

另外,做企业门户多多少少肯定都会涉及到业务系统的改造,有时候,管理协调能力的要求比技术要求高多了,搞不好就是个大坑,大家一定要小心了!


确实是经验之谈。
77 楼 wyuch 2009-07-31  
popoer 写道
openeyes 写道
arkxu 写道
openeyes 写道
再问一个问题,CAS这种方式如果多个应用间用户名不同怎么办?典型的就是Portal和下面的某个应用用户名不一致需要影射的


CAS就是做多个系统用户集成的,不管两个系统在世界什么地方 ;)
简单的理解就是google的用户登陆,或者yahoo的用户登陆。可以提供不同域名,多个应用,或者父/子系统的authentication and authorization.

   谢谢 arkxu的回复,我的意思是比如Portal和OA两个应用,Portal中的用户是usera, 对应OA中的用户是usera1,我看了yale cas的示意图,如果我用usera登陆了cas,那么cas会返回usera的信息给portal,那么我访问OA的时候怎么获得usera1这个用户信息呢?
   第一次了解CAS,请多指教,再次谢谢


CAS其实是解决不了这个问题的,要解决这个问题,还得上一套身份管理系统,如IBM的tivoli identity manager。

对老的系统账号不一致问题,其实归根到底还是要做映射,只是有身份管理系统,可能会方便些。

建了portal以后,账号最好就在身份管理中心这里统一维护了,省很多事。



是的,光CAS是不行的。不过对CAS稍作扩展引入身份映射也是不难的,只需在Ticket验证时返回相应业务系统对应的用户名即可。
76 楼 popoer 2009-07-31  
其实做整合项目,光一个portal是解决不了问题的,我做过的项目,一般都会先做好统一认证、身份管理,这两个问题解决了,再做数据、应用的整合就轻松多了。

另外,做企业门户多多少少肯定都会涉及到业务系统的改造,有时候,管理协调能力的要求比技术要求高多了,搞不好就是个大坑,大家一定要小心了!
75 楼 popoer 2009-07-31  
openeyes 写道
arkxu 写道
openeyes 写道
再问一个问题,CAS这种方式如果多个应用间用户名不同怎么办?典型的就是Portal和下面的某个应用用户名不一致需要影射的


CAS就是做多个系统用户集成的,不管两个系统在世界什么地方 ;)
简单的理解就是google的用户登陆,或者yahoo的用户登陆。可以提供不同域名,多个应用,或者父/子系统的authentication and authorization.

   谢谢 arkxu的回复,我的意思是比如Portal和OA两个应用,Portal中的用户是usera, 对应OA中的用户是usera1,我看了yale cas的示意图,如果我用usera登陆了cas,那么cas会返回usera的信息给portal,那么我访问OA的时候怎么获得usera1这个用户信息呢?
   第一次了解CAS,请多指教,再次谢谢


CAS其实是解决不了这个问题的,要解决这个问题,还得上一套身份管理系统,如IBM的tivoli identity manager。

对老的系统账号不一致问题,其实归根到底还是要做映射,只是有身份管理系统,可能会方便些。

建了portal以后,账号最好就在身份管理中心这里统一维护了,省很多事。
74 楼 openeyes 2009-07-31  
arkxu 写道
openeyes 写道
再问一个问题,CAS这种方式如果多个应用间用户名不同怎么办?典型的就是Portal和下面的某个应用用户名不一致需要影射的


CAS就是做多个系统用户集成的,不管两个系统在世界什么地方 ;)
简单的理解就是google的用户登陆,或者yahoo的用户登陆。可以提供不同域名,多个应用,或者父/子系统的authentication and authorization.

   谢谢 arkxu的回复,我的意思是比如Portal和OA两个应用,Portal中的用户是usera, 对应OA中的用户是usera1,我看了yale cas的示意图,如果我用usera登陆了cas,那么cas会返回usera的信息给portal,那么我访问OA的时候怎么获得usera1这个用户信息呢?
   第一次了解CAS,请多指教,再次谢谢
73 楼 arkxu 2009-07-31  
openeyes 写道
baron 写道


以我做过的Portal项目来说,Portlet基本都是用的IFrame方式,SSO用的是Sun Access Manager,基本流程是这样的:用户通过AM登录,AM在本地将一个随机串作为令牌存入会话Cookie,所有被集成的应用在收到HTTP请求后会从Cookie抓取令牌往AM验证得到用户身份完成授权,整个过程不需要页面跳转。


请问兄台,AM的Cookie在其他应用中怎么访问啊?部署在不同的context path下的应用不能共享cookie的吧?


谈到实现方式CAS的authentication可以看这里(有图):
http://www.jasig.org/cas/cas2-architecture

最简单的认证方式就是:
当你用cas的login窗口登陆之后,会在认证服务器留下记录,系统知道你是谁。然后redirect到你想访问的应用同时url里会带上一个只能使用一次的ticket, app需要拿到这个ticket再到认证服务器验证一下这个ticket是否有效,这个访问者是谁等等信息。都通过了,你就可以访问这个应用了。所以和domain,等等都是无关的。
72 楼 arkxu 2009-07-31  
openeyes 写道
再问一个问题,CAS这种方式如果多个应用间用户名不同怎么办?典型的就是Portal和下面的某个应用用户名不一致需要影射的


CAS就是做多个系统用户集成的,不管两个系统在世界什么地方 ;)
简单的理解就是google的用户登陆,或者yahoo的用户登陆。可以提供不同域名,多个应用,或者父/子系统的authentication and authorization.
71 楼 arkxu 2009-07-31  
openeyes 写道
arkxu 写道
楼主的问题不太看的懂。觉得楼主最好多看看企业里使用portal的人,他们的系统是什么样子的。

对于技术问题。主要的实现就是一个所谓的portletcontainer, 依据jsr168. 当然168有很多的限制还有待268的改进。所以基本上每个公司都基于168有自己的扩展来满足那些还不被支持的标准。比如portlet和portlet之间的通信,portlet和portal之间的通信。

要学习jsr168或者268的实现,建议你看一下 pluto 的源代码,只是一个最最简单最最纯粹的portlet container。这个算是必经之路。



  我们的需求如下:
      现有OA,PA,IRB,....多个系统已经在用,其中OA是domino开发, PA, IRB都是j2ee应用
      现在要上一个门户,将OA中的待办文件、最新邮件等,IRB中最新资源列表集成到portal中,
   要求选中portal中的某个待办文件可以进入待办文件的办理流程(这个流程是在OA中的), 点击
   某个资源则可以查看该资源的详细内容。
      PA则只要在Portal中放置一个链接,点击链接可以直接登录PA就可以了。
  问题是基于工作量的原因,我们现在不想在Portal中重新开发待办文件的处理流程,只需要点击能跳到OA应用中去处理就可以了,也不想在Portal中实现详细资源查看这个功能,这中要求用什么方式集成比较好?(我们现在用iframe)

  谢谢
  


嗯。你们这个是一个典型的portal的应用。比较常见常见的需求。

这些系统都是相互独立的。 我的建议是你们先选择一个portal产品,比如liferay或者sun的portal(好处是开源的)。然后把现有系统的表现层wrap成portlet. 比如可以使用spring portlet mvc framework. http://static.springsource.org/spring/docs/2.5.x/reference/portlet.html

然后在做一个单点登陆,简单的集成(只需要authentication)可以使用CAS(http://www.jasig.org), 如果要求高一点的(authentication and authorization)就用sun的opensso吧。不错的。(这样顺便也把各个系统的用户给统一了,建议使用opends, sun的东西对别家的ldap支持不砸地,主要还是别家ldap功能都比较简单, 自己做schema代价比较高。)
70 楼 baron 2009-07-31  
如果是接入的新系统的话最好在谈接口的时候就强行要求一致,这样大家都比较省事。

实在没法一致的就只有做映射了,比如人力资源系统可能只有工号,那就再提供个服务让他通过用户名提取工号;建映射表也是个办法,不过维护量太大不推荐。
69 楼 openeyes 2009-07-31  
再问一个问题,CAS这种方式如果多个应用间用户名不同怎么办?典型的就是Portal和下面的某个应用用户名不一致需要影射的

相关推荐

Global site tag (gtag.js) - Google Analytics