mx4j.tools.i18n

Class I18NStandardMBean

public class I18NStandardMBean extends StandardMBean

An extension of StandardMBean to support internationalization.

The I18N information is taken from a property bundle named MyImplMBeanResources where "MyImpl" is the fully qualified class implementing the MBean.

These bundles are nested following the class hierachy of the implementation class. This means that a superclass of the real implementing class can define the resource bundle for the common attributes and operations.

The resource bundle naming rules defined by java.util.ResourceBundle are used; in particular :

localInfo consists of one or more sections of "language_country_variant" (eg en_GB or fr_FR).

The locale to be used is determined by one of the following mechanisms (in this order)

The bundle should contain keys as described below :

Global bean description

The global bean description is given by the single key "descr":
 descr=The MBean Description
 

Attributes

Attribute desciptions are given by keys of form "attr.Name" where Name is the attribute name (the method name minus the get/set prefix) :
 attr.Counter=The counter
 

Constructors

Non ambiguous case

All constructors having a different number of arguments may be described in this way:
 cons.N=desciption of constructor N
 cons.N.param.1=Description of first parameter of constructor N
 cons.N.paramName.1=paramName1
 cons.N.param.2=Description of first parameter of constructor N
 cons.N.paramName.2=paramName2
 
Where N is a sequential number starting at one.

Ambiguous case

Where several constructors exist with the same number of arguments an explicit signature must be given. The signature is a comma separated list of class descriptions (as returned by java.lang.Class#getName and has the key cons.N.sig :
 cons.N.sig=int,java.lang.Object
 cons.N.param.1=The int parameter
 cons.N.param.2=The Object parameter
 

Operations

No overloading

When no overloaded versions of an operation exist (same method name but different parameters) the simplest case shown below can be used :
 op.operationName=The description
 op.operationName.param.1=The first parameter
 op.operationName.paramName.1=param1
 

Non ambiguous overloading case

When operation overloading is used but the overloaded versions differ in the number of parameters the format below can be used :
 op.operationName.1=The first version of operationName
 op.operationName.1.param.1=parameter for first version
 op.operationName.1.paramName.1=param1
 op.operationName.2=The second version of operationName
 op.operationName.2.paramName.1=param1
 op.operationName.2.param.1=first parameter for second version
 op.operationName.2.param.2=second parameter for second version
 op.operationName.2.paramName.2=param2
 

Ambiguous overloading case

When operations with the same name have the same number of arguments an explicit signature must be used :
 op.operationName.1.sig=int
 op.operationName.1=The first version of operationName (takes int)
 op.operationName.1.param.1=parameter for first version
 op.operationName.1.paramName.1=param1
 op.operationName.2.sig=java.lang.Object
 op.operationName.2=The second version of operationName (take Object)
 op.operationName.2.paramName.1=param1
 op.operationName.2.param.1=first parameter for second version
 

Restrictions

Parameter names must only contain characters allowed in a Java identifier (in particular spaces are not allowed). This is required by the JMX specifications. No such restrictions exist for the other descriptions.

Behaviour with missing data

If no resource bunde exists for the MBean a java.util.MissingResourceException will be thrown by the constructor.

If the resouce bundle is found but the bean description, constructor description or parameter name is missing the String "??(key)" will be returned instead (eg "??(op.myOperation)".

If a paramName key is missing (for constructor or operation) the version normally given by StandardMBean is used (generally "pN").

If a non ambiguous description cannot be determined the fixed (non translatable) descriptions "ambiguous constructor", "parameter for ambiguous constructor", "ambiguous operation", "parameter for ambiguous operation" are returned.

Constructor Summary
I18NStandardMBean(Object implementation, Class mbeanInterface)
Makes an I18NStandardMBean for the default locale with a separate implementation class.
I18NStandardMBean(Object implementation, Class mbeanInterface, Locale locale)
Makes an I18NStandardMBean for the given locale with a separate implementation class.
protected I18NStandardMBean(Class mbeanInterface)
Makes a I18NStandardMBean for the default locale implemented by a subclass.
protected I18NStandardMBean(Class mbeanInterface, Locale locale)
Makes a I18NStandardMBean for the given locale implemented by a subclass.
Method Summary
protected voidcacheMBeanInfo(MBeanInfo info)
Once the MBeanInfo has been obtained discard our caches.
protected MBeanInfogetCachedMBeanInfo()
Initialise internal data structures.
protected MBeanConstructorInfo[]getConstructors(MBeanConstructorInfo[] cstrs, Object impl)
protected StringgetDescription(MBeanInfo info)
Obtain global description for MBean.
protected StringgetDescription(MBeanConstructorInfo cstr)
Obtain the constructor description.
protected StringgetDescription(MBeanConstructorInfo cstr, MBeanParameterInfo param, int seq)
Obtain the constructor parameter description.
protected StringgetDescription(MBeanAttributeInfo attr)
Obtain the attribute description.
protected StringgetDescription(MBeanOperationInfo op)
Obtain the operation description.
protected StringgetDescription(MBeanOperationInfo op, MBeanParameterInfo param, int seq)
Obtain the operation parameter description.
protected StringgetParameterName(MBeanConstructorInfo cstr, MBeanParameterInfo param, int seq)
Obtain constructor parameter name.
protected StringgetParameterName(MBeanOperationInfo op, MBeanParameterInfo param, int seq)
Obtain operation parameter name.
static voidsetDefaultLocale(Locale locale)
Set the locale which will be used for future I18NStandardMBeans.

Constructor Detail

I18NStandardMBean

public I18NStandardMBean(Object implementation, Class mbeanInterface)
Makes an I18NStandardMBean for the default locale with a separate implementation class.

See Also: javax.management.StandardMBean#StandardMBean(java.lang.Object, java.lang.Class)

I18NStandardMBean

public I18NStandardMBean(Object implementation, Class mbeanInterface, Locale locale)
Makes an I18NStandardMBean for the given locale with a separate implementation class.

See Also: javax.management.StandardMBean#StandardMBean(java.lang.Object, java.lang.Class)

I18NStandardMBean

protected I18NStandardMBean(Class mbeanInterface)
Makes a I18NStandardMBean for the default locale implemented by a subclass.

See Also: javax.management.StandardMBean#StandardMBean(java.lang.Class)

I18NStandardMBean

protected I18NStandardMBean(Class mbeanInterface, Locale locale)
Makes a I18NStandardMBean for the given locale implemented by a subclass.

See Also: javax.management.StandardMBean#StandardMBean(java.lang.Class)

Method Detail

cacheMBeanInfo

protected void cacheMBeanInfo(MBeanInfo info)
Once the MBeanInfo has been obtained discard our caches.

See Also: javax.management.StandardMBean#cacheMBeanInfo(javax.management.MBeanInfo)

getCachedMBeanInfo

protected MBeanInfo getCachedMBeanInfo()
Initialise internal data structures.

This method is always called first during getMBeanInfo processing. We use this to avoid keeping all our internal Maps in memory too long.

See Also: javax.management.StandardMBean#getCachedMBeanInfo

getConstructors

protected MBeanConstructorInfo[] getConstructors(MBeanConstructorInfo[] cstrs, Object impl)

getDescription

protected String getDescription(MBeanInfo info)
Obtain global description for MBean.

Taken from "descr" key in resource bundle.

Also performs internal initialisations requiring the MBeanInfo obtained by introspection. Therefore the superclass must call this method BEFORE the other hooks.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanInfo)

getDescription

protected String getDescription(MBeanConstructorInfo cstr)
Obtain the constructor description.

Taken from "cons.N" key in resource bundle.

Maybe "ambiguous constructor" if correct index cannot be determined by an explicit signature or parameter counts.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanConstructorInfo)

