📄 wsconfigmanagement.java
字号:
import java.util.*;
import javax.management.ObjectName;
import com.ibm.websphere.management.AdminClient;
import com.ibm.websphere.management.exception.AdminException;
import com.ibm.websphere.pmi.stat.MBeanStatDescriptor;
import com.ibm.websphere.pmi.stat.StatDescriptor;
import com.ibm.websphere.pmi.stat.MBeanLevelSpec;
import com.ibm.websphere.pmi.stat.WSStats;
import com.ibm.ws.pmi.stat.StatsImpl;
import com.ibm.websphere.pmi.PmiConstants;
import com.ibm.websphere.pmi.stat.WSJVMStats;
import com.ibm.websphere.pmi.stat.WSSystemStats;
import com.ibm.websphere.pmi.stat.WSJDBCConnectionPoolStats;
import com.ibm.websphere.pmi.stat.WSThreadPoolStats;
import com.ibm.websphere.pmi.stat.WSRangeStatistic;
import com.ibm.websphere.pmi.stat.WSObjectPoolStats;
import com.ibm.ws.pmi.stat.TimeStatisticImpl;
import com.ibm.ws.pmi.stat.CountStatisticImpl;
import com.ibm.ws.pmi.stat.BoundedRangeStatisticImpl;
import com.ibm.ws.pmi.stat.AverageStatisticImpl;
public class WSConfigManagement {
private static Init init = new Init();
private WebsphereConfigure configure = new WebsphereConfigure();
private AdminClient adminClient;
private ObjectName perfName;
private ObjectName serverName;
private ObjectName jvmName;
private ObjectName jdbcName;
private ObjectName objectPoolName;
private String hostName;
public WSConfigManagement() {
// get admin client
adminClient = init.getAdminClient();
// get perf MBean and individual MBeans
perfName = getPerfMBean();
serverName = getIndividualMBean("Server");
jvmName = getIndividualMBean("JVM");
jdbcName = getIndividualMBean("JDBCProvider");
objectPoolName = getIndividualMBean("ObjectPool");
// host name, should get it from configure files
hostName = configure.getHostName();
}
public ObjectName getMBean(String node, String server, String mbeanType) {
try {
String queryStr = "WebSphere:*,type=" + mbeanType + ",node=" + node
+ ",process=" + server;
// String queryStr = "WebSphere:*,type=" + mbeanType + ",node=" +
// node;
Set oSet = adminClient.queryNames(new ObjectName(queryStr), null);
Iterator it = oSet.iterator();
if (it.hasNext())
return (ObjectName) it.next();
else {
System.out.println("Cannot find MBean for node=" + node
+ ", server=" + server + ", type=" + mbeanType);
return null;
}
} catch (Exception ex) {
ex.printStackTrace();
System.exit(1);
}
return null;
}
public ObjectName getIndividualMBean(String type) {
String node = configure.getNode();
String server = configure.getServerName();
ObjectName individualMBean = null;
individualMBean = getMBean(node, server, type);
setInstrumentationLevel(individualMBean, null, PmiConstants.LEVEL_HIGH);
return individualMBean;
}
public ObjectName getPerfMBean() {
String node = configure.getNode();
String server = configure.getServerName();
ObjectName perfMBean = null;
String type = "Perf";
perfMBean = getMBean(node, server, type);
return perfMBean;
}
public String getRunningMode() {
String node = configure.getNode();
String server = configure.getServerName();
if (getMBean(node, server, "Cluster") != null)
return "Cluster Mode";
else
return "Single Machine Mode";
}
public String getSystemLogPath() {
String sysLog = "";
sysLog="%WebSphereHome%/logs/";
return sysLog;
}
public String getUserLogPath() {
String userLog = "";
userLog="%WebSphereHome%/logs/";
return userLog;
}
public String getThreadPoolInfo() {
return new Long(getThreadPoolInfo(perfName, serverName)).toString();
}
// No MBean support,so I use MBeanStatDescriptor
public long getThreadPoolInfo(ObjectName perfMBean, ObjectName serverName) {
StatsImpl myStats = null;
long threadPoolSize = 0;
StatDescriptor mysd = new StatDescriptor(
new String[] { PmiConstants.THREADPOOL_MODULE });
MBeanStatDescriptor mymsd = new MBeanStatDescriptor(serverName, mysd);
Object[] params = new Object[] { mymsd, new Boolean(true) };
String[] signature = new String[] {
"com.ibm.websphere.pmi.stat.MBeanStatDescriptor",
"java.lang.Boolean" };
try {
myStats = (StatsImpl) adminClient.invoke(perfMBean,
"getStatsObject", params, signature);
} catch (Exception e) {
e.printStackTrace();
}
BoundedRangeStatisticImpl threadPoolStats = (BoundedRangeStatisticImpl) myStats
.getStatistic(WSThreadPoolStats.PoolSize);
threadPoolSize = threadPoolStats.getHighWaterMark();
return threadPoolSize;
}
public String getJDBCConnectionPoolSize() {
return new Long(getJDBCConnectionPoolSize(perfName, jdbcName))
.toString();
}
public long getJDBCConnectionPoolSize(ObjectName perfName,
ObjectName jdbcName) {
long jdbcConnSize = 0;
WSStats jdbcStats = getStatsFromIndividualMBean(perfName, jdbcName);
BoundedRangeStatisticImpl jdbcConnStats = (BoundedRangeStatisticImpl) jdbcStats
.getStatistic(WSJDBCConnectionPoolStats.PoolSize);
if (jdbcConnStats != null) {
jdbcConnSize = jdbcConnStats.getCurrent();
}
return jdbcConnSize;
}
public long getJDBCConnectionPoolFreeSize(ObjectName perfName,
ObjectName jdbcName) {
long jdbcConnFreeSize = 0;
WSStats jdbcStats = getStatsFromIndividualMBean(perfName, jdbcName);
BoundedRangeStatisticImpl jdbcConnStats = (BoundedRangeStatisticImpl) jdbcStats
.getStatistic(WSJDBCConnectionPoolStats.FreePoolSize);
if (jdbcConnStats != null) {
jdbcConnFreeSize = jdbcConnStats.getCurrent();
}
return jdbcConnFreeSize;
}
public String getHeapSize() {
return new Long(getHeapSize(perfName, jvmName)).toString();
}
public long getHeapSize(ObjectName perfName, ObjectName jvmOn) {
long heapSize = 0;
WSStats jvmStats = getStatsFromIndividualMBean(perfName, jvmOn);
WSRangeStatistic jvmHeapStatistic = (WSRangeStatistic) jvmStats
.getStatistic(WSJVMStats.HeapSize);
heapSize = jvmHeapStatistic.getHighWaterMark();
return heapSize;
}
public long getFreeMemory(ObjectName perfName, ObjectName jvmOn) {
long freeMemo = 0;
WSStats jvmStats = getStatsFromIndividualMBean(perfName, jvmOn);
CountStatisticImpl jvmHeapStatistic = (CountStatisticImpl) jvmStats
.getStatistic(WSJVMStats.FreeMemory);
freeMemo = jvmHeapStatistic.getCount();
return freeMemo;
}
public long getUsedMemory(ObjectName perfName, ObjectName jvmOn) {
long usedMemo = 0;
WSStats jvmStats = getStatsFromIndividualMBean(perfName, jvmOn);
CountStatisticImpl jvmHeapStatistic = (CountStatisticImpl) jvmStats
.getStatistic(WSJVMStats.UsedMemory);
usedMemo = jvmHeapStatistic.getCount();
return usedMemo;
}
public WSStats getStatsFromIndividualMBean(ObjectName perfMBean,
ObjectName individualMBean) {
WSStats stats = null;
String[] signature = new String[] { "javax.management.ObjectName",
"java.lang.Boolean" };
Object[] params = new Object[] { individualMBean, new Boolean(false) };
try {
stats = (WSStats) adminClient.invoke(perfMBean, "getStatsObject",
params, signature);
} catch (Exception e) {
e.printStackTrace();
}
return stats;
}
public void setInstrumentationLevel(ObjectName individualMBean,
StatDescriptor sd, int level) {
Object[] params = new Object[2];
params[0] = new MBeanLevelSpec(individualMBean, sd, level);
params[1] = new Boolean(true);
String[] signature = new String[] {
"com.ibm.websphere.pmi.stat.MBeanLevelSpec",
"java.lang.Boolean" };
try {
adminClient.invoke(getPerfMBean(), "setInstrumentationLevel",
params, signature);
} catch (Exception e) {
e.printStackTrace();
}
}
public int getInstrumentationLevel(ObjectName perfOName, ObjectName oname) {
try {
Object[] params = new Object[] { oname, new Boolean(false) };
String[] signatures = new String[] { "javax.management.ObjectName",
"java.lang.Boolean" };
MBeanLevelSpec[] mlss = (MBeanLevelSpec[]) adminClient.invoke(
perfOName, "getInstrumentationLevel", params, signatures);
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -