FileDocCategorySizeDatePackage
EJBMethodStatsManagerImpl.javaAPI DocGlassfish v2 API8095Thu Jul 26 18:50:46 BST 2007com.sun.ejb.base.stats

EJBMethodStatsManagerImpl

public final class EJBMethodStatsManagerImpl extends Object implements com.sun.ejb.spi.stats.EJBMethodStatsManager
A class that manages all the monitored EJB methods
author
Mahesh Kannan

Fields Summary
private static final Logger
_logger
private com.sun.enterprise.admin.monitor.registry.MonitoringRegistry
registry
private final String
appName
private final String
modName
private final String
ejbName
private final com.sun.enterprise.admin.monitor.registry.MonitoredObjectType
ejbType
private Method[]
methods
private boolean
methodMonitorOn
private MethodMonitor[]
methodMonitors
private HashMap
methodMonitorMap
private Object
lock
private Object[]
logParams
private boolean
prefixWithClassName
Constructors Summary
EJBMethodStatsManagerImpl(com.sun.enterprise.admin.monitor.registry.MonitoringRegistry registry, com.sun.enterprise.admin.monitor.registry.MonitoredObjectType ejbType, String ejbName, String modName, String appName)

    
      
	           
    
	this.registry = registry;
    
    this.ejbType   = ejbType;

	this.ejbName = ejbName;
	this.modName = modName;
	this.appName = appName;

	logParams = new Object[] {ejbName, modName, appName};
    
Methods Summary
voidappendStats(java.lang.StringBuffer sbuf)

	if (methodMonitors != null) {
	    int size = methods.length;
	    for (int i=0; i<size; i++) {
		MethodMonitor monitor =
		    (MethodMonitor) methodMonitors[i];
		monitor.appendStats(sbuf);
	    }
	}
    
private voidderegisterStats()

	if (methodMonitors == null) {
	    return;
	}
	int size = methodMonitors.length;
	for (int i=0; i<size; i++) {
	    try {
		registry.unregisterEJBMethodStats(
		    methodMonitors[i].getMethodName(),
		     ejbType, ejbName, modName, appName);
		if (_logger.isLoggable(Level.FINE)) {
		    _logger.log(Level.FINE, "Unregistered method: "
			    + methodMonitors[i].getMethodName()
			    + "; for " + appName + "; " + modName
			    + "; " + ejbName);
		}
	    } catch (MonitoringRegistrationException monRegEx) {
		Object[] params = new Object[] {ejbName, modName,
		    appName, methodMonitors[i].getMethodName()};
		_logger.log(Level.FINE,
			"base.stats.method.unregister.monreg.error", params);
		_logger.log(Level.FINE, "", monRegEx);
	    } catch (Exception ex) {
		Object[] params = new Object[] {ejbName, modName,
		    appName, methodMonitors[i].getMethodName()};
		_logger.log(Level.WARNING,
			"base.stats.method.unregister.error", params);
		_logger.log(Level.FINE, "", ex);
	    }
	}

	methodMonitors = null;
    
public MethodMonitor[]getMethodMonitors()

	return this.methodMonitors;
    
public final booleanisMethodMonitorOn()

	return methodMonitorOn;
    
public final voidpostInvoke(java.lang.reflect.Method method, java.lang.Throwable th)

	if (methodMonitorOn) {
	    MethodMonitor monitor = null;
	    synchronized (lock) {
		if (methodMonitorOn) {
		    monitor = (MethodMonitor) methodMonitorMap.get(method);
		}
	    }
	    if (monitor != null) {
		monitor.postInvoke(th);
	    }
	}
    
public final voidpreInvoke(java.lang.reflect.Method method)

	if (methodMonitorOn) {
	    MethodMonitor monitor = null;
	    synchronized (lock) {
		if (methodMonitorOn) {
		    monitor = (MethodMonitor) methodMonitorMap.get(method);
		}
	    }
	    if (monitor != null) {
            monitor.preInvoke();
	    }
	}
    
voidregisterMethods(java.lang.reflect.Method[] methods, boolean prefixWithClassName)

        this.prefixWithClassName = prefixWithClassName;
        this.methods = methods;
    
voidsetMethodMonitorOn(boolean monitorOn)

	if (methods == null) {
	    _logger.log(Level.WARNING, "base.stats.method.nomethods", logParams);
	    return;
	}
	int size = methods.length;
	if (monitorOn == true) {
	    this.methodMonitors = new MethodMonitor[size];
	    HashMap map = new HashMap();
	    for (int i=0; i<size; i++) {
		methodMonitors[i] = new MethodMonitor(methods[i], prefixWithClassName);
		map.put(methods[i], methodMonitors[i]);

		EJBMethodStatsImpl impl =
		    new EJBMethodStatsImpl(methodMonitors[i]);
		try {
		    if (_logger.isLoggable(Level.FINE)) {
			_logger.log(Level.FINE, "Registering method: "
			    + methodMonitors[i].getMethodName()
			    + "; for " + appName + "; " + modName
			    + "; " + ejbName);
		    }
		    registry.registerEJBMethodStats(impl, 
			methodMonitors[i].getMethodName(),
			ejbType, ejbName, modName, appName, null);
		    if (_logger.isLoggable(Level.FINE)) {
			_logger.log(Level.FINE, "Registered method: "
			    + methodMonitors[i].getMethodName()
			    + "; for " + appName + "; " + modName
			    + "; " + ejbName);
		    }
		} catch (MonitoringRegistrationException monRegEx) {
		    Object[] params = new Object[] {ejbName, modName,
			    appName, methodMonitors[i].getMethodName()};
		    _logger.log(Level.WARNING,
			    "base.stats.method.register.monreg.error", params);
		    _logger.log(Level.FINE, "", monRegEx);
		} catch (Exception ex) {
		    Object[] params = new Object[] {ejbName, modName,
			    appName, methodMonitors[i].getMethodName()};
		    _logger.log(Level.WARNING,
			    "base.stats.method.register.error", params);
		    _logger.log(Level.FINE, "", ex);
		}
	    }
	    this.methodMonitorMap = map;
	    synchronized (lock) {
		this.methodMonitorOn = true;
	    }
	} else {
	    synchronized (lock) {
		this.methodMonitorOn = false;
	    }
	    deregisterStats();

	    this.methodMonitorMap = null;
	    this.methodMonitors = null;

	}
    
public voidundeploy()

	synchronized (lock) {
	    methodMonitorOn = false;
	}
	deregisterStats();

	methods = null;
	methodMonitors = null;
	methodMonitorMap = null;
	registry = null;