迁移 portlet

WebSphere Portal 版本 4.1 的 Portlet API 更改成与 J2EE 规范一致。所有 portlet 是从 Servlet API 的 HttpServlet 类的扩展,并且把所有 portlet 作为 servlet 部署。如果要部署 WebSphere Portal Server 版本 1.2 或 2.1 的 portlet,阅读下列章节确定如何迁移 portlet 来使用新的 Portlet API。

更改到 Portlet API

要提供功能增强并移动 Portlet API 到标准 API 实现,IBM 更新了 Portlet API。WebSphere Portal 4.1 中一些新的 API 的突出显示包含:

  • 遵从 J2EE 规范
  • 与应用程序服务器更紧密地集成
  • 增强的 portlet 消息传递。现在 portlet 可以使用 DefaultPortletMessage 类发送消息到其它 portlet 应用程序中的 portlet。发送 portlet 的消息和接收 portlet 的消息必须位于相同的门户网站页面上。

下列类和方法更改:

方法更改注释
EventgetPortlet()Deprecated请参阅事件 Javadoc
PortletConfiggetAttribute()Changed使用 getInitParameter()
PortletContextSendDeprecated请参阅 PortletContext Javadoc 以获得新的方法签名
PortletDataremoveAllAttributes()Deprecated无替换
PortletRequestgetUser()Added 
PortletRequestgetPortletSettings()AddedPortletSettings 是 portlet 的配置数据。PortletData 仍然是存储用户设置和值的地方。
PortletRequestgetSession()Changed现在 getPortletSession()
PortletResponseencodeURI()Deprecated使用 encodeURL()
PortletResponsegetCharacterSet()Deprecated使用 getCharacterEncoding()
PortletSessiongetUser()Deprecated使用 PortletRequest.getUser()
PortletApplicationSettings Added管理由门户网站管理员更新的 portlet 应用程序设置
PortletSettings Added管理由门户网站管理员更新的 portlet 设置
SaxPortlet Removed不再支持此类。
管理 portlet 配置数据

在早期版本中,PortletRequestPortletResponsePortletSession 指不从它们的 servlet 变体对象继承的离散对象。在 WebSphere Portal 4.1 中,这些对象直接从它们的 servlet 变体对象继承,按如下所示:

WebSphere Portal
版本 V1.2 和 V 2.1

 WebSphere Portal V4.1  
 double right arrowPortletContext由开发者设置:只读
PortletContext
  
PortletApplicationSettings初始由开发者设置:可以由
管理员更改
 

 double right arrowPortletConfig由开发者设置:只读
PortletConfig
  
PortletSettings初始由开发者设置:可以由
管理员更改,可读/写。
 

在以前版本中,视图方式下的 portlet 可以在 PortletData 对象中和 portlet 事件处理期间存储数据。版本 4.1 中,portlet 仅当 portlet 处于编辑方式时可以在 PortletData 对象中存储值。如果 portlet 没有在编辑方式下而试图更新这些值,会出现异常。请参阅 Portlet API 以获取关于这些对象的详细信息。

迁移 Java 源代码

Portlet 接口由抽象的 Portlet 类替换。抽象的 Portlet 类的方法进行了更改,需要对任何直接扩展该类的 portlet 的更改。然而,Portlet 不应该从 Portlet 类直接继承。相反,portlet 应该扩展帮助器类,如 AbstractPortlet、MVCPortlet,或 PortletAdapter。跨越门户网站的发行版维护这些类的方法和签名。

实例或现有 portlet 的扩展的 portlet,或使用裁剪 portlet 创建的 portlet 不需要迁移。

访问用户主题

JAAS 用户主题的检索已更改。在 WebSphere Portal Server 2.1 中,portlet 通过获取用户主题的引用来访问用户的安全性信息。

  PortletSession session = portletRequest.getSession();  // Get the Portlet Session

  org.apache.jetspeed.portletcontainer.UserImpl          // Get the User Object 
    user =(org.apache.jetspeed.portletcontainer.UserImpl) session.getUser();

  Subject subject = user.getSubject();                   // Next, grab the Subject

