应用程序客户机故障诊断技巧
使用此故障诊断指南对常见 Java™ Platform, Enterprise Edition (Java EE) 应用程序客户机问题进行调试。复查某个 Java EE 应用程序客户机异常的跟踪条目,然后在指南中找到该异常。
该指南中的一些错误是样本,并且您遇到的实际错误可能与此处显示的错误有所不同。您可能会发现指定 -CCverbose=true 选项对于重新运行 launchClient 命令有帮助。此选项提供 Java EE 应用程序客户机运行时初始化时的其他信息。
错误:java.lang.NoClassDefFoundError
说明 | 可能的原因 | 建议响应 |
---|---|---|
当 Java 代码无法装入指定类时,抛出此异常。 |
|
检查确定指定的类是否存在于企业归档 (EAR) 文件中的 Java 归档 (JAR) 文件中。如果存在,请确保类的路径是正确的。例如,如果您收到异常:
java.lang.NoClassDefFoundError: WebSphereSamples.HelloEJB.HelloHome验证 HelloHome 类存在于 EAR 文件中的某个 JAR 文件中。如果存在,验证类的路径是否为 WebSphereSamples.HelloEJB。 |
- 使用组装工具打开 EAR 文件并选择 Application Client。
- 将 EAR 文件中的其他 JAR 文件名添加到“类路径”字段中。
如果您在“类路径”字段中输入了多个 JAR 文件,那么确保用空格分隔各个 JAR 名称。
如果问题依然存在,那么您的类是从文件系统装入的,而非是从 EAR 文件装入的。这种错误很难调试,因为违规的类不是异常中指定的那个。而是在装入异常中指定的一个类之前从文件系统装入了另一个类。要改正此错误,查看使用 -CCclasspath 选项指定的类路径和使用“应用程序客户机资源配置工具”配置的类路径。
或者,您可以使用“客户机容器资源配置脚本编制”工具。
查找同时存在于 EAR 文件中的类。您必须解决在文件系统中找到类而不是在 EAR 文件中找到类的情况。从类路径中移除条目,或通过在 EAR 文件中包括 JAR 文件和类,而不是从文件系统上对它们进行引用。
如果您在该工具中使用 -CCclasspath 参数或资源类路径,并且已经配置了多个 JAR 文件或类,那么验证这些文件或类是否用操作系统的正确字符分隔开来。与“类路径”字段不同,这些类路径字段使用特定于平台的分隔符。
该分隔符为冒号。
该分隔符为分号。
错误:com.ibm.websphere.naming.CannotInstantiateObjectException
错误:com.ibm.websphere.naming.CannotInstantiateObjectException:尝试获取已指定引用对象的对象实例时发生异常。[根异常为 javax.naming.NameNotFoundException: xxxxxxxxxx]
说明 | 可能的原因 | 建议响应 |
---|---|---|
当您查找尚未安装在主机服务器上的对象时发生此异常。您的程序可能在本地客户机 Java 命名和目录接口 (JNDI) 名称空间中查找名称,但是检索到 NameNotFoundException 异常,因为它没有位于主机服务器上。一个典型示例是查找未安装在您访问的主机服务器上的 EJB 组件。如果您在应用程序客户机模块中配置的 JNDI 名称与主机服务器上资源的实际 JNDI 名称不匹配时,也可能发生此异常。 |
|
如果您正在访问错误的主机服务器,那么再次运行 launchClient 命令,并以 -CCBootstrapHost 参数指定正确的主机服务器名。如果您要访问的是正确的主机服务器,那么使用产品 dumpnamespace 命令行工具查看主机服务器 JNDI 名称空间的列表。 如果您未看到失败对象名,那么未在主机服务器上安装此资源或是未启动适当的应用程序服务器。如果您确定已安装并启动了资源,那么客户机应用程序中的 JNDI 名称与主机服务器上的全局 JNDI 名称不匹配。使用组合件工具将客户机应用程序中失败对象名的 JNDI 绑定值与主机服务器应用程序中对象的 JNDI 绑定值进行比较。这两个值必须匹配。 |
错误:javax.naming.ServiceUnavailableException
错误:javax.naming.ServiceUnavailableException:尝试使用供应商 url“iiop://[invalidhostname]”获取初始上下文时,发生通信故障。请确保主机和端口 信息正确,并确保提供程序 URL 所标识的服务器是运行中的名称服务器。如果未指定端口号,那么将使用缺省端口号 2809。其他可能的原因包括:网络环境或工作站网络配置。 根异常为 org.omg.CORBA.INTERNAL:JORB0050E:在 Profile.getIPAddress() 中,InetAddress.getByName[invalidhostname] 抛出 UnknownHostException。次代码:4942F5B6 已完成:大概
说明 | 可能的原因 | 建议响应 |
---|---|---|
当指定一个无效的主机服务器名时,发生此异常。 |
|
再次运行 launchClient 命令,并使用 -CCBootstrapHost 参数指定正确的主机服务器名。 |
错误:javax.naming.CommunicationException
错误:javax.naming.CommunicationException:由于通信故障,无法获取初始上下文。 由于未指定供应商 URL,所以或者使用现有 ORB 的引导主机和端口,或者创建一个新的 ORB 实例并使用缺省引导主机“localhost”和缺省引导主机端口 2809 进行初始化。确保 ORB 引导主机和端口能解析到正在运行的名称服务器。根异常为 org.omg.CORBA.COMM_FAILURE:WRITE_ERROR_SEND_1 次代码:49421050 已完成:无
说明 | 可能的原因 | 建议响应 |
---|---|---|
当您对尚未启动 Application Server 的主机服务器运行 launchClient 命令时,会发生此异常。当指定一个无效的主机服务器名时,您也会收到此异常。如果您运行 launchClient 工具时没有指定主机服务器名,那么可能会发生这种情况。launchClient 工具的缺省行为是运行本地主机,因为 WebSphere® Application Server 不知道主机服务器的名称。只有当您在安装了 WebSphere Application Server 的相同机器上运行客户机时,此缺省行为才可用。 |
|
如果您未运行正确的主机服务器,那么再次运行 launchClient 命令并通过 -CCBootstrapHost 参数指定您的主机服务器名。否则,启动主机服务器上的 Application Server,并再次运行 launchClient 命令。 |
![[Windows]](../images/windows.gif)
错误:javax.naming.CommunicationException
错误:javax.naming.CommunicationException: 无法将用户与模式 wasuser6 匹配,因为发生了以下异常:javax.naming.CommunicationException: 简单绑定失败:server_location。根本异常是 javax.net.ssl.SSLHandshakeException: 握手期间远程主机关闭了连接。
说明 | 可能的原因 | 建议响应 |
---|---|---|
使用 LDPA 用户注册表启用管理、应用程序和 Java 2 安全性时发生此异常。Deployment Manager 成功重新启动,但您无法登录到管理控制台。错误消息出现在 SystemOut.log 中。 |
|
清除启用 SSL 选项并再次尝试连接。启用 SSL 选项指定是否要使用 SSL 来保护 WebSphere Application Server 插件和应用程序服务器之间的连接。缺省值为不使用 SSL。 |
错误:javax.naming.NameNotFoundException
错误:javax.naming.NameNotFoundException:上下文 "java:" 中未找到名称 comp/env/ejb
说明 | 可能的原因 | 建议响应 |
---|---|---|
当 Java 代码无法在本地 JNDI 名称空间中定位指定名称时,抛出此异常。 |
|
使用组合件工具打开 EAR 文件,并为失败名称检查绑定。请确保此信息正确。如果您要使用资源引用,那么使用“应用程序客户机资源配置工具”打开 EAR 文件,并验证资源引用是否具有客户机配置信息以及验证资源引用的名称与客户机配置的 JNDI 名称是否完全匹配。 如果这些值都正确,那么可能发生了类装入器错误。 |
错误:java.lang.ClassCastException
错误:java.lang.ClassCastException:在 com.ibm.rmi.javax.rmi.PortableRemoteObject.narrow(portableRemoteObject.java:269) 上无法装入类:org.omg.stub.WebSphereSamples.HelloEJB._HelloHome_Stub
说明 | 可能的原因 | 建议响应 |
---|---|---|
当应用程序尝试缩小到 EJB 起始类,且类装入器无法找到 EJB 客户机端机绑定时,会发生此异常。 |
|
查看 EJB JAR 文件(位于 EAR 文件中),验证类是否包含 Enterprise Java Bean (EJB) 客户机端绑定。这些是文件名以 _Stub 和 _Tie 结尾的类文件。如果绑定类在 EJB JAR 文件中,那么可能发生了类装入器错误。 |
错误:WSCL0210EError: java.lang.NoClassDefFoundError
错误:WSCL0210E:未找到企业归档文件[EAR 文件名]。com.ibm.websphere.client.applicationclient.ClientContainerException: com.ibm.etools.archive.exception.OpenFailureException
说明 | 可能的原因 | 建议响应 |
---|---|---|
当应用程序客户机运行时无法读企业归档 (EAR) 文件时,发生该错误。 | 出现该错误的最大可能原因是系统无法在 launchClient 命令上指定的路径中找到 EAR 文件。 | 验证 launchclient 命令上指定的路径和文件名是否正确。
|
当客户机应用程序完成时,launchClient 命令出现挂起且不返回到命令行。
说明 | 可能的原因 | 建议响应 |
---|---|---|
当使用 launchClient 命令运行您的应用程序客户机时,WebSphere Application Server 运行时可能需要显示安全登录对话框。为了显示此对话框,WebSphere Application Server 运行时创建抽象窗口工具箱 (AWT) 线程。当应用程序从它的主要方式返回到应用程序客户机运行时,应用程序客户机运行时试图返回到操作系统并结束 Java 虚拟机 (JVM) 代码。但是,由于存在 AWT 线程,所以直到调用 System.exit,JVM 代码才会结束。 | 因为存在 AWT 线程,所以 JVM 代码不会结束。Java 代码需要调用 System.exit() 以结束 AWT 线程。 |
|
![[Windows]](../images/windows.gif)
Applet 客户机应用程序客户机未能在 Internet Explorer 中启动 HTML 浏览器
说明 | 可能的原因 | 建议响应 |
---|---|---|
Applet 客户机应用程序只能运行在 Windows 系统上。当 Applet 客户机应用程序运行时,应用程序输出数据会显示在浏览器窗口中。如果您正在使用 Windows XP for Service Pack 2 操作系统的 Internet Explorer,那么当您尝试显示输出数据时可能会收到错误。 | Windows XP for Service Pack 2 操作系统包含安全性功能,阻止显示弹出浏览器。 |
|