使用jmx監控weblogic啟用iiop協議
使用jmx監控weblogic伺服器。建一個java工程,引入weblogic.jar到工程裡面。
package com.tst.idc.weblogic;
import java.io.IOException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Hashtable;
import javax.management.AttributeNotFoundException;
import javax.management.InstanceNotFoundException;
import javax.management.MBeanAttributeInfo;
import javax.management.MBeanException;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.MalformedObjectNameException;
import javax.management.ObjectName;
import javax.management.ReflectionException;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class JMXWeblogic {
private static MBeanServerConnection connection;
private static JMXConnector connector;
private static String _DOMAIN_RUNTIME_SERVICE_OBJECTNAME=new String("com.bea:Name=DomainRuntimeService,Type=weblogic.management.mbeanservers.domainruntime.DomainRuntimeServiceMBean");
/**
* 例項化與Domain Runtime MBean Server的連線採用的事iiop協議
*
* @param hostname
* @param portString
* @param username
* @param password
* @throws Exception
*/
@SuppressWarnings("unchecked")
private void initConnection(String hostname, String portString,
String username, String password) throws Exception {
Integer portInteger = Integer.valueOf(portString);
int port = portInteger.intValue();
// String jndiroot = "/jndi/";
// String mserver = "weblogic.management.mbeanservers.domainruntime";
JMXServiceURL serviceURL=
new JMXServiceURL(
"service:jmx:iiop://"+hostname+":"+port+"/jndi/weblogic.management.mbeanservers.domainruntime");
System.out.println("Connection to:"+serviceURL);
Hashtable h=new Hashtable();
h.put(JMXConnectorFactory.PROTOCOL_PROVIDER_PACKAGES,"weblogic.management.remote");
h.put(javax.naming.Context.SECURITY_PRINCIPAL, "weblogic");
h.put(javax.naming.Context.SECURITY_CREDENTIALS, "weblogic");
connector=JMXConnectorFactory.newJMXConnector(serviceURL, h);
connector.connect();
System.out.println("連線成功!");
connection=connector.getMBeanServerConnection();
}
/*
* 列印一組ServerRuntiimeMBeans,此MBean是執行是MBean層次的根。此域中夫人每個伺服器承載著自己的例項
*/
public static ObjectName[] getServerRuntimes() throws Exception {
ObjectName domainRunServiceOName=new ObjectName(_DOMAIN_RUNTIME_SERVICE_OBJECTNAME);
ObjectName[] serverRuntimeMBean=(ObjectName[])connection.getAttribute(domainRunServiceOName, "ServerRuntimes");
return serverRuntimeMBean;
}
/**
* 獲取一組WebApplicationComponentRuntimeMBean
*
* @throws Exception
*/
public void getServletData() throws Exception {
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"));
}
}
}
}
}
}
/**
* 迭代serverRuntimeMBean,獲取名稱和狀態
*
* @param p_objNames
* @throws Exception
*/
public static String printNameAndState(ObjectName[] p_objNames) throws Exception {
StringBuffer info=new StringBuffer();
ObjectName[] serverRT = p_objNames;
System.out.println(" got server runtimes");
int length = (int) serverRT.length;
for (int i = 0; i < length; i++) {
System.out
.println("=============================weblogic 執行資訊========================================");
// 域名稱
String name = (String) connection.getAttribute(serverRT[i], "Name");
System.out.println("Server name:" + name);
info.append("Server_Name="+name+";");
// 執行狀態
String state = (String) connection.getAttribute(serverRT[i],
"State");
System.out.println("Server state:" + state);
info.append("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);
info.append("Start_running_time="+strDateTime+";");
// weblogic 的版本
String weblogicVersion = (String) connection.getAttribute(
serverRT[i], "WeblogicVersion");
System.out.println("Weblogic Version:" + weblogicVersion);
info.append("Weblogic_Version="+weblogicVersion+";");
// OS資訊
ObjectName jvmServerRT = (ObjectName) connection.getAttribute(
serverRT[i], "JVMRuntime");
System.out
.println("================================OS資訊=======================================");
String osName=connection.getAttribute(jvmServerRT, "OSName")
.toString();
System.out
.println("作業系統:"
+ osName);
info.append("OSName="+osName+";");
String osVersion=connection.getAttribute(jvmServerRT, "OSVersion")
.toString();
info.append("OSVersion="+osVersion+";");
System.out.println("作業系統版本:"
+ osVersion);
String javaVersion=connection.getAttribute(jvmServerRT, "JavaVersion")
.toString();
info.append("JavaVersion="+javaVersion+";");
System.out.println("Java版本:"
+ javaVersion);
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 + "秒");
}
return info.toString();
}
public static void main(String[] args) {
String hostname = "localhost";
String portString = "7001";
String username = "webglogic";
String password = "weblogic";
JMXWeblogic demo = new JMXWeblogic();
try {
demo.initConnection(hostname, portString, username, password);
//demo.getServletData();
System.out.println("===========================================================================================================");
demo.printNameAndState(demo.getServerRuntimes());
connector.close();
} catch (Exception e) {
e.printStackTrace();
}
}
/*
* 列印輸出
*/
public void print(String prefix, String content) {
System.out.println(prefix + ":" + content);
}
public static String GetWebLogicIfo(String hostname,String portString,String username,String password) {
String info="";
JMXWeblogic jmx=new JMXWeblogic();
try {
jmx.initConnection(hostname, portString, username, password);
// demo.getServletData();
info= printNameAndState(getServerRuntimes());
connector.close();
} catch (Exception e) {
e.printStackTrace();
}
return info;
}
}