科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道使用Adrenaline Portlet增强Web应用程序

使用Adrenaline Portlet增强Web应用程序

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Portlet一直以来都局限于门户应用程序:要查看它们,您需要一个运行门户容器的应用服务器。BEA WebLogic Portal 9.2引入了全新的Adrenaline技术,使得在任何Web应用程序中可以直接显示Portlet,而不需要门户容器。

来源:dev2dev 2007年10月16日

关键字: 技术 应用程序 web 中间件

  • 评论
  • 分享微博
  • 分享邮件

摘要

  Portlet一直以来都局限于门户应用程序:要查看它们,您需要一个运行门户容器的应用服务器。BEA WebLogic Portal 9.2引入了全新的Adrenaline技术,使得在任何Web应用程序中可以直接显示Portlet,而不需要门户容器。因此,现在可以在Struts、Spring 应用程序或其他任何Web 应用程序内显示Portlet。

  为什么说这非常重要呢?这是因为,具有广泛的遗留Web应用程序的企业需要花费高昂的成本来维持现有投资,再添加新的功能几乎是不可能的。让开发人员去给一个遗留应用程序增加特性往往是过于冒险的,因为这样做存在动摇现有代码基础的风险。由于无法更新来满足用户的需求,这些Web应用程序迟早会被打入冷宫。Adrenaline正是用于为诸如此类情况提供帮助,利用Adrenaline,开发人员只需对Web应用程序进行一些细微的扩展,即可呈现Portlet。

  另外,许多企业已经采用了门户基础架构,目的在于协助管理应用程序的蔓延。门户实施了组件化的开发,并提供诸如安全性和应用程序管理的共享基础架构。虽然从定制Web应用程序转变到门户往往是企业的目标之一,但相关工作的成本有时看起来过于高昂。在这种情况下,Adrenaline同样可以提供帮助,简化Web应用程序到门户的过渡。

  本文介绍了Adrenaline技术,展示了如何使用这项技术。

Adrenaline简介:没有门户的Portlet

  随着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是独立于页面进行操作的。

增强遗留Web应用程序

  对于IT来说,给现有的应用程序插入新特性有时过于冒险,因为任何变动都有可能动摇现有的代码基础。Adrenaline则提供一种出色的解决方案。即使是对应用程序了解不多的开发人员,也可以在一个遗留页面上插入portlet,从而在不干扰现有程序的情况下增加新特性。

  例如,图1所示是通过一个静态HTML Web页面呈现的遗留应用程序。

使用Adrenaline Portlet增强Web应用程序图-1

  图1. 通过静态HTML Web页面呈现的原遗留web应用程序

  图2所示为同一遗留Web页面,但带有一个新的portlet。Portlet是独立开发的,然后应用简单的技术,部署到遗留Web应用程序里。Portlet开发人员根本无须理解遗留应用程序。

使用Adrenaline Portlet增强Web应用程序图-2

  图2. 同一静态遗留应用程序,但现在带有一个新portlet

  利用Portlet开发模型来扩充现有的Web应用程序,其功能是难以匹敌的。不仅在遗留的Web应用程序中添加Portlet轻而易举,而且还可以在其他任何Web应用程序中重用相同的Portlet。因此,Portlet方式允许轻松改进遗留应用程序,并能提供具有极高重用性的模型。

使用Adrenaline

  在Web应用程序页面中显示portlet时,提供portlet的应用程序通常称为生产者(producer)。而显示由生产者提供的这个portlet 的Web应用程序页面称为消费者(consumer)。使用Adrenaline时,必须有两个应用程序在工作:生产者和消费者。在下图中,Web页面就是消费者,WebLogic Server Web应用程序就是生产者。

使用Adrenaline Portlet增强Web应用程序图-3

  图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 应用程序

注意:容器列是从通用到专用依次列出的:WebLogic Server Web应用程序动态Web应用程序的一个子类型。带有Adrenaline 的WebLogic Server Web应用程序WebLogic Server Web 应用程序的一个子类型,依此类推。因此,在本文中,属于某一容器的任何功能对于该表中列于其下的所有容器也都是可用的。

