weblogic通过JMX获取连接池信息

//来源: http://middlewaremagic.com/weblogic/?p=606

import java.io.IOException;
import java.util.Hashtable;
import java.util.Iterator;
import java.util.Set;
 
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.IntrospectionException;
import javax.management.MBeanException;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
import javax.naming.Context;
 
import weblogic.jndi.Environment;
import weblogic.management.MBeanHome;
import weblogic.management.WebLogicMBean;
import weblogic.management.configuration.ComponentMBean;
import weblogic.management.configuration.JDBCConnectionPoolMBean;
import weblogic.management.configuration.JDBCTxDataSourceMBean;
 
public class ConnectionPoolParamsChecker {
	static MBeanServerConnection connection;
	static JMXConnector connector;
	static ObjectName service;
	public static void main(String [] args){
		try
		{
			//////////////// Enter the Admin Server Details here/////////////////////
			String protocol = "t3";
			int port = 7001;
			String hostname = "localhost";
			String jndiroot = "/jndi/";
			String mserver = "weblogic.management.mbeanservers.domainruntime";
			 
			JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port,
			jndiroot + mserver);
			service = new ObjectName("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
			 
			Hashtable h = new Hashtable();
			h.put(Context.SECURITY_PRINCIPAL, "weblogic");
			h.put(Context.SECURITY_CREDENTIALS, "weblogic");
			h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");
			connector = JMXConnectorFactory.connect(serviceURL, h);
			connection = connector.getMBeanServerConnection();
			new ConnectionPoolParamsChecker().getJdbcRuntime();
		}
		catch(Exception e)
		{
			e.printStackTrace();
		}
	}
	 
	private ObjectName getJDBCDriverParamsBean(ObjectName jdbcSystemResourceMBean) throws AttributeNotFoundException,
	InstanceNotFoundException, MBeanException, ReflectionException, IOException, IntrospectionException {
		ObjectName jdbcDataSourceBean = (ObjectName) getObjectName(jdbcSystemResourceMBean, "JDBCResource");
		return (ObjectName) getObjectName(jdbcDataSourceBean, "JDBCDriverParams");
	}
	 
	private Object getObjectName(ObjectName objectName, String attributeName) throws AttributeNotFoundException,
	InstanceNotFoundException, MBeanException, ReflectionException, IOException {
		return connection.getAttribute(objectName, attributeName);
	}
	 
