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.