Hi,

Jay SenSharma

Jay SenSharma

Here is a Simple JMX code which we can use to get all the Parameters related to JDBC Connection Pool… This is a very basic and Most important JMX Code which is able to get all the DataSource Configuration related informations as well as it can fetch all the Runtime informations of a Connection pool.

Basically this JMX Code used the JDBCConnectionPoolParameters  API to get all the required Informations along with the JDBCDriverParams. Like getting the Database Username, URL…etc

ConnectionPoolParamsChecker.java

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("nt******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("nt 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("ntDataSource URL And  "+jdbcPropertyName+"t"+jdbcPropertyValue);
}
System.out.println(".............................................................................n");
}
}
}
}


Above Program gives the following kind of Output:

C:JavaTest>java ConnectionPoolParamsChecker
******SERVER NAME: <<AdminServer>>      DataSource Name: TestDS……….
ActiveConnectionsCurrentCount   : 0
ActiveConnectionsAverageCount   : 0
ActiveConnectionsAverageCount   : 0
ConnectionsTotalCount           : 1
CurrCapacity                    : 1
CurrCapacityHighCount           : 0
HighestNumAvailable             : 1
HighestNumAvailable             : 1
LeakedConnectionCount           : 0
WaitSecondsHighCount            : 0
WaitingForConnectionCurrentCount: 0
WaitingForConnectionFailureTotal: 0
WaitingForConnectionTotal       : 0
WaitingForConnectionHighCount   : 0

Connection Pool Parameters:
CapacityIncrement                      :1
ConnectionCreationRetryFrequencySeconds:0
ConnectionReserveTimeoutSeconds        :10
HighestNumWaiters                     :2147483647
InactiveConnectionTimeoutSeconds      :1
InitialCapacity                       :1
JDBCXADebugLevel                      :10
LoginDelaySeconds                     :0
MaxCapacity                           :15
ProfileHarvestFrequencySeconds        :300
ProfileType                           :0
SecondsToTrustAnIdlePoolConnection    :10
ShrinkFrequencySeconds                :900
StatementTimeout                      :-1
TestFrequencySeconds                  :120
TestTableName                         :SQL SELECT COUNT(*) FROM SYSTABLES
StatementCacheType                    :LRU
InitSql                               :null
CredentialMappingEnabled              :false
IdentityBasedConnectionPoolingEnabled :false
IgnoreInUseConnectionsEnabled         :true
PinnedToThread                        :false
RemoveInfectedConnections             :true
DataSource URL And  user        PBPUBLIC

DataSource URL And  databaseName        jdbc:pointbase:server://localhost:9092/demo
…………………………………………………………………..

Thanks

Jay SenSharma

If you enjoyed this post, please consider leaving a comment or subscribing to the RSS feed to have future articles delivered to your feed reader.