该帖已经被评为良好帖
|
|
---|---|
作者 | 正文 |
发表时间:2009-07-30
popoer 写道 portlet容器不能独立于servlet单独部署,大概是和各个web容器对web应用程序的部署管理机制有关的,因为portlet部署时也有很多事件要触发,要做实例化初始化这些操作,而不同的servlet容器对web应用部署时的处理机制是不一样的,而portlet容器需要依赖web容器传递的消息,这就导致必须和servlet容器绑定在一起了。。。
我模模糊糊也是这样猜测的 |
|
返回顶楼 | |
发表时间:2009-07-30
lnaigg 写道 先说说兼容性问题:大部分开源Portal都可以作为一个普通web应用部署,只是因为各个web容器的servlet实现都有所不同,Portal对容器的兼容性也成了很大问题。例如,Jetspeed2移植到weblogic上时就要解决很多问题。所以,想找一个全面兼容各大服务器的Portal很难,起码我没找到。
再说说我所理解的Portal:Portal可以比作一个商场,商场不直接卖东西,只提供一个服务环境、各种基础设施,没招商之前只是一个空壳。Portlet是就是商家,所以“Portlet成了最重要的资产”,这个是很正确的。 其实,不管哪个厂商的Portal,其实都是只做两件事情:页面布局和解析Portlet。其中,解析Portlet这个工作其实是次要的,各个Portal都一样,因为有标准规范(JSR168)。真正考验实力的是页面布局。页面布局分几个部分:页面模版、排版方式、Portlet状态,等。特别是页面模版,各个厂商实现都不同,这是需要细心评估的,因为Portal的二次开发主要是在做页面模版,各种美工。 再说说Portlet:LZ说的伪Portlet,后面有人说的iframe,这些都是属于没有理解portlet思想而产生的思路,是用普通网页开发方式套到Portlet上了。其实portlet开发、部署、卸载、调试都十分方便。真正需要做的是,实现一个功能全面一点的portlet基础框架,能读写数据库、能读到登录用户信息、能与Portal或其他公共应用交换数据,然后是用该框架做实际的业务。 另外,Portal的定位决定了Portlet不适合做复杂的交互式业务,而适合做数据整合数据展现的功能。 我也没有找到兼容性好的Portlet容器。JSR 168好像没有达不到兼容的目的,各个Portal产品本身不兼容就算了,Portlet事实上也很难兼容,很多为LifeRay写的Portlet就难以迁移到别的Portal上。 现在的目标是自己开发一个Portal,页面布局、模板、样式、Portlet状态这些方面感觉都不难解决。 我说的业务系统相关的Portlet,不一定是要做复杂的交互的,比如说前面提到的显示个人薪水情况的Portlet,他只有显示没有交互。但显示薪水可能涉及到财务或者人力资源某个系统的功能,有比较复杂的逻辑来计算薪水。现在开发这个Portlet需要迁移业务系统关于薪资计算的逻辑到Portal上,这些逻辑可能涉及一大堆类,很显然不是好的选择。 当然我们可以用WebService,但对于Portal实施人员来说,在业务系统上部署一个WebService的难度应该要大于一个JSP页面。所以我觉得这种情况下用一个JSP页面作为伪Portlet,由Portal代理用户去访问业务系统上的伪Portlet,可以达到比较满意的效果。 我目前的想法是:还是实现一个遵循JSR168的Portal,然后有一个对这种伪Portlet进行额外支持。 |
|
返回顶楼 | |
发表时间:2009-07-30
lnaigg 写道 再说说Portlet:LZ说的伪Portlet,后面有人说的iframe,这些都是属于没有理解portlet思想而产生的思路,是用普通网页开发方式套到Portlet上了。其实portlet开发、部署、卸载、调试都十分方便。真正需要做的是,实现一个功能全面一点的portlet基础框架,能读写数据库、能读到登录用户信息、能与Portal或其他公共应用交换数据,然后是用该框架做实际的业务。
另外,Portal的定位决定了Portlet不适合做复杂的交互式业务,而适合做数据整合数据展现的功能。 我们的portal项目用的jetspeed 2.1.3,也采用iframe的伪portlet来集成,是觉得不太好,但是没有找到好的 方法,楼主能不能详细说说你们的portlet框架? 谢谢 |
|
返回顶楼 | |
发表时间:2009-07-30
popoer 写道 使用伪portlet最大的问题,我认为是无法使用到portal容器提供的认证、授权等服务,界面样式控制、换肤等功能也需要额外去实现
如果我理解的没错,你这里的认证授权是指对被集成的应用系统而言的吧。 如果真的是指这个我觉得不用iframe的portlet,portal容器提供的认证、授权也没法使用吧? |
|
返回顶楼 | |
发表时间:2009-07-30
portal所谓的集成各个系统,进行统一的认证、授权的意思是其他的系统是作为一个一个的portlet模块存在于portal容器中的(当然,portlet是很方便安装与卸载的)。
如果用iframe来搞个伪portlet的话,当然无法使用同一的容器认证。 |
|
返回顶楼 | |
发表时间:2009-07-30
openeyes 写道 lnaigg 写道 再说说Portlet:LZ说的伪Portlet,后面有人说的iframe,这些都是属于没有理解portlet思想而产生的思路,是用普通网页开发方式套到Portlet上了。其实portlet开发、部署、卸载、调试都十分方便。真正需要做的是,实现一个功能全面一点的portlet基础框架,能读写数据库、能读到登录用户信息、能与Portal或其他公共应用交换数据,然后是用该框架做实际的业务。
另外,Portal的定位决定了Portlet不适合做复杂的交互式业务,而适合做数据整合数据展现的功能。 我们的portal项目用的jetspeed 2.1.3,也采用iframe的伪portlet来集成,是觉得不太好,但是没有找到好的 方法,楼主能不能详细说说你们的portlet框架? 谢谢 我还刚开始着手做呀,还不是太明白。我说说对于这一类集成的需求我的不太成熟的想法吧: 普通Portlet的HTML片段是在Portal服务器本地产生的,伪Portlet的HTML片段是由远程业务系统产生的。因此对Portal来说,除了在返回HTML片段时需要作为HttpClient向远程业务系统发起HTTP请求以外,在窗口状态、行为、样式、布局、换肤、拖拽等方面来说伪Portlet和Portlet是没有区别的。 这就解决了一iframe形式的Portlet最为重要的问题,那就是样式不易控制,不能换肤,用户体验不好,以及因浏览器对不同URL来源之间互相访问的限制而引起的其他问题。 另一个重要问题是用户认证,其实使用iframe实现统一的用户认证也不是不可以的,但根据常见的SSO机制(以CAS为例),每个业务系统都集成到CAS中,那么各个iframe里的URL被访问时将会自动重定向到CAS服务器以获取LoginTicket,整个过程不需要程序员控制,即可实现统一认证。但这样的缺点是用户感觉不太友好,页面跳转次数太多了。 如果有能力修改SSO实现,那么在使用iframe的情况下可以由Portal代为申请LoginTicket或者别的什么Ticket,将其作为参数附加到iframe的src属性对应的URL上,这样跳转次数较少。但依然不是特别理想,如果页面iframe较多,用户体验还是不理想。 如果是以Protal作为HttpClient的形式代理用户向其他业务系统访问JSP页面,那么就可以使用CAS中的代理模式(或者类似),直接产生ProxyTicket向其他业务系统请求页面即可。对于用户来说,他只下载了一次HTML,用户体验比iframe要好。 我们知道这种代理访问本身需要的系统资源是很少的,真正的运算在业务系统上,性能上的问题不大,如果SSO和Portal是合二为一或者是同一个容器内的,那么性能就更不成问题了。 |
|
返回顶楼 | |
发表时间:2009-07-30
最后修改:2009-07-30
恩,是否可以这样,自己做的portlet只负责呈现数据和传递业务参数,然后实际的业务处理交给业务处理的portlet或servlet?例如,前面的薪水portlet,除了外观参数外,可以让用户减薪水(模拟转账), 然后由一个负责处理用户薪水的portlet或servlet处理。让业务处理的portlet或SERVLET跟表现的PORTLET分离。
当然,这还要涉及用户验证等等。 不成熟的想法,请各位先进指正 |
|
返回顶楼 | |
发表时间:2009-07-30
guazi 写道 portal所谓的集成各个系统,进行统一的认证、授权的意思是其他的系统是作为一个一个的portlet模块存在于portal容器中的(当然,portlet是很方便安装与卸载的)。
如果用iframe来搞个伪portlet的话,当然无法使用同一的容器认证。 你的意思是把其他的系统全部用portlet重新写一遍? 我们的情况是其他系统都已经在用(可以独立portal运行),portal中只集成了其中一部分功能。这就有个portlet 如何在原有系统认证的问题。 比如你用usera登录到portal中,其中有个portlet是个人邮件最新邮件(oa系统中),那你怎么用usera在oa 中验证(假定oa中用户、密码和portal一致)?据我现在所知没有别的方法,只有用usera模拟一次oa系统的登录,然后取最新邮件列表。 这个过程中,portal提供的sso好像一点都没用。不知道是不是我对jetspeed 2.1.3了解不过,想听听高手的说法 谢谢 |
|
返回顶楼 | |
发表时间:2009-07-30
wyuch 写道 [另一个重要问题是用户认证,其实使用iframe实现统一的用户认证也不是不可以的,但根据常见的SSO机制(以CAS为例),每个业务系统都集成到CAS中,那么各个iframe里的URL被访问时将会自动重定向到CAS服务器以获取LoginTicket,整个过程不需要程序员控制,即可实现统一认证。但这样的缺点是用户感觉不太友好,页面跳转次数太多了。
如果有能力修改SSO实现,那么在使用iframe的情况下可以由Portal代为申请LoginTicket或者别的什么Ticket,将其作为参数附加到iframe的src属性对应的URL上,这样跳转次数较少。但依然不是特别理想,如果页面iframe较多,用户体验还是不理想。 如果是以Protal作为HttpClient的形式代理用户向其他业务系统访问JSP页面,那么就可以使用CAS中的代理模式(或者类似),直接产生ProxyTicket向其他业务系统请求页面即可。对于用户来说,他只下载了一次HTML,用户体验比iframe要好。 我们知道这种代理访问本身需要的系统资源是很少的,真正的运算在业务系统上,性能上的问题不大,如果SSO和Portal是合二为一或者是同一个容器内的,那么性能就更不成问题了。 你说通过CAS获取LoginTicket,那么获取的凭证怎么带过去?是在url中加一个参数吗? 如果这样的话,portlet页面中的链接(例如有一个最新邮件的列表的portlet,你选中某个邮件点击链接会弹出一个详细内容的页面,这个页面实际上是OA系统的范围了),那么这些链接是否都要加获取LoginTicket的参数呢? |
|
返回顶楼 | |
发表时间:2009-07-30
openeyes 写道 guazi 写道 portal所谓的集成各个系统,进行统一的认证、授权的意思是其他的系统是作为一个一个的portlet模块存在于portal容器中的(当然,portlet是很方便安装与卸载的)。
如果用iframe来搞个伪portlet的话,当然无法使用同一的容器认证。 你的意思是把其他的系统全部用portlet重新写一遍? 我们的情况是其他系统都已经在用(可以独立portal运行),portal中只集成了其中一部分功能。这就有个portlet 如何在原有系统认证的问题。 比如你用usera登录到portal中,其中有个portlet是个人邮件最新邮件(oa系统中),那你怎么用usera在oa 中验证(假定oa中用户、密码和portal一致)?据我现在所知没有别的方法,只有用usera模拟一次oa系统的登录,然后取最新邮件列表。 这个过程中,portal提供的sso好像一点都没用。不知道是不是我对jetspeed 2.1.3了解不过,想听听高手的说法 谢谢 如果使用CAS,它有代理模式,可以通过ProxyTicket的方式去OA系统取HTML。凡SSO应该都支持代理模式吧,这种模式本来最常用的地方就是Portal。 |
|
返回顶楼 | |