国际化服务错误
某些情况可能导致国际化服务无法启动、当应用程序正在运行时抛出 java.lang.IllegalStateException 异常或导致缺省行为。
- 应用程序组件尝试了国际化编程模型不支持的一个操作。
当国际化类型设置为容器管理的国际化 (CMI) 的服务器应用程序组件尝试设置调用上下文时,将抛出 IllegalStateException 异常。此行为违背了 CMI 策略,根据此策略,servlet 和企业 Bean 不能修改它们的调用国际化上下文。
- 出现异常,它禁用了服务。
例如,如果未正确初始化国际化服务,那么 UserInternationalization URL 属性中的 Java™ 命名和目录接口 (JNDI) 查询将抛出包含 IllegalStateException 实例的 javax.naming.NameNotFoundException 异常。
如果您遇到意外或异常行为,该问题可能与这些情况之一有关。您必须检查跟踪日志以调查这些情况,这需要配置诊断跟踪服务以生成国际化服务功能的相关消息。
com.ibm.ws.i18n.context.*=all=enabled:com.ibm.websphere.i18n.context.*=all=enabled
已禁用服务
清除启动设置时未初始化国际化服务。服务生成一条消息,表明其状态为启用还是禁用。当禁用服务时,应用程序无法访问国际化 API。如果应用程序尝试进行 JNDI 查找以获取 UserInternationalization 引用,查找将失败并抛出 NamingException 异常,表明找不到引用。此外,服务不会将国际化上下文作用于(传播到)入局(出局)业务方法。
未启动服务
只要国际化服务处于“启动”状态,它就是可用的。例如,如果应用程序尝试访问国际化上下文而服务尚未启动,API 将抛出 IllegalStateException 异常。此外,该服务没有为 servlet 和企业 Bean 提供运行时支持。
在应用程序服务器的生命周期中,它依次初始化、启动、停止并终止(破坏)国际化服务。如果在初始化过程中出现异常,那么不会启动服务。启动服务后,如果出现严重错误,服务状态可能更改为“受阻”。服务将为每次状态更改生成一条消息。
如果跟踪消息表明服务尚未“启动”,请检查先前的消息以确定问题。例如,如果在国际化服务的初始化过程中活动服务不可用,那么国际化服务不会启动并将显示一条消息。
- 无 ORB 支持
- 服务无法获取对象请求代理 (ORB) 的一个实例。这种情况是致命错误。检查 SystemErr.log 和 SystemOut.log 文件以获取相关信息。注: 本主题引用了一个或多个应用程序服务器日志文件。作为另一种建议采用的方法,您可以在分布式系统和 IBM® i 系统上配置服务器以使用高性能可扩展日志记录 (HPEL) 记录和跟踪基础结构,而不使用 SystemOut.log、SystemErr.log、trace.log 和 activity.log 文件。您还可以将 HPEL 与本机 z/OS® 日志记录设施结合使用。如果要使用 HPEL,那么可从服务器概要文件 bin 目录使用 LogViewer 命令行工具来访问所有日志和跟踪信息。有关使用 HPEL 的更多信息,请参阅有关使用 HPEL 对应用程序进行故障诊断的信息。
- 无 TCM 支持
- 服务无法获取其线程上下文管理器 (TCM) 的一个实例。这种情况是致命错误。检查 SystemErr.log 和 SystemOut.log 文件以获取相关信息。
- 无 IIOP(活动服务)支持
- 服务无法向活动服务注册。这种情况是致命错误。没有活动服务支持,国际化服务将无法传播或接收因特网 ORB 间协议 (IIOP) 请求中的上下文。检查 SystemErr.log 和 SystemOut.log 文件以获取相关信息。
- 无 AsynchBeans 支持
- 服务无法注册到异步 bean 环境中。该警告表明异步 bean 环境无法支持国际化上下文。
- 无 EJB 容器支持
- 服务无法向 Enterprise JavaBeans (EJB) 容器注册。该警告表明国际化服务无法支持企业 Bean。没有 EJB 容器支持,国际化上下文无法正确作用于 EJB 业务方法。请查看跟踪日志以了解与 EJB 容器相关的任何出错条件。
- 无 Web 容器支持
- 服务无法向 Web 容器注册。该警告表明国际化服务无法支持 servlet 和 JavaServer Page (JSP) 文件。没有 Web 容器支持,国际化上下文无法正确作用于 servlet 服务方法。请查看跟踪日志以了解与 Web 容器相关的任何出错条件。
- 无元数据支持
- 服务无法向元数据服务注册。该警告表明国际化服务无法处理应用程序部署描述符中的国际化策略。没有元数据支持,服务将缺省国际化上下文管理策略 [CMI, RunAsCaller] 与每个 servlet 生命周期方法及企业 Bean 业务方法调用关联起来。请查看跟踪日志以了解与元数据服务相关的任何错误情况。
- 无 JNDI(命名服务)支持
- 服务无法将 UserInternationalization 对象绑定到名称空间中。这种情况是致命错误。应用程序组件无法访问国际化上下文 API 引用,因此无法访问国际化上下文元素。请查看跟踪日志以了解与命名 (JNDI) 服务相关的任何出错条件。
- 无 API 支持
- 服务无法获取国际化上下文 API 对象的一个实例。这种情况是致命错误。应用程序组件无法访问国际化上下文 API 引用,因此无法访问国际化上下文元素。
无效的上下文元素
服务检测到一个无效的国际化上下文元素。例如,国际化服务不支持 java.util.SimpleTimeZone 以外的 TimeZone 实例类型。如果服务遇到无法使用的元素,它将记录一条消息并将该元素替换为相应的 JVM 缺省元素。
缺少上下文元素
服务检测到缺少一个国际化上下文元素。入局请求(例如,来自不支持国际化服务的应用程序服务器的请求)缺少国际化上下文。当服务尝试访问调用者国际化上下文元素时(在这种情况下它不存在),服务将记录一条消息并将该元素替换为相应的 Java 虚拟机 (JVM) 缺省元素。
对于构成国际化的企业应用程序的所有客户机和主管应用程序服务器,请尽可能启用其中的国际化服务。有关更多信息,请参阅管理国际化服务。
无效策略
国际化服务在应用程序部署描述符中检测到一个格式不正确的国际化策略。服务将以适当的缺省值替换这个格式不正确的属性。例如,如果在运行 servlet 或 EJB 业务方法调用的过程中,实体 Bean 的国际化类型设置为应用程序,服务将记录不一致性并强制使用容器设置。
并且,AMI 应用程序组件确实具有一个隐式容器国际化属性。缺省情况下,它们以服务器方式运行。服务静默实施隐式策略 [AMI, RunAsServer] 并记录相关的消息。
指定“语言环境”和“时区标识”字段时,可能会出现无效的容器国际化属性。在属性中遇到无效的语言环境和时区标识时,服务将每个值替换为相应的 JVM 缺省元素。请务必按照组装国际化的应用程序中提供的准则操作。
缺少策略
服务检测到缺少一个国际化策略。服务将以适当的缺省值替换缺少的策略。例如,如果缺少 servlet 或企业 Bean 的国际化类型,服务将属性设置为“容器”。
对于 CMI 应用程序组件,容器国际化属性不是必需的。如果 CMI servlet 或 EJB 业务方法缺少容器国际化属性,服务将静默实施隐式策略 [CMI, RunAsCaller]。
当应用程序的部署描述符中缺少国际化策略或元数据支持不可用时,服务将记录一条消息并对每个 servlet 服务方法和 EJB 业务方法调用应用策略 [CMI, RunAsCaller]。