1 23 package com.sun.enterprise.resource.monitor; 24 25 import com.sun.enterprise.admin.monitor.registry.MonitoringLevel; 26 import com.sun.enterprise.admin.monitor.registry.MonitoredObjectType; 27 import com.sun.enterprise.admin.monitor.registry.MonitoringLevelListener; 28 import com.sun.enterprise.admin.monitor.registry.MonitoringRegistry; 29 import com.sun.enterprise.admin.monitor.registry.MonitoringRegistrationException; 30 import com.sun.enterprise.admin.monitor.stats.JDBCConnectionPoolStats; 31 import com.sun.enterprise.config.serverbeans.JdbcConnectionPool; 32 import com.sun.enterprise.PoolManager; 33 import com.sun.enterprise.resource.MonitorableResourcePool; 34 import com.sun.enterprise.server.ApplicationServer; 35 import com.sun.enterprise.server.ResourcesUtil; 36 import com.sun.enterprise.server.ServerContext; 37 import com.sun.enterprise.Switch; 38 import java.util.HashMap ; 39 import java.util.Hashtable ; 40 import java.util.concurrent.ConcurrentHashMap ; 41 import javax.management.j2ee.statistics.Stats ; 42 import com.sun.logging.LogDomains; 43 import java.util.logging.Logger ; 44 import java.util.logging.Level ; 45 import java.security.AccessController ; 46 import java.security.PrivilegedAction ; 47 48 import com.sun.enterprise.resource.MonitorableResourcePool; 49 import com.sun.enterprise.resource.ResourcePool; 50 51 61 public class JDBCPoolMonitoringLevelListener implements MonitoringLevelListener { 62 private PoolManager poolManager_; 63 private MonitoringRegistry registry_; 64 65 private static final MonitoringLevel OFF = MonitoringLevel.OFF; 66 private static final MonitoringLevel HIGH = MonitoringLevel.HIGH; 67 private static final MonitoringLevel LOW = MonitoringLevel.LOW; 68 69 private static Logger _logger = LogDomains.getLogger( 70 LogDomains.RSR_LOGGER ); 71 72 public JDBCPoolMonitoringLevelListener() { 73 74 } 75 79 public void setLevel( MonitoringLevel level ) {} 80 81 91 public void changeLevel( MonitoringLevel from, MonitoringLevel to, 92 Stats handback ) { 93 } 94 95 public void changeLevel(MonitoringLevel from, MonitoringLevel to, 96 MonitoredObjectType type) 97 { 98 101 if ( from == to ) { 102 return; 104 } 105 AccessController.doPrivileged(new PrivilegedAction () { 106 public Object run() { 107 ServerContext ctxt = ApplicationServer.getServerContext(); 108 if (ctxt != null) { 109 registry_ = ctxt.getMonitoringRegistry(); 110 } 111 return null; 112 } 113 }); 114 115 116 if (from == OFF || from == LOW) { 117 if (to == HIGH) { 118 logFine("Changing level from " + from +" to HIGH"); 119 transitionToHigh(); 120 } 121 } 122 123 if (from == HIGH || from == LOW ) { 124 if ( to == OFF ) { 125 logFine("Switching level from " + from + " to OFF"); 126 switchOffMonitoring(); 127 } 128 } 129 130 if (from == OFF || from == HIGH ) { 131 if ( to == LOW ) { 132 logFine("Changing level from " + from + " to LOW"); 133 transitionToLow(); 134 } 135 } 136 } 137 138 141 private MonitorableResourcePool[] getPoolList() { 142 ResourcesUtil resUtil = ResourcesUtil.getInstance(); 143 JdbcConnectionPool[] jp = resUtil.getJdbcConnectionPools(); 144 145 if (jp == null) { 146 return null; 147 } 148 149 MonitorableResourcePool[] pools = new MonitorableResourcePool[ jp.length ]; 150 ConcurrentHashMap poolTable = getPoolManager().getPoolTable(); 151 152 for( int i = 0 ; i < jp.length; i++ ) { 153 ResourcePool p = (ResourcePool) poolTable.get( jp[i].getName() ); 154 if (p != null && (p instanceof MonitorableResourcePool ) ) { 155 pools[i] = (MonitorableResourcePool)p; 156 } 157 } 158 159 return pools; 160 } 161 162 private PoolManager getPoolManager() { 163 return Switch.getSwitch().getPoolManager(); 164 } 165 166 private void transitionToHigh() { 167 AccessController.doPrivileged( new PrivilegedAction () { 168 public Object run() { 169 MonitorableResourcePool[] pools = getPoolList(); 172 if (pools == null) { 173 return null; 174 } 175 176 for (int i = 0; i < pools.length; i++ ) { 177 if ( pools[i] != null ) { 178 try { 179 JDBCConnectionPoolStatsImpl stats = new 180 JDBCConnectionPoolStatsImpl(pools[i]); 181 getPoolManager().setMonitoringEnabledHigh( 182 pools[i].getPoolName() ); 183 registry_.registerJDBCConnectionPoolStats( 184 stats, pools[i].getPoolName(), null); 185 } catch(Exception mre) { 186 try { 187 _logger.log( Level.INFO, "poolmon.cannot_reg: " 188 +pools[i].getPoolName(), mre.getMessage() ); 189 getPoolManager().disableMonitoring( 190 pools[i].getPoolName()); 191 } catch (Exception ex) { 192 } 194 } 195 } 196 } 197 return null; 198 } 199 }); 200 } 201 202 private void switchOffMonitoring() { 203 AccessController.doPrivileged( new PrivilegedAction () { 205 public Object run() { 206 MonitorableResourcePool[] pools = getPoolList(); 207 if (pools == null) { 208 return null; 209 } 210 for( int i = 0; i < pools.length; i++) { 211 if (pools[i] != null ) { 212 try { 213 registry_.unregisterJDBCConnectionPoolStats( 214 pools[i].getPoolName() ); 215 getPoolManager().disableMonitoring( 216 pools[i].getPoolName()); 217 } catch( Exception mre ) { 218 _logger.log( Level.WARNING, "poolmon.cannot_unreg: " 219 + pools[i].getPoolName(), mre.getMessage() ); 220 } 221 } 222 } 223 return null; 224 } 225 226 }); 227 } 228 229 private void transitionToLow() { 230 AccessController.doPrivileged( new PrivilegedAction () { 231 public Object run() { 232 MonitorableResourcePool[] pools = getPoolList(); 235 if (pools == null) { 236 return null; 237 } 238 239 for (int i = 0; i < pools.length; i++ ) { 240 if ( pools[i] != null ) { 241 try { 242 JDBCConnectionPoolStatsImpl stats = new 243 JDBCConnectionPoolStatsImpl(pools[i]); 244 getPoolManager().setMonitoringEnabledLow( 245 pools[i].getPoolName() ); 246 registry_.registerJDBCConnectionPoolStats( 247 stats, pools[i].getPoolName(), null); 248 } catch(Exception mre) { 249 try { 250 _logger.log( Level.INFO, "poolmon.cannot_reg: " 251 +pools[i].getPoolName(), mre.getMessage() ); 252 getPoolManager().disableMonitoring( 253 pools[i].getPoolName() ); 254 } catch (Exception ex) { 255 } 257 } 258 } 259 } 260 return null; 261 } 262 }); 263 } 264 265 private void logFine( String msg ) { 266 if ( msg != null && _logger.isLoggable( Level.FINE ) ) { 267 _logger.fine( msg ); 268 } 269 } 270 } 271 | Popular Tags |