探查门户升级与修补问题模式

问题描述

WL Portal 8.1 实现 Service Pack 更改的方式与 WL Server 略有不同。由于门户应用程序含有包含 BEA 代码的库,所以升级时也需要更新包含 BEA 代码的 jar 文件。其中一些文件位于“应用程序”级别,而另一些文件在每个“门户 Web 应用程序”的 WEB-INF/lib 目录中。

补丁以 jar 文件形式发行,其中包括的 jar 包含已更改的代码。发布补丁时,应将其放在两处:第一处是用以替换原有 JAR 的应用程序,第二处是 WLP 安装位置,以便将来的应用程序包含它。

本模式讨论升级或修补 WLP 应用程序时有时会遇到的各种问题。其中的许多问题只要知道查找途径和寻找内容即可解决。此外,您应尽力为支持代表收集更多信息,这将使问题得到更快解决。

故障排除

请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。
(DRE:如果在执行了以下所有任务后仍然不能解决问题,就应将问题提交给高级工程师做进一步探查。)

为什么发生此问题?

根据升级或补丁的类型、复杂性、所涉及的其它补丁以及其它许多因素,可能会发生以下一个或多个问题。请注意,您发现的异常或问题可能看起来与示例相似,然而它们所指的却是其它故障。这些示例仅供作为执行诊断及可能的修理过程时的参考指南。
  1. 数据库错误,找不到表
    Caused by: com.bea.p13n.entitlements.common.PolicyMgmtAccess
    Exception: Attempt to access Entitlement Policy Mgmt API by user in invalid role.
    Entitlement Policy operation attempted by disallowed user ["Unable to migrate
    DA policy ref data from LDAP to RDBMS"].
    ...
    Caused by: java.sql.SQLException: [BEA][Oracle
    JDBC Driver][Oracle]ORA-00942: table or view does not exist
    ...

    这可能是因升级之后未安装新表或对 schema 所做更改而引起的。请记住运行 BEA 所提供的任何 SQL 更改,检查授权以确保表可见,并且确保在正确的表空间中创建表。另外,现有的 JAR 较旧或不正确可能会导致运行不正确的查询。下文将对此做更多探讨。

  2. NoClassDefFoundError
    java.lang.NoClassDefFoundError: com/bea/content/virtual/VirtualNode
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:141)
    at com.bea.netuix.servlets.controls.content.backing.Jsp-
    BackingFileFactory.newInstance...
    at com.bea.netuix.servlets.controls.content.backing.Jsp-
    BackingFileFactory.getBackingFileInternal...
    at com.bea.netuix.servlets.controls.content.backing.Jsp-
    BackingFileFactory.getBackingFile...
    at com.bea.netuix.servlets.controls.Backable$Impl.initialize-
    BackingFile(Backable.java:114)
    at com.bea.netuix.servlets.controls.page.Book.init(Book.java:94)
    at com.bea.netuix.nf.ControlLifecycle$1.visit(ControlLifecycle.java:149)
    at com.bea.netuix.nf.ControlTreeWalker.walkRecursive
    (ControlTreeWalker.java:280)
    ...

    这可能是表示升级出错最明显的迹象。由于组成 WLP 的 JAR 互相引用,所以要求它们在版本和 Service Pack 级别方面必须一致。不可以只是因为 SP4 中修复了某个问题,就用 SP4 jar 替换 SP3 jar。可是大多数情况下,某个 JAR 仍然针对的是较早的 Service Pack,从而导致这种结果。

      解决方法备注
    • 在日志中查找未找到的类名
    • 查明引起异常的根源
    • 运行 Portal Consistency Checker 工具,以验明是否有 JAR 不匹配
    • 使用 WL Workshop 展开不一致的 jar,然后用内置编辑器打开 /META-INF/manifest.mf 文件。
    • 查找发行信息,查看其中是否提到那个错误的 jar。
    • 更新门户库,看看这样是否能修复该问题
    (DRE:使用源代码浏览器在堆栈跟踪中所见行号处查找类实例化。)
  3. 更新门户库无法进行

    为了确保门户库已从 WL Workshop 内得到更新,请务必检查文件目录以确保 JAR 文件并非只读。如果使用源码控制而未将文件签出,则可能会出现这种情况。如果从别处复制文件且保持文件属性,也可能会出现这种情况。

      解决方法备注
    1. 关闭 WL Server,关闭 WL Workshop
    2. 通过命令提示符或 Windows 资源管理器删除 /.workshop
    3. 删除 /workshop、/javelin-jar-store 和 /wlw*
      (在 Win32 命令提示符处键入“set”,找到临时目录。在 UNIX 上,它通常为 /var/tmp)
    4. 扫描 /META-INF 和 //WEB-INF/lib,查找可能为只读的 jar 文件。必要时,使用源码控制将文件签出
    5. 打开 WL Workshop 和您的应用程序。右键单击该应用程序 -> Install -> Update Portal Libraries
    6. 检查文件日期和“表明”条目以获得正确的 Service Pack 信息
  4. 补丁消失

    WLP 补丁经常重叠。例如,假设您安装了 CR123456(仅为举例)而且它运行完全正常。然后,您在与另一问题的支持人员配合工作时发现自己需要 CR134567。这两个补丁都包含一份 netuix_servlet.jar。安装第二个补丁后,通过 CR123456 已解决的问题会再次出现。在此情况下,您需要与支持人员配合工作,以确保他们知道您在获得另一补丁之前都在运行哪些补丁。这样做的目的是确保这些补丁相互兼容。

    (DRE:请与客户共同确定先前的补丁,然后查看每个 CR 的注释,以了解是否有补丁必须进行滚动升级。若如此,CCE 便需要照办。)
  5. 补丁在另一应用程序中不起作用

    如果收到补丁后只将其放在了正在使用的应用程序中,则需要确保将该补丁也放在安装目录中。例如,如果某一补丁包含 netuix_servlet.jar,请在以下位置放置一份:

    BEA_HOME_DIR\weblogic81\portal\lib\netuix\web\netuix_servlet.jar

    如果发生这种情况,您需要将其手动复制到新的应用程序,因为它在创建时会自动复制到每一个新的 Web 应用程序中。

