即使是经验丰富的 Java Web开发人员也会惊讶于开发门户这一如此巨大的飞跃。最终用户看到的那个简单漂亮的界面的背后是像BEA WebLogic Portal 这样的商业产品提供的强大功能和复杂性。当门户应用程序处于生产阶段时,诊断性能问题就会显得格外的困难。
本文假设您对WebLogic Portal的功能和术语已经十分熟悉。
一个公司的门户能让公司更有效地利用其技术和人力资产,而同时又能为其员工、合作伙伴和客户提供一流的Web体验。由于这个原因,门户应用程序现在对业务来说十分关键,并且要能提供可靠的性能和可扩展性。BEA WebLogic Portal 是一种领先的基于Java EE 的门户服务器,可提供部署和运行门户应用程序的健壮的解决方案。
WebLogic Portal 架构
BEA WebLogic Portal 在一个完整的Web门户开发和交付平台中综合了统一的运行时框架、业务服务和生命周期管理技术。它可针对数千最终用户扩展并支持连续更改。
图1 显示了 WebLogic Portal 架构。在门户被实例化时,它会生成门户资源的分类或层次,即所谓的WebLogic Portal 控件树。控件树包括desktop、book和portlet。如您所见,控件树对于理解门户应用程序中的性能问题至关重要。
图1. WebLogic Portal的层次化架构
门户的基本构建块是portlet,portlet是小的门户应用程序,在Web页内通常描述为小盒子。它们是可重用组件,可提供到应用程序、基于Web的内容和其他资源的访问,并且可以访问和显示Web页、Web服务、应用程序和连锁内容提要。
Portlet 相互独立开发、部署、管理和显示。管理员和最终用户通过选择和安排portlet可以创建个性化的门户页,这样一来, Web 页就可针对个人、团队、部门或组织量身打造。Portlet 依赖于门户基础架构来访问用户配置文件信息、参与窗口和动作事件、与其他portlet 通信、访问远端内容、查找凭证和存储永久数据。
由于portlet 也是servlet,所以它们共享类似的重入和性能关注点。单一的 portlet 实例(即portlet 的 Java 类的单一实例)由所有请求者共享。由于处理portlet和 servlet 的线程数量有限,所以每个 portlet 要能尽快地完成其作业,以便整个页的响应时间能够得到优化,这一点非常重要。
理解控件树
WebLogic Portal 控件树代表门户内的所有结构元素,可充当构建新门户页所需的基础架构。在实例化门户时,新控件树在控件树处理期间创建(或从缓存清除,如果控件树已经存在)。门户性能的一个巨大阻碍就是门户内的控件的数量。门户控件越多(页、portlet、按钮等),控件树就越大,呈现所有组件所需的时间越长。
图 2 显示了一个为典型的门户所生成的控件树。由desktop 和 shell 创建一个主 book 和6个子book,而每个子book各包含2个页。每个页包含2个 portlet。所以,整个门户共包含至少42个控件。
图2.一个门户实例的典型控件树
一旦控件树构建完毕且实例变量也设置成功,在门户被完全呈现之前,此树必须在整个生命周期针对每个控件运行。生命周期方法被顺序调用。即,调用每个控件的 init() 方法,然后是每个控件的loadState() 方法,等等,调用的顺序由每个控件在门户分类图中的位置决定。
在生命周期运行每个控件需要一些开销处理时间,如果门户有数千个控件,这一时间就有可能会按指数级增长。因此可见,门户控件树越大,对性能的影响就越严重。