FileDocCategorySizeDatePackage
ConnectionPoolChangeHandler.javaAPI DocGlassfish v2 API8091Fri May 04 22:24:20 BST 2007com.sun.enterprise.admin.monitor.registry.spi.reconfig

ConnectionPoolChangeHandler

public class ConnectionPoolChangeHandler extends Object implements ChangeHandler
Provides for dynamic reconfiguration of all JDBC Connection Pool and Connector Connection Pool. This class decides the actions to take when there are changes to the monitoring level through administrative interfaces.
author
Kedar Mhaswade
since
S1AS8.0
version
$Revision: 1.4 $

Fields Summary
private final ChangeHandler
successor
private final com.sun.enterprise.admin.monitor.registry.spi.ValueListMap
listeners
private static final Logger
logger
Constructors Summary
ConnectionPoolChangeHandler(ChangeHandler successor, com.sun.enterprise.admin.monitor.registry.spi.ValueListMap listeners)

	
	    
		this.successor		= successor;
		this.listeners		= listeners;
	
Methods Summary
public voidhandleChange(com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t, com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

		if (isConnectionPoolType(t)) {
			handleChange(from, to, t);
		}
		else {
			successor.handleChange(t, from, to);
		}
	
private voidhandleChange(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to, com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t)

		if (off2Low(from, to) || off2High(from, to)) {
			notifyListeners(from, to, t);
			registerMBeans(t);
		}
		if (low2Off(from, to) || high2Off(from, to)) {
			unregisterMBeans(t);
			notifyListeners(from, to, t);
		}
		if (low2High(from, to) || high2Low(from, to)) {
			//currently do nothing.
		}
	
private booleanhigh2Low(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

		return ( from == MonitoringLevel.HIGH && to == MonitoringLevel.LOW );
	
private booleanhigh2Off(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

 
		return ( from == MonitoringLevel.HIGH && to == MonitoringLevel.OFF );
	
private booleanisConnectionPoolType(com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t)

		return ( t == MonitoredObjectType.CONNECTOR_CONN_POOL ||
                 t == MonitoredObjectType.JDBC_CONN_POOL ||
				 t == MonitoredObjectType.CONNECTOR_SERVICE ||
                 t == MonitoredObjectType.JMS_SERVICE);
	
private booleanlow2High(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

 
		return ( from == MonitoringLevel.LOW && to == MonitoringLevel.HIGH);
	
private booleanlow2Off(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

 
		return ( from == MonitoringLevel.LOW && to == MonitoringLevel.OFF);
	
private voidnotifyListeners(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to, com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t)

		logger.finer("DynamicReconfigurator: Now notifying the listeners for connection-pool stats --- from = " + from.toString() + " to = " + to.toString());
		assert ( t == MonitoredObjectType.JDBC_CONN_POOL || 
                 t == MonitoredObjectType.CONNECTOR_CONN_POOL ||
                 t == MonitoredObjectType.CONNECTOR_SERVICE ||
                 t == MonitoredObjectType.JMS_SERVICE);
        
		final Map l = (Map)listeners.get(t); // map of listeners;
		if (l == null)
			return; //do nothing
		final Iterator it = l.keySet().iterator();
		while (it.hasNext()) {
			final MonitoringLevelListener ml = (MonitoringLevelListener)it.next();
			ml.changeLevel(from, to, t);
		}
	
private booleanoff2High(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

 
		return ( from == MonitoringLevel.OFF && to == MonitoringLevel.HIGH );
	
private booleanoff2Low(com.sun.enterprise.admin.monitor.registry.MonitoringLevel from, com.sun.enterprise.admin.monitor.registry.MonitoringLevel to)

 
		return ( from == MonitoringLevel.OFF && to == MonitoringLevel.LOW );
	
private voidregisterMBeans(com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t)

		final MonitoringRegistrationHelper registryImpl	= 
			(MonitoringRegistrationHelper) MonitoringRegistrationHelper.getInstance();
		//note that the above refers to the actual implementation rather than interface.
        Iterator iter = null;
		if(t == MonitoredObjectType.JDBC_CONN_POOL)
            iter = registryImpl.getConnectionPoolNodes(t).iterator();
        else
            iter = registryImpl.getConnectorRelatedNodes().iterator();
		while (iter.hasNext()) {
			final StatsHolder c = (StatsHolder) iter.next();
			c.registerMBean();
			logger.finer("DynamicReconfigurator: Now Registering MBean for --- " + c.getName());
		}
	
private voidunregisterMBeans(com.sun.enterprise.admin.monitor.registry.MonitoredObjectType t)

		final MonitoringRegistrationHelper registryImpl	= 
			(MonitoringRegistrationHelper) MonitoringRegistrationHelper.getInstance();
		//note that the above refers to the actual implementation rather than interface.

		//unregister MBeans for ALL the connection pools
        Iterator iter = null;
        if(t == MonitoredObjectType.JDBC_CONN_POOL)
            iter = registryImpl.getConnectionPoolNodes(t).iterator();
        else
            iter = registryImpl.getConnectorRelatedNodes().iterator();
		while (iter.hasNext()) {
			final StatsHolder c = (StatsHolder) iter.next();
			c.unregisterMBean();
			logger.finer("DynamicReconfigurator: Now UnRegistering MBean for --- " + c.getName());
		}