Before you begin
An application component must first resolve a reference to the InvocationInternationalization object and then bind it to the InvocationInternationalization interface of the internationalization context API.
Why and when to perform this task
Every remote invocation of a servlet service or EJB business method has an invocation internationalization context associated with the thread running that invocation. Invocation context is the internationalization context under which servlet and business method implementations execute; it is propagated on subsequent invocations by the internationalization service and middleware. Perform the following task to access elements of the invocation internationalization context.
This task also applies to Web services
clients and stateless session beans enabled for Web services.
Steps for this task
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:
The InvocationInternalization interface allows 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 (AMI components) have write access to invocation internationalization context elements. Calls to set invocation context elements within CMI application components result in a java.lang.IllegalStateException. Any differences in how application components can use InvocationInternationalization methods are explained in Internationalization context.
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 execute 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, and either of these interfaces can be used 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.