Perform this task to access elements of the invocation internationalization context.
About this task
Every remote invocation of a servlet service or Enterprise JavaBeans
(EJB) business method has an invocation internationalization context associated with the thread that
is running that invocation. Invocation context is the internationalization context under which
servlet and business method implementations run; it is propagated on subsequent invocations by the
internationalization service and middleware. This task also applies to Web service client
programs.
Procedure
- Obtain the desired invocation context elements.
java.util.Locale myLocale;
try {
myLocale = invocationI18n.getLocale();
}
catch (IllegalStateException ise) {
// The invocation context is unavailable;
// is the service started and enabled?
}
...
The InvocationInternationalization interface contains the following methods to both get and set
invocation internationalization context elements:
- Locale [] getLocales(). Returns the list of invocation locales that is associated with
the current thread.
- Locale getLocale(). Returns the first in the list of invocation locales that is
associated with the current thread.
- TimeZone getTimeZone(). Returns the SimpleTimeZone invocation that is associated with the
current thread.
- setLocales(Locale []). Sets the list of invocation locales that are associated with the
current thread to the supplied list.
- setLocale(Locale). Sets the list of invocation locales that are associated with the
current thread to a list that contains the supplied locale.
- setTimeZone(TimeZone). Sets the invocation time zone that is associated with the current
thread to the supplied SimpleTimeZone.
- setTimeZone(String). Sets the invocation time zone that is associated with the current
thread to a SimpleTimeZone that has the supplied ID.
The InvocationInternationalization interface supports read and write access to invocation
internationalization context within application components. However, according to
internationalization context management policies, only components configured to manage
internationalization context (application-managed internationalization, or AMI, components) have
write access to invocation internationalization context elements. Calls to set invocation context
elements within container-managed internationalization (CMI) application components result in a
java.lang.IllegalStateException exception. Any differences in how application components can use
InvocationInternationalization methods are explained in Internationalization context.
- Use the invocation context elements to localize a computation under a locale or time zone of
the calling process.
DateFormat df = DateFormat.getDateInstance(myLocale);
String localizedDate = df.getDateInstance().format(aDateInstance);
...
Example
In the following code example, locale (en,GB) and simple time zone (GMT) transparently propagate
on the call to the myBusinessMethod method. Server-side application components, such as
myEjb, can use the InvocationInternationalization interface to obtain these context
elements.
...
//--------------------------------------------------------------------
// 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();
Within CMI application components, the Internationalization and InvocationInternationalization
interfaces are semantically equivalent. You can use either of these interfaces to obtain the context
associated with the thread on which that component is running. For instance, both interfaces can be
used to obtain the list of locales propagated to the servlet doPost service method.