部署问题故障排除

问题描述:
  • WebLogic Server 无法正确部署应用程序。
  • 服务器选择的是旧版本的应用程序,而不是重新部署的新版本的应用程序。
故障排除:
请注意,并非下面所有任务都需要完成。有些问题仅通过执行几项任务就可以解决。

快速链接:

可部署应用程序类型和部署目标类型
部署单元是指根据 J2EE 规范进行组织并可部署到 WebLogic Server 的 J2EE 应用程序(企业应用程序或 Web 应用程序)或独立 J2EE 模块(EJB 或资源适配器)。

WebLogic Server 也支持 Web Service 模块的部署,J2EE 规范中并未包含此类模块。

一个企业应用程序由一个或多个下列 J2EE 应用程序或模块组成:
  •  Web 应用程序
  •   Enterprise Java Bean (EJB) 模块
  •   资源适配器模块
使用 jar 实用程序打包的部署单元使用各自专用的文件扩展名,部署单元的类型决定它使用的文件扩展名:
  •    EJB 打包后生成的文件的扩展名是 .jar。
  •    Web 应用程序打包后生成的文件的扩展名是 .war
  •    资源适配器打包后生成的文件的扩展名是 .rar
  •    企业应用程序打包后生成的文件的扩展名是 .ear
  •    Web Service 打包后生成的文件的扩展名可以是 .ear.war
大多数部署单元均可以打包文件格式或展开目录格式进行部署,只有资源适配器模块例外,它不能以展开目录格式进行部署。
部署目标可以是 WLS 服务器、群集或虚拟主机。

返回页首

部署工具
WLS 提供了以下几种模式来部署应用程序:
  •   通过管理控制台
  •   weblogic.Deployer 工具
  •   wldeploy Ant 任务
  •   weblogic.management.deploy API
  •   如果是以开发模式运行,则可以通过复制应用程序目录下的模块进行部署。 
  有关详细信息,请查阅开发/生产模式差异。

有关部署工具的详细信息,请参阅 http://e-docs.bea.com/wls/docs81/deployment/tools.html#999152 (English)。

返回页首

Stage 模式
WebLogic Server 为分级文件提供了以下三种不同的模式:stage 模式、nostage 模式external_stage 模式。下表详细说明了上述模式的工作方式:
http://edocs.bea.com/wls/docs81/deployment/overview.html#1036753

(English) stage 模式的缺省值:
  • 对于被管服务器:stage 模式的缺省值是 stage,这意味着缺省的 stage 行为是将应用程序文件复制到其目标被管服务器
  • 对于管理服务器:stage 模式的缺省值是 nostage,这意味着缺省 stage 行为是从提供的源位置进行部署
返回页首

开发/生产模式
可以利用 applications 目录在开发服务器中快速部署应用程序。WebLogic Server 实例以开发模式运行时,会自动部署您置于该目录中的所有应用程序或模块。

自动部署功能会检查 applications 文件夹,以确定是否有新生成的应用程序或现有应用程序是否有更改,然后会动态地部署这些更改。
Auto Update Interval 的缺省值为 3000 毫秒。可以通过管理控制台更改该值,具体方法为:在左窗格中选择域的名称,然后在“Applications”选项卡中更改间隔值。

对于以开发模式运行的服务器,自动部署功能处于启用状态。要禁用自动部署功能,请使用下列方法之一将服务器转入生产模式:
  • 在管理控制台中,在左侧窗格中单击域的名称,然后在右侧窗格中选中“Production Mode”复选框。
  • 在命令行中,请使用以下参数启动域的管理服务器:
                    -Dweblogic.ProductionModeEnabled=true

缺省情况下,被管服务器与管理服务器的启动模式相同。在 WLS 8.1 SP3 及以后的版本中,您可以更改被管服务器的启动模式,使之不同于管理服务器的启动模式(在 8.1SP3 中,已通过 CR127698 / CR132901 (English) 修正了该问题)。

返回页首

展开目录/归档格式
大多数部署单元均可以打包文件格式或展开目录格式进行部署。下面列出了这些格式的常见优点和缺点:
  • 以展开目录格式部署时,可以更新静态文件,以归档格式部署时则无法进行更新。
  • 以展开目录格式部署时,可以重新部署应用程序的一部分而无需重新部署整个应用程序。
  • 以展开目录格式部署时,可以通过控制台编辑部署描述符。
  • 如果以 nostage 模式和展开目录格式进行部署,WebLogic 会自动检测部署的 JSP 或 Servlet 发生的更改,并更新部署。
  • 以归档格式部署便于打包模块和应用程序来进行展开目录。打包文件更易于复制,因为与展开目录格式的目录比较,它们占用的文件句柄数较少,而且由于进行了文件压缩,它们可以节省磁盘空间。

