1. 程式人生 > >使用jmx監控weblogic啟用iiop協議

使用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;
 }

}