访问调用语言环境和时区

执行此任务以访问调用国际化上下文的元素。

开始之前

应用程序组件首先必须解析对 InvocationInternationalization 对象的引用,然后将它绑定到国际化上下文 API 的 InvocationInternationalization 接口。

关于此任务

servlet 服务或 Enterprise JavaBeans (EJB) 业务方法的每个远程调用都有一个与运行该调用的线程关联的调用国际化上下文。调用上下文是 servlet 和业务方法实现运行所在的国际化上下文;国际化服务和中间件将在后续调用中传播它。此任务还适用于 Web Service 客户机程序。

过程

  1. 获取需要的调用上下文元素。
    java.util.Locale myLocale;
    try {
      myLocale = invocationI18n.getLocale();
    }
    catch (IllegalStateException ise) {
      // The invocation context is unavailable; 
      // is the service started and enabled?  
    }
    ...
    InvocationInternationalization 接口包含获取和设置调用国际化上下文元素的下列方法:
    • Locale [] getLocales()。返回与当前线程关联的调用语言环境的列表。
    • Locale getLocale()。返回调用语言环境列表中与当前线程关联的第一个调用语言环境。
    • TimeZone getTimeZone()。返回与当前线程关联的 SimpleTimeZone 调用。
    • setLocales(Locale [])。将与当前线程关联的调用语言环境的列表设置为提供的列表。
    • setLocale(Locale)。将与当前线程关联的调用语言环境的列表设置为一个包含提供的语言环境的列表。
    • setTimeZone(TimeZone)。将与当前线程关联的调用时区设置为提供的 SimpleTimeZone。
    • setTimeZone(String)。将与当前线程关联的调用时区设置为包含提供的标识的 SimpleTimeZone。

    InvocationInternationalization 接口支持在应用程序组件中对调用国际化上下文具有读和写访问权。但是,根据国际化上下文管理策略,只有配置为管理国际化上下文的组件(应用程序管理的国际化或 AMI 组件)对调用国际化上下文元素具有写访问权。调用在容器管理的国际化 (CMI) 应用程序组件中设置的调用上下文元素将导致 java.lang.IllegalStateException 异常。国际化上下文中说明了应用程序组件使用 InvocationInternationalization 方法时所存在的使用方式差别。

  2. 使用调用上下文元素根据调用进程的语言环境或时区对计算进行本地化。
    DateFormat df = DateFormat.getDateInstance(myLocale);
      String localizedDate = df.getDateInstance().format(aDateInstance);
      ...

示例

在以下代码示例中,语言环境 (en,GB) 和简单时区 (GMT) 在对 myBusinessMethod 方法的调用中进行透明传播。服务器端应用程序组件(如 myEjb)可以使用 InvocationInternationalization 接口来获取这些上下文元素。
...
//--------------------------------------------------------------------
// Set the invocation context under which the business method or 
// servlet will run and propagate on subsequent remote business 
// method invocations.
//--------------------------------------------------------------------
try {
  invocationI18n.setLocale(new Locale("en", "GB"));
  invocationI18n.setTimeZone(SimpleTimeZone.getTimeZone("GMT"));
}
catch (IllegalStateException ise) {
  // Is the component CMI; is the service started and enabled?  
}
myEjb.myBusinessMethod();

在 CMI 应用程序组件中,Internationalization 和 InvocationInternationalization 接口在语义上是等效的。您可以使用这两个接口中的任何一个来获取与组件运行所在的线程关联的上下文。例如,这两个接口都可以用于获取传播到 servlet doPost 服务方法的语言环境列表。


指示主题类型的图标 任务主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=tin_accessinvoctz
文件名:tin_accessinvoctz.html