在 WebSphere Portal 4.1 中,从 PortletContext 访问用户主题。下例演示如何获取用户主题的引用:

import org.apache.jetspeed.portlet.*;
  import com.ibm.wps.portletservice.credentialvault.CredentialVaultService;
  import javax.security.auth.Subject;

  PortletContext         context = this.getPortletConfig().getContext();
  CredentialVaultService service = (CredentialVaultService) context.getService(CredentialVaultService.class);

  Subject userSubject = service.getUserSubject(portletRequest);

一旦检索用户主题的引用,还可以检索用户凭证的信息和用户主题的其它信息。要获取进一步的信息,请参阅Portlet 安全性

计算请求、响应和会话对象

在早期版本中,PortletRequestPortletResponsePortletSession 为离散对象,不继承它们的 servlet 变体对象。可能需要在 portlet 中计算这些 portlet 对象之一,按如下所示:

  HttpServletRequest httpRequest = ((PortletRequestImpl) request).getServletRequest();
  HttpServletResponse httpResponse = ((PortletResponseImpl) response).getServletResponse();
  HttpSession hSession = ((PortletSessionImpl) session).getHttpSession();

在 WebSphere Portal 4.1 中,这些对象从它们的 servlet 变体对象继承,按如下所示。

Portlet 对象Servlet 对象
PortletSessionHttpSession
PortletRequestHttpRequest
PortletResponseHttpResponse

既然 portlet 对象是 servlet 对象的直接子代,不需要计算来派生 servlet 对象。仅直接使用对象。

 PortletSession  myPortletSession = request.getSession();

 String  myServletID = myPortletSession.getID();  // HttpSession.getID() 

迁移 JSP

在早期版本中,portlet 容器重新定义了 JSP 中通过 PortletContext.include 方法调用的一些标准 JSP 标记的语义。例如,对于 <jsp:useBean scope="request">,bean 存储在 PortletRequest 而不是 HttpServletRequest。

对于 WebSphere Portal 4.1,JSP 1.1 规范中的标记如规范中定义的那样进行处理,甚至当运行在 portlet 容器的上下文中也如此。portlet JSP 标记库有更改。<encodeURI> 标记被取消;应该使用 portletResponse 的 encodeURL() 方法替代。请参阅使用 Portlet API 标记以获取完整信息。

迁移 portlet 部署描述符

因为现在 portlet 被作为 Web 应用程序下列 J2EE 型号封装,所以需要附加的部署描述符。Web 应用程序部署描述符包含标识 portlet 作为 Web 应用程序中的 servlet 所必需的信息。servlet 标识由 <portlet> 标记的 HREF 属性映射到 portlet 部署描述符中的 portlet。

而且,根据具体 portlet 和具体 portlet 应用程序的介绍,portlet 部署描述符也已经更改。portlet 应用程序中每个 <portlet> 标记仍然包含 <portlet-name>、<allows>、<cache> 和 <supports> 标记。移动 <default-locale>、<language> 和 <config-param> 标记来定义具体 portlet。<context-param> 是 <concrete-portlet-app> 元素的一部分。这允许一个 portlet 以多种方法配置而无须创建多个 portlet 实例。

请参阅部署描述符以获取更多的信息。

迁移 portlet 软件包

portlet 现在封装在 WAR 文件中。在最小值情况下,需要重新封装 portlet。portlet WAR 中的目录结构和 J2EE web 应用程序的目录结构一致。在以前版本中,诸如 Java 类和 JAR 文件的受保护资源,存储在 /PORTLET-INF 目录中。受保护资源现在存储在 /WEB-INF 目录中。

要获取更多的信息,请参阅封装和部署 portlet


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值