getDescription

protected String getDescription(MBeanConstructorInfo cstr, MBeanParameterInfo param, int seq)
Obtain the constructor parameter description.

Taken from "cons.N.param.seq" key in resource bundle.

Maybe "parameter for ambiguous constructor" if correct index cannot be determined by an explicit signature or parameter counts.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanConstructorInfo, javax.management.MBeanParameterInfo, int)

getDescription

protected String getDescription(MBeanAttributeInfo attr)
Obtain the attribute description.

Taken from the "attr.attributeName" key in resource bundle.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanAttributeInfo)

getDescription

protected String getDescription(MBeanOperationInfo op)
Obtain the operation description.

Taken from the "op.operationName.N" or the "op.operationName" key in the resource bundle.

May be "ambiguous operation" if the correct key cannot be determined by signature or parameter counts.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanOperationInfo)

getDescription

protected String getDescription(MBeanOperationInfo op, MBeanParameterInfo param, int seq)
Obtain the operation parameter description.

Taken from the "op.operationName.N.param.M" or the "op.operationName.param" key in the resource bundle.

May be "parameter for ambiguous operation" if the correct key cannot be determined by signature or parameter counts.

See Also: javax.management.StandardMBean#getDescription(javax.management.MBeanOperationInfo, javax.management.MBeanParameterInfo, int)

getParameterName

protected String getParameterName(MBeanConstructorInfo cstr, MBeanParameterInfo param, int seq)
Obtain constructor parameter name.

Taken from "cons.N.paramName.seq" key in resource bundle.

If this key does not exist or if the correct index N cannot be determined by an explicit signature or parameter counts the superclass method is called.

See Also: javax.management.StandardMBean#getParameterName(javax.management.MBeanConstructorInfo, javax.management.MBeanParameterInfo, int)

getParameterName

protected String getParameterName(MBeanOperationInfo op, MBeanParameterInfo param, int seq)
Obtain operation parameter name.

Taken from the "op.operationName.N.paramName.M" or the "op.operationName.paramName.M" key in the resource bundle.

If this key does not exist or if the correct index N cannot be determined by an explicit signature or parameter counts the superclass method is called.

See Also: javax.management.StandardMBean#getParameterName(javax.management.MBeanOperationInfo, javax.management.MBeanParameterInfo, int)

setDefaultLocale

public static void setDefaultLocale(Locale locale)
Set the locale which will be used for future I18NStandardMBeans.

The locale specified can be overridden on a per class basis via the constructors but overrides other means of setting the Locale (system properties).

Changing the locale has no effect on already constructed MBeans.

Parameters: locale the Locale for future MBeans

Copyright © 2001-2005 The MX4J Contributors. All Rights Reserved.