消费者

  有三种技术方案可用于使一个遗留Web应用程序转变成一个Adrenaline Portlet的消费者。每种技术都提供了一种在Web应用程序中把Portlet插入现有Web页面的机制。

  • IFrame——可移植性最高的技术,portlet URL呈现在Web页面其自己的Iframe内。
  • Ajax——一种更为高级的技术,portlet直接由Adrenaline JavaScript库异步呈现到页面文本中(通过DOM)。
  • Ajax JSP Tag——对于WebLogic Server Web 应用程序来说,Adrenaline中已包含了便捷的JSP标记。

  利用这些技术,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消费者技术

  利用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的过程非常简单。可按如下步骤进行:

  1. 获得Portlet的URL。要确定其URL,可查看生产者Web应用程序,并为所需.portlet文件创建一个URL,例如:
  2. 在编辑器里打开消费者Web页面。
  3. 在应呈现Portlet的页面中插入<iframe>标记,用Portlet的URL作为源。参考上例。

Ajax片段消费者技术

  虽然利用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,请按以下步骤进行:

  1. 将上面的片段复制到Web应用程序的一个HTML页面中。需要删除行号。
  2. 在片段内查找文本cmbrowser,用一个能在页面中代表Portlet惟一ID替换该文本。
  3. 获得部署Adrenaline Portlet的WebLogic Server Web应用程序的URL。这个URL应采用下面这样的形式:
    http://[host]:[port]/[webappContextPath]
  4. 在片段的第0行中,将URL更新为portlet Web应用程序的URL,像下面这样:
    /[webappContextPath]/framework/features/js/async.js.
  5. 获取portlet描述符在WebLogic Server Web应用程序中的相对路径,像下面这样:
    /[relative path]/[portletName].portlet.
  6. 在片段的第12行中,将URL更新为Portlet Web应用程序的URL和portlet的相对路径,像下面这样:
    http://[host]:[port]/[webappContextPath]/[relative path]/[portletName].portlet?[keep the existing parameters shown above].

Ajax JSP标记消费者技术

  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。

将WebLogic Server Web应用程序配置为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 Server 9.2:Adrenaline 生产者Web应用程序必须在WebLogic Server 9.2上部署。
  • WebLogic Portal 许可:对于9.2版本,生产者Web应用程序需要一个Weblogic Portal许可。
  • Adrenaline 库:某些WebLogic Portal JAR文件必须安装在生产者Web应用程序中。

  下载WebLogic Platform 9.2可获得 WebLogic Server和一个WebLogic Portal开发许可。配置Adrenaline库时,按照本文附录A中介绍的步骤使用WebLogic Workshop for WebLogic Platform较为简单。

Adrenaline考虑事项

  Adrenaline可以与WebLogic Portal 9.2内开发和部署的任何portlet 协同工作,无需完成任何特殊步骤去使一个portlet兼容Adrenaline。然而,有一些特殊的问题会通过Adrenaline影响portlet的可用性。

为什么在生产者上使用Adrenaline Portlet?

  IFrame技术可以在没有Adrenaline Portlet的情况下实现,它可以使用任何HTML源。例如,用户可以为一个使用www.bea.com 的遗留应用程序添加IFrame。同样,使用Ajax工具箱,也可以在没有Adrenaline的情况下复制Ajax Snippet技术。如果这些都成立的话,为什么还要在生产者端使用Adrenaline Portlet呢?

  以下是在生产者端开发Portlet来取代普通的Web应用程序的首要原因:

  • 组件,而不是页面:大多Web应用程序在portlet大小的IFrame里是不合适的。真正需要的是要使用的用户界面组件,而不是整个页面。
  • 标准和普适:Portlet 技术是创建组件化的Web用户界面的标准和普适方法。
  • 重用:将一个用户界面组件部署为portlet,那么相同的portlet可以作为Adrenaline、WSRP直接公开到门户中。
  • 特性:Adrenaline Portlet可使用很多portlet容器特性,例如缓存、首选项、观感、权利等等。
  • 移植:Adrenaline Portlet的开发为为遗留Web应用程序移植到企业门户提供了一种增量式方法。

Inter-Portlet Communication

  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补充WSRP

  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领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章