/** * */ package com.monitor.weblogic; import java.io.IOException; import java.net.MalformedURLException; import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.Hashtable; import javax.management.MBeanServerConnection; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; import javax.management.remote.JMXConnector; import javax.management.remote.JMXConnectorFactory; import javax.management.remote.JMXServiceURL; import javax.naming.Context; /** * @author Administrator * */ public class MonitorWeblogic { private static MBeanServerConnection connection; private static JMXConnector connector; private static final ObjectName service; /* * 实例化 DomainRuntimeServiceMBean 对象名,这样可以通过类使用此对象名. */ static { try { service = new ObjectName( "com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean"); } catch (MalformedObjectNameException e) { throw new AssertionError(e.getMessage()); } } public static void main(String[] args) throws Exception { String hostname = "localhost"; String portString = "7001"; String username = "weblogic"; String password = "weblogic"; MonitorWeblogic weblogic = new MonitorWeblogic(); weblogic.initConnection(hostname, portString, username, password); // weblogic.printNameAndState(weblogic.getServerRuntimes()); // weblogic.getServletData(); weblogic.printAppNameAndState(); } /* * 实例化与 Domain Runtime MBean Server 的连接。 */ private void initConnection(String hostname, String portString, String username, String password) throws IOException, MalformedURLException { String protocol = "t3"; Integer portInteger = Integer.valueOf(portString); int port = portInteger.intValue(); String jndiroot = "/jndi/"; String mserver = "weblogic.management.mbeanservers.domainruntime"; JMXServiceURL serviceURL = new JMXServiceURL(protocol, hostname, port, jndiroot + mserver); Hashtable<String, String> h = new Hashtable<String, String>(); h.put(Context.SECURITY_PRINCIPAL, username); h.put(Context.SECURITY_CREDENTIALS, password); h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES, "weblogic.management.remote"); connector = JMXConnectorFactory.connect(serviceURL, h); connection = connector.getMBeanServerConnection(); } public ObjectName[] getServerRuntimes() throws Exception { return (ObjectName[]) connection.getAttribute(service, "ServerRuntimes"); } /* * 迭代 ServerRuntimeMBean,获取名称和状态 */ public void printNameAndState(ObjectName[] p_objNames) throws Exception { ObjectName[] serverRT = p_objNames; System.out.println("got server runtimes"); int length = (int) serverRT.length; for (int i = 0; i < length; i++) { print("===================Weblogic运行信息====================", ""); //域名称 String name = (String) connection.getAttribute(serverRT[i], "Name"); System.out.println("Server name: " + name); //运行状态 String state = (String) connection.getAttribute(serverRT[i], "State"); System.out.println("Server state: " + state); //开始时间 Long activationTime = (Long) connection.getAttribute(serverRT[i], "ActivationTime"); Calendar cal = Calendar.getInstance(); Date date = cal.getTime(); date.setTime(activationTime); SimpleDateFormat formater = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); String strDateTime = formater.format(date); System.out.println("Start running time: " + strDateTime); //weblogic 的版本 String weblogicVersion = (String) connection.getAttribute(serverRT[i], "WeblogicVersion"); System.out.println("Weblogic Version: " + weblogicVersion); //OS信息 ObjectName jvmServerRT = (ObjectName) connection.getAttribute(serverRT[i], "JVMRuntime"); print("=======================OS信息==========================", ""); print(" 操作系统", connection.getAttribute(jvmServerRT, "OSName").toString()); print(" 操作系统版本", connection.getAttribute(jvmServerRT, "OSVersion").toString()); print(" Java版本", connection.getAttribute(jvmServerRT, "JavaVersion").toString()); print(" Java提供商", connection.getAttribute(jvmServerRT, "JavaVMVendor").toString()); long runTime = (Long) connection.getAttribute(jvmServerRT, "Uptime") / 1000; long day = runTime / (24 * 60 * 60); long hour = runTime % (24 * 60 * 60) / (60 * 60); long minute = runTime % (60 * 60) / 60; long second = runTime % 60; System.out.println(" 系统已经运行:" + day + "天" + hour + "小时" + minute + "分" + second + "秒"); } } /* * * 获取一组 WebApplicationComponentRuntimeMBean 取得应用相关信息比如jdbc */ public void getServletData() throws Exception { print("===================ServletData信息====================", ""); ObjectName[] serverRT = getServerRuntimes(); int length = (int) serverRT.length; for (int i = 0; i < length; i++) { ObjectName[] appRT = (ObjectName[]) connection.getAttribute(serverRT[i], "ApplicationRuntimes"); int appLength = (int) appRT.length; for (int x = 0; x < appLength; x++) { System.out.println("Application name: " + (String) connection.getAttribute(appRT[x], "Name")); ObjectName[] compRT = (ObjectName[]) connection.getAttribute(appRT[x], "ComponentRuntimes"); int compLength = (int) compRT.length; for (int y = 0; y < compLength; y++) { System.out.println(" Component name: " + (String) connection.getAttribute(compRT[y], "Name")); String componentType = (String) connection.getAttribute(compRT[y], "Type"); System.out.println(" type: " + componentType.toString()); if (componentType.toString().equals("WebAppComponentRuntime")) { ObjectName[] servletRTs = (ObjectName[]) connection.getAttribute(compRT[y], "Servlets"); int servletLength = (int) servletRTs.length; for (int z = 0; z < servletLength; z++) { System.out.println(" Servlet name: " + (String) connection.getAttribute(servletRTs[z], "Name")); System.out.println(" Servlet context path: " + (String) connection.getAttribute(servletRTs[z], "ContextPath")); System.out.println(" Invocation Total Count : " + (Object) connection.getAttribute(servletRTs[z], "InvocationTotalCount")); } } } } } } /** * 取得应用状态 * @throws Exception */ public void printAppNameAndState() throws Exception { print("===================AppNameAndState====================", ""); ObjectName[] serverRT = getServerRuntimes(); for (int k = 0; k < serverRT.length; k++) { ObjectName[] appRT = (ObjectName[]) connection.getAttribute(serverRT[k], "ApplicationRuntimes"); int length = appRT.length; for (int i = 0; i < length; i++) { String appName = (String) connection.getAttribute(appRT[i], "Name"); ObjectName[] compRT = (ObjectName[]) connection.getAttribute(appRT[i], "ComponentRuntimes"); for (int j = 0; j < compRT.length; j++) { int appState = ((Integer) connection.getAttribute(compRT[j], "DeploymentState")).intValue(); String type = (String) connection.getAttribute(compRT[j], "Type"); System.out.println(k + "|" + j + "|Server name: " + appName + ". Server type: " + type + " Server state: " + appState); } } } } public void print(String prefix, String content) { System.out.println(prefix + ": " + content); } }
监控weblogic代码
代码从别出拷来,运行了一下。可以正常运行。以后可以通过这部分代码来扩展监控。
猜你喜欢
转载自liu-yi126.iteye.com/blog/1299636
今日推荐
周排行