返回页首

排除部署故障
 下面列出了可能会遇到的常见部署故障:
  • 部署应用程序时,如果出现 java.util.ZipException 错误,请证实以下情况:
    •  如果以展开目录格式部署,拥有对 ear 应用程序文件或目录的读/写权限
    •  应用程序的路径正确
    •  应用程序路径名称中没有多余的空格。有关详细信息,请参阅 CR120603 (English),该问题已在 8.1SP2 中得到解决。
  • 如果部署描述符 application.xml 不正确,则可能导致与以下类似的部署异常:  
    weblogic.management.ApplicationException: weblogic.management.DeploymentException: Error while loading descriptors: Error parsing file 'META-INF/application.xml
  • 如果您拥有部署应用程序的访问权限,请证实您拥有在指定目标上部署应用程序的权限。有关详细信息,请参阅 CR135329 (English),该问题已在 81SP3 中得到解决。部署异常可能与如下所示的类似: 
    Access not allowed for subject:principals=[foouser, Deployers], on ResourceType:Cluster Action:execute, Target:addDeployment
  • 如果在 Windows 系统的计算机上运行 weblogic.Deployer 以在 Unix 系统的服务器上部署应用程序,则会发生类似的异常:
    [java] weblogic.management.ApplicationException:[J2EE:160029]I/O error while reading deployment - java.io.FileNotFoundException:No such path c:\bea\test/dir/test.ear
    这是由于部署程序在部署阶段构造的路径中混合使用了 Windows 和 Unix 两种格式 (c:\bea\test/dir/test.ear)。要避免发生此类部署异常,需要使用 weblogic.Deployer-uploadweblogic.Deployer 选项,这样在部署前应用程序文件会被上传到 WebLogic Server。有关详细信息,请查阅 http://e-docs.bea.com/wls/docs81/deployment/tools.html#999152
    (English) 中的所有选项。
  • 尽管在各服务器上进行单独部署时均告成功,但在向整个群集部署时却失败。请确认是否将 ClusterConstraintsEnabled 设置为 true。缺省情况下,在当前可连接服务器上可以成功进行群集部署,当前不可连接服务器在可连接时才能进行群集部署。
  • 如果在部署/取消部署应用程序时遇到 OutOfMemoryException,请尝试在启动脚本中这样设置 Java 选项:–XX:MaxPermSize=128M,也可以将其设置为更大的值,实际使用的值可根据堆大小来确定。有关此选项的详细信息,请查阅 http://java.sun.com/docs/hotspot/VMOptions.html(有关已在 8.1SP3 中得到解决的 OutOfMemory 异常问题的信息,请参阅 CR127393CR132685 (English))
  • 如果正在部署大型应用程序,所需的部署超时大于缺省的 60 分钟超时值,则需要指定超时。可以在控制台中指定超时值,也可将其作为 weblogic.Deployer 的参数加以指定。请注意问题 CR128537 (English),该问题的故障现象是:为 weblogic.Deployer 设置的超时值未得到执行。该问题在 8.1SP3 中已得到解决。
返回页首

排除更新失败故障
如果正在进行重新部署,却发现部署的仍然是旧版本的应用程序,则需要确认以下各项:
  • 所使用的 stage 模式。目标服务器使用可用的部署文件:如果部署单元是以 stage 模式进行部署,则使用部署文件的本地副本;如果部署单元是以 nostage 模式进行部署,则使用原始部署文件。
  • 确认服务器的 stage 目录。有时需要清理 stage 目录,以确保应用程序得到正确的重新部署,且部署的是新版本的应用程序。缺省 stage 目录在 domainDir\Serverdir\stage 下。
  • 确认 .wlnotdelete 是否包含旧版本的应用程序。可能需要在 Weblogic 服务器退出时清理该目录。
  • 如果需要更新静态文件,请确保应用程序是以展开目录格式部署的。
  • 确认系统类路径中不存在相同的应用程序或 EJB jar 文件。
  • 如果对新模块使用 weblogic.Deployer –deploy 选项来将其添加到已部署的应用程序中,则需要确保已对 application.xml 进行了更新,使其包含此新模块,否则将不会部署此新模块。
  • 如果正在重新部署单独的 EJB 实现类,却发现使用的仍是旧版本,请确保 weblogic-ejb-jar.xml 中的节 <enable-bean-class-redeploy> 的设置值为 true。
  • 如果在 servlet 中启动自己的守护线程,则重新部署 webapp 时 WebLogic 将无法停止这些线程,因而仍会继续运行旧版本。  
