IBM®
跳转到主要内容
    中国 [选择]    使用条款
 
 
Select a scope:Search for:    
    首页    产品    服务与解决方案     支持与下载    个性化服务    
skip to main content

developerWorks 中国  >  WebSphere  >

专家访谈: Stefan Hepper 谈 WebSphere Portal 编程

developerWorks
文档选项

未显示需要 JavaScript 的文档选项


级别: 中级

Stefan Hepper, WebSphere Portal 编程模型架构师, IBM

2006 年 3 月 16 日

在这篇一问一答的文章里,我们邀请 WebSphere® Portal 专家 Stefan Hepper 来回答有关门户编程和 JSR 168 Portlet 规范方面的问题。

引言

WebSphere Portal 专家 Stefan Hepper 回答您在门户编程、JSR 168 Portlet 规范和 Java™ Portlet 开发方面的问题:为什么事情是这样而不是那样、如何解决特定问题、为什么缺少功能 XYZ 或者更一般的体系结构和策略性问题。WebSphere Portal 是市场中领先的门户产品,它提供与应用程序、内容、过程和人员的单点个性化交互。Portlet 是基于 Java 的 Web 组件,它可以生成能够插入到门户中的动态内容。有关 WebSphere Portal 的更多信息,请参阅 WebSphere Portal 专区

问:从 Portlet 访问 HttpSession 的推荐方法是什么?我们想在会话中存储给定用户的有关信息,所以需要使用 HttpSession。

答: Portlet 会话是 HttpSession 上的一个 Facade。您放在应用程序作用域内的 Portlet 会话中的全部内容都将对此 Portlet 应用程序的所有 Portlet 和 Servlet 可见。请使用带有 APPLICATION_SCOPE 的 PortletSession。

问: IBM 是否提供通过 WebSphere Portal 实现的 .Net 应用程序示例?

答: 是的,在 http://wps51.dfw.ibm.com/ 中,您可以看到一个演示版的 WebSphere Portal。注册后,您可以在 My Work Developer's Area\WSRP 页面下方看到一个通过 WebSphere Portal 中的 Web Services for Remote Portlets (WSRP) 显示的 .Net Portlet。

问: 创建门户使用情况统计的最佳方式是什么?如何获得 Portlet 中选定的项(例如,指向后端 Notes 服务器中的文档的链接)的信息呢?

答:您可以使用当前用于 Web 站点分析的任何工具。WebSphere Portal 生成了一个 sa.log 文件,它遵循 Web 站点分析工具可以读取和评估的 NCSA Combined 日志格式。请参阅 Configuring WebSphere Portal for site analysis loggingUnderstanding the site analysis log

问:如何才能禁止在 JSR 168 Portlet 中出现最小化和最大化按钮呢?

答:您在 Portlet 中无法做到这一点,因为这些按钮是由门户提供的。因此,对于特定的 Portlet,您的门户不需要呈现这些按钮。在 WebSphere Portal 中,可以通过创建特殊的皮肤来做到这一点。

问:要使用 JSR 168 Portlet 开发一个 Internet 银行应用程序,它包含领先的 J2EE、EJB 框架(如 Spring、Struts 等),将它部署在 WebSphere Portal 中是否是个很好的解决方案?有 25 万用户将访问此站点,WebSphere Portal 的性能如何?关于在 WebSphere Portal 中开发和部署什么类型的应用程序您有什么建议?据我所知,如果客户想要开发 Content Delivery System(包括第三方集成和协作),那么 WebSphere Portal 是最好的选择。但对于事务管理系统、B2B 应用程序等,也是如此吗?WebSphere Portal 适合开发这些应用程序吗?

答: WebSphere Portal 是在 WebSphere 平台上运行的,您可以利用 WebSphere 的所有 J2EE 功能,包括事务管理。是的,WebSphere Portal 非常适合于开发企业应用程序,我们的有些客户也正在运行有几百万用户访问的 WebSphere Portal。我们有许多客户将 Spring、Struts 或 JSF 等框架与 WebSphere Portal 一起使用。

问:我看过几个应用程序,它们都比较独立,但将它们放在 WebSphere Portal 后,它们都将使用 Web 门户来呈现。它们都需要各种输入表单供用户填写。这种情况的最佳体系结构是什么?是否应该为每个表单准备不同的 Portlet,或者有一种“表格驱动”的方式来做到这一点呢?我一直在考虑面向服务的体系结构的思想,我想您应该能够创建一种“表单服务”来完成这一工作。

答:您可以使用 Workplace Forms Designer 以所见即所得的方式创建这些表单,并将它们导出为 Portlet。

问:我试图对 WebSphere Portal 用户进行一些访问限制,即只允许他们密码输入错误几次,然后就阻止他们访问一段时间。有什么设置或解决方案可以实现这种情况吗?或者有什么地方可以让我获得此问题的解决办法呢?我试图在 IBM 和 WebSphere 站点上寻找关于此问题的建议方法或解决办法,但没有成功。

答:这个问题目前没有现成的解决方案,但是您可以从 Portlet 写入您的 LDAP 目录中,因为 WebSphere Portal V 5.1.0.1 附带了 com.ibm.portal.um 用户管理包。

问:我们的 WAR 中的 Java 类需要引用 WAR 外部的一些类。WebSphere Portal 5.1 中支持使用什么方式来做到这一点?

答:您可以将该 jar 文件放在 PortalServer/shared/app 目录中,以便所有 Portlet 应用程序都可以访问它们。