	public void getJdbcRuntime() throws Exception {
		ObjectName[] serverRT = (ObjectName[])connection.getAttribute(service, "ServerRuntimes");
		int length = (int) serverRT.length;
		for (int i = 0; i < length; i++) {
			String name = (String) connection.getAttribute(serverRT[i],"Name");
			ObjectName[] appRT = (ObjectName[]) connection.getAttribute(new ObjectName("com.bea:Name="+name+",ServerRuntime="+name+",Location="+name+",Type=JDBCServiceRuntime"),"JDBCDataSourceRuntimeMBeans");
			int appLength = (int) appRT.length;
			for (int x = 0; x < appLength; x++)
			{
				System.out.println("\n\t******SERVER NAME: <<"+name+">>   \tDataSource Name: " + (String)connection.getAttribute(appRT[x], "Name")+"..........\n");
				System.out.println("ActiveConnectionsCurrentCount    : " + connection.getAttribute(appRT[x], "ActiveConnectionsCurrentCount"));
				System.out.println("ActiveConnectionsAverageCount    : " + connection.getAttribute(appRT[x], "ActiveConnectionsAverageCount"));
				System.out.println("ActiveConnectionsAverageCount    : " + connection.getAttribute(appRT[x], "ActiveConnectionsAverageCount"));
				System.out.println("ConnectionsTotalCount            : " + connection.getAttribute(appRT[x], "ConnectionsTotalCount"));
				System.out.println("CurrCapacity                    : " + connection.getAttribute(appRT[x], "CurrCapacity"));
				System.out.println("CurrCapacityHighCount            : " + connection.getAttribute(appRT[x], "CurrCapacityHighCount"));
				System.out.println("HighestNumAvailable              : " + connection.getAttribute(appRT[x], "HighestNumAvailable"));
				System.out.println("HighestNumAvailable              : " + connection.getAttribute(appRT[x], "HighestNumAvailable"));
				System.out.println("LeakedConnectionCount            : " + connection.getAttribute(appRT[x], "LeakedConnectionCount"));
				System.out.println("WaitSecondsHighCount             : " + connection.getAttribute(appRT[x], "WaitSecondsHighCount"));
				System.out.println("WaitingForConnectionCurrentCount: " + connection.getAttribute(appRT[x], "WaitingForConnectionCurrentCount"));
				System.out.println("WaitingForConnectionFailureTotal: " + connection.getAttribute(appRT[x], "WaitingForConnectionFailureTotal"));
				System.out.println("WaitingForConnectionTotal        : " + connection.getAttribute(appRT[x], "WaitingForConnectionTotal"));
				System.out.println("WaitingForConnectionHighCount    : " + connection.getAttribute(appRT[x], "WaitingForConnectionHighCount"));
				String poolName = (String)connection.getAttribute(appRT[x], "Name");
				ObjectName jdbcSystemResource = new ObjectName("com.bea:Name=" + poolName+ ",Type=JDBCSystemResource");
				ObjectName jdbcDataSourceBean = (ObjectName) getObjectName(jdbcSystemResource, "JDBCResource");
				 
				////////////////////
				System.out.println("\n\t Connection Pool Parameters: \n");
				ObjectName jdbcConnectionPoolParams = (ObjectName) getObjectName(jdbcDataSourceBean, "JDBCConnectionPoolParams");
				Integer CapacityIncrement = (Integer) getObjectName(jdbcConnectionPoolParams, "CapacityIncrement");
				System.out.println("\t CapacityIncrement                      :"+CapacityIncrement);
				 
				Integer ConnectionCreationRetryFrequencySeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "ConnectionCreationRetryFrequencySeconds");
				System.out.println("\t ConnectionCreationRetryFrequencySeconds:"+ConnectionCreationRetryFrequencySeconds);
				 
				Integer ConnectionReserveTimeoutSeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "ConnectionReserveTimeoutSeconds");
				System.out.println("\t ConnectionReserveTimeoutSeconds        :"+ConnectionReserveTimeoutSeconds);
				 
				Integer HighestNumWaiters = (Integer) getObjectName(jdbcConnectionPoolParams, "HighestNumWaiters");
				System.out.println("\t HighestNumWaiters                     :"+HighestNumWaiters);
				 
				Integer InactiveConnectionTimeoutSeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "InactiveConnectionTimeoutSeconds");
				System.out.println("\t InactiveConnectionTimeoutSeconds      :"+CapacityIncrement);
				 
				Integer InitialCapacity = (Integer) getObjectName(jdbcConnectionPoolParams, "InitialCapacity");
				System.out.println("\t InitialCapacity                       :"+InitialCapacity);
				 
				Integer JDBCXADebugLevel = (Integer) getObjectName(jdbcConnectionPoolParams, "JDBCXADebugLevel");
				System.out.println("\t JDBCXADebugLevel                      :"+JDBCXADebugLevel);
				 