返回页首


排除部署时的 JSP 预编译故障
如果正在部署某个 webapp,其时 weblogic.xml 中的标志‘precompile’的设置值为 true,且已经使用 jspc 预编译了 JSP,则预期的行为将是:部署时只对修改过的 JSP 而不是所有 JSP 进行预编译。如果您发现对所有 JSP 都进行了预编译,则需要检查以下各项:  
  • 预编译和部署时使用的 WLS 版本及包含一次性补丁的 Service Pack 级别相同。
  • 开发计算机(进行编译的计算机)与部署计算机使用的时区相同。
  • 编译过的类位于 WEB-INF\classes\jsp_servlet 下,其中 jsp_servlet 通常是缺省的 PackagePrefix;如果在 weblogic.xmljsp-descriptor 中或 WEB-INF\lib 下的 jar 文件中对其进行了更改,则将是更改后的值。
  • 这里存在一个已知问题,即如果以 war 文件而非展开目录格式进行部署,将会对子上下文中的 JSP 进行预编译。在 8.1SP3 中,问题 CR124505 (English) 已得到解决。
有关如何排除 JSP 重新编译故障的更多详细信息,请参阅调试“预编译的 JSP 被重新编译”
返回页首


已知问题
除查阅上面提到的特定 CR 外,还可以定期查看所用 WLS 版本的发行说明,了解 Service Pack 中的已知问题或已解决问题的详细信息并浏览与部署有关的问题。方便起见,下面提供了这些发行说明的链接:
使用搜索功能也可以搜索到“Release Notes”,还可以搜索到其它支持解决办法及与 CR 有关的信息,如需要更多帮助?中所提到的内容。如果客户签订了技术支持合同,则可以登录 http://support.bea.com/,登录后会看到为 Solutions 和 BugCentral 提供的 Browse portlet,可在其中按产品版本浏览最新提供的 CR。

返回页首


调试标志
可以启用以下标志:MasterDeployerSlaveDeployerDeploymentTaskRuntimeDeployerRuntimeApplicationContainer

请注意,要启用这些调试标志,需要在启动脚本中将它们作为 weblogic.Debug 的参数,因为它们在 ServerDebug Mbean 中无法单独使用。例如,要启用 weblogic.MasterDeployer,需要在启动脚本的 JAVA_OPTIONS 部分添加以下内容:
-Dweblogic.Debug=weblogic.MasterDeployer

如果要启用多个标志,可以使用逗号进行分隔,如下所示:
-Dweblogic.Debug=weblogic.MasterDeployer,weblogic.SlaveDeployer, weblogic.DeploymentTaskRuntime,weblogic.DeployerRuntime,
weblogic.ApplicationContainer

请确保 StdoutDebugEnabled 的设置值为“true”。可以在 config.xml 中确认该项设置。可以通过控制台或命令行来启用调试到 stdout 选项:
-Dweblogic.StdoutDebugEnabled=true

返回页首


需要更多帮助?
如果您已经理解这个模式,但仍需要其它帮助,您可以:
  1. http://support.bea.com/ 上查询 AskBEA(例如,使用“deployment issues”),以查找其它已发布的解决办法。技术支持合同客户:确保已经登录,可以访问提供的与 CR 有关的所有信息。
  2. http://newsgroups.bea.com/ 上,向 BEA 的某个新闻组提出更详细具体的问题。
如果这还不能解决您的问题,并且您拥有有效的技术支持合同,您可以通过登录以下网站来打开支持案例:http://support.bea.com/

反馈

请给我们提供您的意见,说明此支持诊断模式“部署问题故障排除”一文是否有所帮助、您需要的任何解释,以及对支持诊断模式的新主题的任何要求。


免责声明:

依据 BEA 与您签署的维护和支持协议条款,BEA Systems, Inc. 在本网站上提供技术技巧和补丁供您使用。虽然您可以将这些信息和代码与您获得 BEA 授权的软件一起使用,但 BEA 并不对所提供的技术技巧和补丁做任何形式的担保,无论是明确的还是隐含的。

本文档中引用的任何商标是其各自所有者的财产。有关完整的商标信息,请参考您的产品手册。

返回页首