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

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值