FileDocCategorySizeDatePackage
AMXMBeanLogger.javaAPI DocGlassfish v2 API6133Fri May 04 22:23:40 BST 2007com.sun.enterprise.management.support

AMXMBeanLogger

public final class AMXMBeanLogger extends com.sun.appserv.management.base.AMXLoggerBase
The logger class for all MBean loggers.

When constructing an MBean Logger, we derive its name from the ObjectName of the MBean. The Javadoc for the logger class states: Logger names can be arbitrary strings...". This convention is followed in spirit; the logger name for an MBean is followed by forming a dotted string which consists of a common prefix followed by the hierarchy of parents of the form or :, depending on whether the MBean has a name or not.

Fields Summary
private final ObjectName
mObjectName
private static final String
TYPE_NAME_DELIM
public static final String
OBJECT_NAME_KEY
Override so that we can include the ObjectName in every LogRecord.
Constructors Summary
private AMXMBeanLogger(ObjectName objectName)

		this( objectName, null );
		throw new IllegalArgumentException();	// don't use this routine
	
private AMXMBeanLogger(ObjectName objectName, String resourceBundleName)

		super( createLoggerName( objectName ), resourceBundleName );
		
		mObjectName	= objectName;
		throw new IllegalArgumentException();	// don't use this routine
	
Methods Summary
private static java.lang.StringcreateLoggerName(javax.management.ObjectName objectName)
Derive a Logger name consistent with the package hierarchy.

		final String	j2eeType	= Util.getJ2EEType( objectName );
		final String	name		= Util.getName( objectName );
		final TypeInfos	infos	= TypeInfos.getInstance();
		
		final StringBuffer	buf	= new StringBuffer();
		buf.append( LoggerSupport.AMX_MBEAN_LOGGER_PREFIX  );
		buf.append( AMX.FULL_TYPE_DELIM + formTypeName( j2eeType, name ) );
		
		final String[]		typeChain	= infos.getJ2EETypeChain( objectName );
		for( int i = 0; i < typeChain.length - 1; ++i )
		{
			final String	type	= typeChain[ i ];
			String	value	= objectName.getKeyProperty( type );
			if ( value == null )
			{
				value	= AMX.NO_NAME;
			}
			
			buf.append( AMX.FULL_TYPE_DELIM + formTypeName( type, value ) );
		}

		return( buf.toString() );
	
public static java.util.logging.LoggercreateNew(javax.management.ObjectName objectName)

		final String	loggerName	= createLoggerName( objectName );
		
		return( Logger.getLogger( loggerName ) );
	
private static java.lang.StringformTypeName(java.lang.String j2eeType, java.lang.String name)

	
		  
	
		 	
		 	 
	
	    String  result  = null;
	    
	    if ( j2eeType == null )
	    {
	        result  = name;
	    }
	    else
	    {
    		String	pair	= mangle( j2eeType );
    		
    		if ( ! name.equals( ObjectNames.getSingletonName( j2eeType ) ) )
    		{
    			pair	= pair + TYPE_NAME_DELIM + mangle( name );
    		}
    		
    		result  = pair;
		}
		
		return( result );
	
public voidlog(java.util.logging.LogRecord record)

		 
	    
	
		final Object[]	existing	= record.getParameters();
		final int		numExisting	= existing == null ?  0 : existing.length;
		
		final Object[]		params	= new Object[ 1 + numExisting ];
		if ( existing != null )
		{
			System.arraycopy( existing, 0, params, 0, existing.length );
		}
		
		// follow convention by placing a Map with our stuff in the last position
		final Map<String,ObjectName> m	= new HashMap<String,ObjectName>();
		m.put( OBJECT_NAME_KEY, mObjectName );
		params[ params.length - 1 ]	= m;
		
		record.setParameters( params );
		
		super.log( record );
	
private static java.lang.Stringmangle(java.lang.String s)

		// don't allow the '.' in a name part
		return( s.replaceAll( "\\.", "_" ) );