⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 wsconfigmanagement.java

📁 用java开发的关于
💻 JAVA
📖 第 1 页 / 共 2 页
字号:
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 + -