扫一扫
分享文章到微信
扫一扫
关注官方公众号
至顶头条
Portlet一直以来都局限于门户应用程序:要查看它们,您需要一个运行门户容器的应用服务器。BEA WebLogic Portal 9.2引入了全新的Adrenaline技术,使得在任何Web应用程序中可以直接显示Portlet,而不需要门户容器。因此,现在可以在Struts、Spring 应用程序或其他任何Web 应用程序内显示Portlet。
为什么说这非常重要呢?这是因为,具有广泛的遗留Web应用程序的企业需要花费高昂的成本来维持现有投资,再添加新的功能几乎是不可能的。让开发人员去给一个遗留应用程序增加特性往往是过于冒险的,因为这样做存在动摇现有代码基础的风险。由于无法更新来满足用户的需求,这些Web应用程序迟早会被打入冷宫。Adrenaline正是用于为诸如此类情况提供帮助,利用Adrenaline,开发人员只需对Web应用程序进行一些细微的扩展,即可呈现Portlet。
另外,许多企业已经采用了门户基础架构,目的在于协助管理应用程序的蔓延。门户实施了组件化的开发,并提供诸如安全性和应用程序管理的共享基础架构。虽然从定制Web应用程序转变到门户往往是企业的目标之一,但相关工作的成本有时看起来过于高昂。在这种情况下,Adrenaline同样可以提供帮助,简化Web应用程序到门户的过渡。
本文介绍了Adrenaline技术,展示了如何使用这项技术。
随着Adrenaline技术的引入,BEA WebLogic Portal 9.2正式确立了Portlet是独立的用户界面组件的思想。Adrenaline为呈现门户框架以外的Portlet提供支持。任何必须支持非门户Web应用程序的团队都将从中受益。以前,Portlet组件模型需要采用一个贯穿整个企业的门户架构,现在则可以用Portlet在遗留Web应用程序、新Web应用程序——当然还有门户——中显示用户界面组件。
Portlet容器提供一个具备丰富特性的组件模型,同时也为那些已有某种偏好技术(如Struts,JSF以及Java Pageflows)的开发人员提供支持。Portlet的开发模型是一种高生产力、特性丰富的开发环境,它强化了将用户界面作为可移植组件的开发。应用Adrenaline,企业可以通过一种一致的方式来标准化Web用户界面的组件化,从而最大化其重用,并使成本降至最低。
此外, Adrenaline使用Ajax管理与Portlet的交互,而且不需要刷新网页。这使得Adrenaline Portlet可以随意添加到一个页面里,而不必担心影响现有页面的逻辑。事实上,Adrenaline是独立于页面进行操作的。
对于IT来说,给现有的应用程序插入新特性有时过于冒险,因为任何变动都有可能动摇现有的代码基础。Adrenaline则提供一种出色的解决方案。即使是对应用程序了解不多的开发人员,也可以在一个遗留页面上插入portlet,从而在不干扰现有程序的情况下增加新特性。
例如,图1所示是通过一个静态HTML Web页面呈现的遗留应用程序。
图1. 通过静态HTML Web页面呈现的原遗留web应用程序
图2所示为同一遗留Web页面,但带有一个新的portlet。Portlet是独立开发的,然后应用简单的技术,部署到遗留Web应用程序里。Portlet开发人员根本无须理解遗留应用程序。
图2. 同一静态遗留应用程序,但现在带有一个新portlet
利用Portlet开发模型来扩充现有的Web应用程序,其功能是难以匹敌的。不仅在遗留的Web应用程序中添加Portlet轻而易举,而且还可以在其他任何Web应用程序中重用相同的Portlet。因此,Portlet方式允许轻松改进遗留应用程序,并能提供具有极高重用性的模型。
在Web应用程序页面中显示portlet时,提供portlet的应用程序通常称为生产者(producer)。而显示由生产者提供的这个portlet 的Web应用程序页面称为消费者(consumer)。使用Adrenaline时,必须有两个应用程序在工作:生产者和消费者。在下图中,Web页面就是消费者,WebLogic Server Web应用程序就是生产者。
图3. 包含三个Portlet的非门户Web页面
您将看到,Adrenaline怎样地拓展了Portlet适用场合的可能性。但什么类型的Web应用程序可以称为Adrenaline Portlet的生产者和消费者呢?下表展示了不同的Web容器对Adrenaline所提供的支持。左列提供了容器名称列表,而其他列是各容器的功能细节,也是本文随后要讨论的。在学习使用Adrenaline的不同方法时,请参考该表。
表1. 不同容器对Adrenaline的支持
容器 | 消费Adrenaline Portlet | 生产Adrenaline Portlet | ||
---|---|---|---|---|
IFrame | Ajax片段 | Ajax JSP标记 | ||
静态Web应用程序 Apache、IIS | 是 | 是 | 否 | 否 |
动态Web应用程序 CGI、ASP、Tomcat | 是 | 是 | 否 | 否 |
WebLogic Server Web应用程序 | 是 | 是 | 否 | 否 |
带有Adrenaline的WebLogic Server Web应用程序 | 是 | 是 | 是 | 是 |
WebLogic Portal Web 应用程序 | 是 | 是 | 是 | 是 |
有三种技术方案可用于使一个遗留Web应用程序转变成一个Adrenaline Portlet的消费者。每种技术都提供了一种在Web应用程序中把Portlet插入现有Web页面的机制。
利用这些技术,Adrenaline Portlet可嵌入任何HTML消费者Web应用程序,可包括.NET、Ruby on Rails、PHP、静态HTML,当然,也包括Java Web应用程序。
使用Adrenaline的第一步是利用WebLogic Portal 9.2开发一个Portlet。WebLogic Portal为开发portlet提供了众多选择,包括利用Java Server Faces、 Java Pageflows、标准JSP或许多其他选项。随后,这个Portlet必须要用Adrenaline部署到WebLogic Server 9.2 Web应用程序中,从这一点上来说,Web应用程序就变成了Adrenaline Portlet的生产者。这个生产者Web 应用程序不必是WebLogic Portal 9.2 Web应用程序。
利用IFrame给Web页面插入新特性已经成为Internet上的一种通用技术。例如,许多mashup站点都依赖于此技术。这个概念很简单:一个开发人员编辑一个现有页面,然后添加一个<iframe>标记,而不会影响页面的其他内容。Iframes在自己的独立框架内显示,因此不会损害周边页面。对于遗留的Web应用程序来说,更新是有风险的,而Iframe就是正确方法。
IFrame标记十分易于理解。开发人员只需指定所呈现内容的源,还可以选择性地指定一些大小和滚动属性等。
<iframe src="http://wlp.bea.com/wlpBEAWeb/Portlet/
travel/customers/customers.portlet" width="350" height="450" frameborder="0" scrolling="auto"/>
用IFrame来呈现Adrenaline Portlet的过程非常简单。可按如下步骤进行:
虽然利用IFrame 将Portlet插入页面是一种有效的技术,但有些时候,我们也希望以内联的方式在一个页面上呈现Portlet。在某些情况下,Portlet可能希望用JavaScript与封闭页面的元素交互。此外,以内联的方式呈现Portlet允许Portlet仅占用所需的屏幕空间,而无需滚动条。
利用Ajax消费者技术,Portlet内的所有单击操作都异步地路由到生产者,所返回的HTML将插入页面。因此,封闭页面并不会为Portlet事件而刷新,这就允许Portlet可以在对应用程序毫无干扰的情况下独立操作。多个Ajax生成的Portlet 可在同一个页面中使用,只要每个实例有其惟一的id属性即可。
下面是通过Ajax呈现一个Adrenaline Portlet时所用的片段。请注意如何使用div标记定义容器,来控制所呈现Portlet的不同片段。
0 <script type="text/javascript" src="/wlpBEAWeb/framework/features/js/async.js" /> 1 <div id="_cmbrowser" class="bea-portal-window-content-async"> 2 <br /> 3 </div> 4 <div id="_cmbrowser_script"></div> 5 <div id="_cmbrowser_load" class="bea-portal-window-content-async-load" style="position: absolute; visibility: hidden;"> 6 Loading... 7 </div> 8 <div id="_cmbrowser_error" class="bea-portal-window-content-async-error" style="position: absolute; visibility: hidden;"> 9 ERROR... 10 </div> 11 <script type="text/javascript"> 12 bea.netuix.ajax.updateContents("_cmbrowser", "http://wlp.bea.com/wlpBEAWeb/Portlet/travel/customers/customers.portlet?_nfpb=true&_portlet.contentOnly=true&_portlet.instanceLabel=_cmbrowser&_portlet.contentMode=FRAGMENT&_portlet.async=true"); 13 </script>
这段Ajax片段的关键在于对bea.netuix.ajax.updateContents()函数的调用。最终就是这个函数将portlet的HTML内容呈现到_cmbrowser的 div标记中。Portlet是通过与.portlet文件的URL访问的,此URL将触发一个Servlet,来呈现该Portlet。所呈现的HTML页面中的链接和表单行为将被正确地重写,以便通过XMLHttpRequest提交,而不会导致页面刷新。在async.js 文件中可找到支持Adrenaline的JavaScript代码,上面的片段中已引用了该文件。
请注意,使用这种方法存在一个显著的局限性。具有安全特性的浏览器不允许portlet来自不同IP域中的服务(而不是外部HTML页面)。因此,这种方法仅适用于Web应用程序和Portlet由同一组织托管的情况。
若想在您自己的Web应用程序中使用该片段来显示portlet,请按以下步骤进行:
Adrenaline提供了一个JSP标记,在安装了Adrenaline的Weblogic Server Web应用程序中,任何JSP页面都可嵌入该标记。此标记所引用的Portlet的也必须部署到与标记相同的Web应用程序中(对于本地Portlet),也可远程部署(如果使用WSRP)。最终,Adrenaline必须在Web应用程序中为要公开的Portlet提供一个WebLogic Portal .portlet描述符。
为了在JSP页面中显示一个Portlet,可在JSP页面里插入新的Adrenaline portalFacet标记:
<%@taglib uri="http://www.bea.com/servers/portal/tags/netuix/render"
prefix="render"%> ... < render:portalFacet label="_customers"
path="/Portlet/travel/customers/customers.portlet" />
在Web应用程序的Portlets子目录中,有一个名为sample.portlet的文件。对于该页面中的所有portalFacet标记来说,label标记属性都必须是惟一的,因为它标识了portlet实例。在运行时,portalFacet标记会利用前面讨论过的Ajax方法将指定的Portlet呈现在页面上。也可插入多个具有惟一label属性的portalFacet标记,以在一个页面上包含多个Portlet。
回顾了三种在任意Web应用程序中使用Portlet的技术后,有必要关注一下如何创建生产者及其Portlet。对于已有WebLogic Portal 9.2 Web应用程序的用户来说,无需作任何工作。任一WebLogic Portal 9.2 Web应用程序自动就是Adrenaline Portlet生产者。任何在WebLogic Portal 9.2中部署的Porlet都可立即应用上述三种技术,而无需任何配置或额外处理。在WebLogic Portal 8.1中部署portlet的用户需要升级到9.2版本才能使用此功能。
对于尚未在WebLogic Portal上构建Portlet的WebLogic Server 用户,只需进行一些简单的处理即可利用Adrenaline。附录中包含了一些简单的步骤,按照这些步骤操作即可将Adrenaline添加到任意WebLogic Server 9.2 Web应用程序。但是,注意要构建Adrenaline Portlet生产者Web应用程序,需要具备三大先决条件 :
下载WebLogic Platform 9.2可获得 WebLogic Server和一个WebLogic Portal开发许可。配置Adrenaline库时,按照本文附录A中介绍的步骤使用WebLogic Workshop for WebLogic Platform较为简单。
Adrenaline可以与WebLogic Portal 9.2内开发和部署的任何portlet 协同工作,无需完成任何特殊步骤去使一个portlet兼容Adrenaline。然而,有一些特殊的问题会通过Adrenaline影响portlet的可用性。
IFrame技术可以在没有Adrenaline Portlet的情况下实现,它可以使用任何HTML源。例如,用户可以为一个使用www.bea.com 的遗留应用程序添加IFrame。同样,使用Ajax工具箱,也可以在没有Adrenaline的情况下复制Ajax Snippet技术。如果这些都成立的话,为什么还要在生产者端使用Adrenaline Portlet呢?
以下是在生产者端开发Portlet来取代普通的Web应用程序的首要原因:
Inter-Portlet Communication(IPC)允许一个portlet与门户内的其他portlet通信。portlet编写器利用了这一特性,允许不同portlet协作。Master-Detail模式通过定义出现在一个单独的门户页面上的Master portlet和Detail portlet,确立了这种思想。Master portlet通常包含一个主题列表,单击其中一个主题时,Detail portlet就会更新和显示所单击的内容。
由于Adrenaline在消费者Web页面上显示一个单一portlet,不支持Master-Detail模式。因此,依靠IPC的Portlet不应使用Adrenaline消费。
利用任何一种消费者技术时,消费者和生产者都很可能在同一个Web应用程序里。对于portalFacet标记来说,这是必须的。以这种方式进行部署是有优势的。在这种配置下,如果用户针对消费者Web页面或生产者portlet进行身份验证,身份验证结果都会自动共享。这是因为用户完全是在一个单独的Web应用程序范围内操作。
当应用IFrame Consumer 或者 Ajax Consumer技术时,消费者和生产者通常是不同Web应用程序的一部分。虽然这是一种灵活的方法,但有必要了解配置会怎样影响身份验证。由于消费者和生产者处于不同的Web应用程序中,默认情况下身份验证结果无法共享。因此,用户必须进行两次身份验证——一次针对消费者,另一次针对生产者。
这个问题不只是Adrenaline存在。用户被迫对很多不同的Web应用程序进行身份验证在企业内部是司空见惯的。为解决这个问题,企业内部已开始广泛部署单点登录(SSO)解决方案。SSO解决方案通常使用cookie来跨Web站点维护用户身份。只要生产者和消费者在同一个网络域里,这些SSO解决方案就能使得利用Adrenaline工作没有问题。
Adrenaline并不是第一个允许消费者显示远程生产者portlet的portlet技术。事实上名为WSRP(Web Service for Remote portlet)的标准技术早已存在,提供了这种功能。WebLogic Portal包含业界领先的WSRP实现,而且还在不断地增强其实现。WSRP是一项高级技术,包含众多对于创建联邦门户非常有用的特性。诸如身份验证共享、内部portlet通信,以及拦截器等特性使得WebLogic Portal WSRP解决方案极其强大。
BEA推荐WSRP为第一portlet联邦技术。然而,在WSRP对于消费者端不可用的场合,Adrenaline都是极好的替代选择。而且幸运的是,应用WebLogic,相同的portlet只需在生产者上部署一次,即可在使用Adrenaline和其他带有WSRP的消费者上使用。这样看来,Adrenaline 和WSRP是相得益彰,而不是敌对竞争的技术。
Adrenaline极大地扩展了portlet技术的应用范围和灵活性。它给遗留应用程序注入新的生命,并且提高了portlet用户界面组件在整个企业范围内的重用性。对于WebLogic Portal消费者来说,这项新技术是免费的,提高了portlet开发中现有投资的回报。至于其他方面,Adrenaline给WebLogic portlet技术的采纳提供了有力的理由。
如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。
现场直击|2021世界人工智能大会
直击5G创新地带,就在2021MWC上海
5G已至 转型当时——服务提供商如何把握转型的绝佳时机
寻找自己的Flag
华为开发者大会2020(Cloud)- 科技行者