您的位置:首页 > Web前端 > JavaScript

迁移 portlet

2004-11-11 11:20 609 查看
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

迁移 Java 源代码

迁移 JSP

迁移 portlet 部署描述符

迁移 portlet 软件包

更改到 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 配置数据

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

WebSphere Portal
版本 V1.2 和 V 2.1

 WebSphere Portal V4.1
 
 
PortletContext由开发者设置:只读
PortletContext
  
PortletApplicationSettings初始由开发者设置:可以由
管理员更改
 
 
PortletConfig由开发者设置:只读
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
4000
= 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 安全性

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

在早期版本中,
PortletRequest
PortletResponse
PortletSession
为离散对象,不继承它们的 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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息