				Integer LoginDelaySeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "LoginDelaySeconds");
				System.out.println("\t LoginDelaySeconds                     :"+LoginDelaySeconds);
				 
				Integer MaxCapacity = (Integer) getObjectName(jdbcConnectionPoolParams, "MaxCapacity");
				System.out.println("\t MaxCapacity                           :"+MaxCapacity);
				 
				Integer ProfileHarvestFrequencySeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "ProfileHarvestFrequencySeconds");
				System.out.println("\t ProfileHarvestFrequencySeconds        :"+ProfileHarvestFrequencySeconds);
				 
				Integer ProfileType = (Integer) getObjectName(jdbcConnectionPoolParams, "ProfileType");
				System.out.println("\t ProfileType                           :"+ProfileType);
				 
				Integer SecondsToTrustAnIdlePoolConnection = (Integer) getObjectName(jdbcConnectionPoolParams, "SecondsToTrustAnIdlePoolConnection");
				System.out.println("\t SecondsToTrustAnIdlePoolConnection    :"+SecondsToTrustAnIdlePoolConnection);
				 
				Integer ShrinkFrequencySeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "ShrinkFrequencySeconds");
				System.out.println("\t ShrinkFrequencySeconds                :"+ShrinkFrequencySeconds);
				 
				Integer StatementTimeout = (Integer) getObjectName(jdbcConnectionPoolParams, "StatementTimeout");
				System.out.println("\t StatementTimeout                      :"+StatementTimeout);
				 
				Integer TestFrequencySeconds = (Integer) getObjectName(jdbcConnectionPoolParams, "TestFrequencySeconds");
				System.out.println("\t TestFrequencySeconds                  :"+TestFrequencySeconds);
				 
				String TestTableName = (String) getObjectName(jdbcConnectionPoolParams, "TestTableName");
				System.out.println("\t TestTableName                         :"+TestTableName);
				 
				String StatementCacheType = (String) getObjectName(jdbcConnectionPoolParams, "StatementCacheType");
				System.out.println("\t StatementCacheType                    :"+StatementCacheType);
				 
				String InitSql = (String) getObjectName(jdbcConnectionPoolParams, "InitSql");
				System.out.println("\t InitSql                               :"+InitSql);
				 
				Boolean CredentialMappingEnabled = (Boolean) getObjectName(jdbcConnectionPoolParams, "CredentialMappingEnabled");
				System.out.println("\t CredentialMappingEnabled              :"+CredentialMappingEnabled);
				 
				Boolean IdentityBasedConnectionPoolingEnabled = (Boolean) getObjectName(jdbcConnectionPoolParams, "IdentityBasedConnectionPoolingEnabled");
				System.out.println("\t IdentityBasedConnectionPoolingEnabled :"+IdentityBasedConnectionPoolingEnabled);
				 
				Boolean IgnoreInUseConnectionsEnabled = (Boolean) getObjectName(jdbcConnectionPoolParams, "IgnoreInUseConnectionsEnabled");
				System.out.println("\t IgnoreInUseConnectionsEnabled         :"+IgnoreInUseConnectionsEnabled);
				 
				Boolean PinnedToThread = (Boolean) getObjectName(jdbcConnectionPoolParams, "PinnedToThread");
				System.out.println("\t PinnedToThread                        :"+PinnedToThread);
				 
				Boolean RemoveInfectedConnections = (Boolean) getObjectName(jdbcConnectionPoolParams, "RemoveInfectedConnections");
				System.out.println("\t RemoveInfectedConnections             :"+RemoveInfectedConnections);
				 
				/////////////////////
				ObjectName jdbcDriverParams=(ObjectName) getObjectName(jdbcDataSourceBean, "JDBCDriverParams");
				ObjectName jdbcProperties=(ObjectName) getObjectName(jdbcDriverParams, "Properties");
				ObjectName[] jdbcPropertyBeans = (ObjectName[]) getObjectName(jdbcProperties, "Properties");
				for (int j = 0; j < jdbcPropertyBeans.length; j++)
				{
					ObjectName jdbcPropertyBean = null;
					jdbcPropertyBean = jdbcPropertyBeans[j];
					String jdbcPropertyName = (String) getObjectName(jdbcPropertyBean, "Name");
					String jdbcPropertyValue = (String) getObjectName(jdbcPropertyBean, "Value");
					System.out.println("\n\tDataSource URL And  "+jdbcPropertyName+"\t"+jdbcPropertyValue);
				}
				System.out.println(".............................................................................\n");
			}
		}
	}
}

 

你可能感兴趣的:(weblogic)