其它备注

  1. 有可能存在这种情况:您所使用的补丁并未加入到您要升级到的下一 Service Pack 中。请与支持人员进行核对,因为您可能会再次需要为当前 Service Pack 所建立的同一补丁。留意所运行的补丁并在升级时将其通知支持人员,这种做法始终是可取的。
  2. 使用 Portal Consistency Checker 工具。这是一个通用工具,可以用来对比该 Service Pack 的基础安装检查应用程序中的所有 JAR 文件。只有已知具有补丁的 JAR 才应存在差异。

    Portal Consistency Checker
    (在 8.1 上也完全能工作)

  3. 手动检查一致性的一种方式是使用 JAR 声明文件。可以使用 WL Workshop、Winzip 查看此信息,也可以解开 jar 然后使用文本编辑器来查看此信息。对于已修补的 JAR,表明文件中应出现以下内容:
    Implementation-Title: BEA WebLogic Portal 8.1 SP3
    Implementation-Version: 8.1.3.0 with CR189681
    Implementation-Vendor: BEA Systems, Inc.

    对于补丁,使用命令提示符查看表明文件内容的方式如下:
    C:\tmp>jar xvf C:\weblogic\user_projects\applications\portal\PortalApp\wps.jar META-INF/MANIFEST.MF
    extracted: META-INF/MANIFEST.MF

    C:\tmp>type META-INF\MANIFEST.MF
    Manifest-Version: 1.0
    Specification-Title: BEA WebLogic Portal 8.1 SP4 11/30/2004 04:22:17 #471877
    Class-Path: wps_util.jar p13n_ejb.jar content.jar
    Created-By: Apache Ant 1.5
    Implementation-Title: BEA WebLogic Portal 8.1 SP4 11/30/2004 04:22:17 #471877
    Specification-Vendor: BEA Systems, Inc.
    Specification-Version: 8.1.4.0
    Implementation-Version: 8.1.4.0
    Implementation-Vendor: BEA Systems, Inc.
    Implementation-URL: http://www.bea.com/

    C:\tmp>

  4. 使用 Portal/p13n 调试可获得低级调试信息。通常,可以为单个类或包开启调试功能,这样便可看到可能有助于发现问题所在的消息。例如,查询失败时可能会在调试输出中显示表名和列名,同时会示意您查看 schema。记住将以下文件放置在您的域起始目录中,然后重新启动服务器。

    P13n Debugging Guidelines (English)

    debug.properties 文件示例
    reloadable: off
    usePackageNames: on

    #Example of package-level with all subpackages
    com.bea.content

    #Example of particular class file
    com.bea.campaign.internal.CampaignEventListener

    #Comment it out to stop the debugging
    #com.bea.campaign


  5. 升级之前应该全文阅读 Release Notes、Upgrade Guides 和 Supported Configurations。对数据库所做的任何更改、其它配置更改以及行为差异都将在此详陈。

    Portal Release Notes (English)
    Portal Upgrade Guide (English)
    Supported Configurations (English)