问:是否可以将登录用户作为 Theme JSP 文件中的脚本变量进行访问呢?我有一个自定义的主题。在我的自定义主题的 Banner.jsp 中,我试图访问用户对象中的登录用户的属性,以便可以在我的 scriptlet 中将用户属性作为字符串对象进行访问。可以在 <wps:if loggedIn="yes"> 中访问 <wps:user attribute=""/> 标记以显示用户属性。但遗憾的是,<wps:user> 标记并没有返回任何脚本变量来将一些自定义代码写入 scriptlet 中。我也试图通过在 Banner.jsp 中编写以下代码来实例化用户对象:


<%@ taglib uri="/WEB-INF/tld/portlet.tld" prefix="portletAPI" %>
<portletAPI:init />
User user = portletRequest.getUser(); 

但是 Portlet API 不能够在门户级别初始化。以上代码会引发某些异常。我需要实现以下逻辑:如果给出用户昵称,则显示该昵称,否则显示用户的全称。

答:自 WebSphere Portal 5.1.0.1 起,您可以通过 Portlet 或主题和皮肤来访问用户管理系统。请注意,Portlet 标记库或 API 一直都不应该用于主题和皮肤。您可以在您的主题中执行以下操作:


Context ctx = new InitialContext();
com.ibm.portal.um.PumaHome home = (PumaHome) 
ctx.lookup(portal:service/usermanagement/Puma);  
// note: you need to do the lookup only once
PumaProfile profile = home.getProfile(request); 
// note: you need to get the profile for each request again
Map userattributes = profile.getAttributes(profile.getCurrentUser(), 
listOfAttributes) ;

if ( userattributes.containsKey(nickname) )

问:我需要同时在 Login Portlet 和 Login 屏幕中显示无效登录错误消息。当用户输入无效的用户 ID 或密码时,我需要同时在缺省的 Login Portlet 和缺省的 Login 屏幕中显示适当的错误消息。目前,我只能在 Login Portlet 和 Login 屏幕的其中之一显示错误消息。但是我需要在这二者中都启用此错误消息显示功能。我尝试过更改 AuthenticationService.properties 文件中 authentication.screen.login 属性的值,但是并没有解决问题。您有什么建议?

答:您只应该使用这二者之一。首选的是 Login Portlet。

问:我们需要自定义 Login Portlet 和 Selfcare Portlet,在其中添加更多的字段。我们应该选择屏幕选项,还是应该选择 Portlet 选项?作出这一选择应该考虑什么因素呢?我们试过修改 Selfcare Portlet JSP,使之符合我们的需要,它们看起来也工作得很好,但是这种方法是否正确呢?或者只应该切换到屏幕选项呢?

答:使用 Portlet 的方法更加灵活。仍然支持屏幕的主要原因是为了与旧式版本相兼容。

问:我们有一个门户应用程序,它紧紧依靠 Portal Messaging 功能在 Portlet 之间交换数据。我们也需要使该应用程序对非 WebSphere 客户可用。但是 JSR 168 看起来并不支持任何 Portlet 间的消息传递。是否在什么时候 JSR 168 会支持消息传递?我们可以采取什么替代方法?

答:交换数据唯一的标准方式是通过作用域为一个 Portlet 应用程序中的 Portlet 的 Portlet 会话应用程序,或者通过跨应用程序的 EJB。Portlet 间通信将在 Portlet Specification 第 2.0 版解决,该规范已作为 JSR 286 提交给 JCP 了。

问:我们需要在 Solo 模式的弹出窗口中显示 Portlet。要在弹出窗口中显示的 Portlet 所在页面还有其他两个 Portlet。如何获得拥有此 Portlet 的控件的 objectID 或 uniquename,以便能够在 urlGeneration 标记中使用它?

答:目前,为 Portlet 指定唯一名称的唯一方式是通过 XMLAccess。我们将在下一版本的 WebSphere Portal 中通过 UI 来提供此功能。而目前,您需要在 XMLAccess 脚本中执行以下操作:


<request ...>
<portal action="locate">
    ...
    <content-node content-parentref="Content.Root.My_Portal" action="update" 
    active="true" objectid="my.page.1" uniquename="my.unique.name.page" 
    type="page" skinref="undefined">
	...
	<component action="update" ordinal="100" type="control" 
	uniquename="my.unique.name.portlet">
	<portletinstance action="update" objectid="my.page.1.portlet1" 
      portletref="ExtReg"/>
	</component>
	...
   </content-node>
  </portal>
</request>:

如果您只需要拥有一个弹出窗口,则也可以通过以下方式来实现:


<portal:urlGeneration contentNode="my.unique.name.page"
layoutNode="my.unique.name.portlet"
portletWindowState="maximized" newWindow="true">
   <a href="<% wpsURL.write(out); %>">MyPortletInNewWindow</a>
</portal:urlGeneration>

对于 JSR 168 Portlet,Solo 模式支持目前不太容易使用,因为这些 Portlet 需要自己创建返回 URL(使用 com.ibm.portal.state API)。





回页首


参考资料

学习

讨论




回页首


关于作者

Stefan Hepper 是负责 WebSphere Portal 编程模型和公共 API 的架构师。他是 Java Portlet Specification JSR 168 的负责人之一。他也在 Apache 上启动提供 JSR 168 引用实现的 Pluto 项目。Stefan 在国际会话(例如 JavaOne)上发表了大量演讲和各种论文,并且与人合作撰写了图书 Pervasive Computing(Addison-Wesley,2001 年)。他的研究兴趣是基于组件的软件体系结构、普及基础设施,当然还有门户和 Portlet。Stefan 在德国的卡尔斯鲁厄大学获得计算机科学的毕业文凭,并于 1998 年加入 IBM Boblingen Development Laboratory。






回页首


对本文的评价

太差! (1)
需提高 (2)
一般;尚可 (3)
好文章 (4)
真棒!(5)

建议?




回页首


其他公司、产品或服务的名称可能是其他公司的商标或服务标志。


    关于 IBM隐私条约联系 IBM