`
chillwarmoon
  • 浏览: 155354 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

难道只能用JNI实现JMX或者JDMK的instrumentation layer?

    博客分类:
  • JMX
阅读更多

最近在用JDMK做网上硬件资源和软件资源的监控,目的是得到这些资源的状态信息(例如:CPU利用率,内存利率,操作系统名称等),按照sun官方提供的JDMK的一个例子,是这样的:

利用JDMK所提供的mibgen工具,将一个MIB definition文件转换成多个MIB MBean,其中包含:一个主要的MBean类,它能够代表所有的MIB;代表SNMP groups或者entities的多个MBean和与之对应的metadata类;代表SNMP tables的多个类;代表SNMP enumerated type的多个类。

在产生的类中,该例子提供了一些实现,现在举个实现的SNMP的MIB system group分支上的MBean的例子:

SystemMBean类 部分代码
  1. // Generated by mibgen version 5.1 (05/20/05) when compiling RFC1213-MIB in standard metadata mode.   
  2. import com.sun.management.snmp.SnmpStatusException;   
  3.   
  4. /**  
  5.  * This interface is used for representing the remote management interface for the "System" MBean.  
  6.  */  
  7. public interface SystemMBean {   
  8.   
  9.     /**  
  10.      * Getter for the "SysLocation" variable.  
  11.      */  
  12.     public String getSysLocation() throws SnmpStatusException;   
  13.   
  14.     /**  
  15.      * Setter for the "SysLocation" variable.  
  16.      */  
  17.     public void setSysLocation(String x) throws SnmpStatusException;   
  18.   
  19.     /**  
  20.      * Checker for the "SysLocation" variable.  
  21.      */  
  22.     public void checkSysLocation(String x) throws SnmpStatusException;   
  23.   
  24.     /**  
  25.      * Getter for the "SysName" variable.  
  26.      */  
  27.     public String getSysName() throws SnmpStatusException;   
  28.   
  29.     /**  
  30.      * Setter for the "SysName" variable.  
  31.      */  
  32.     public void setSysName(String x) throws SnmpStatusException;   
  33.   
  34.     /**  
  35.      * Checker for the "SysName" variable.  
  36.      */  
  37.     public void checkSysName(String x) throws SnmpStatusException;   
  38.   
  39.    ………………   
  40. }  
System类 部分代码
  1.   
  2. // Generated by mibgen version 5.1 (05/20/05) when compiling RFC1213-MIB.   
  3. import java.io.Serializable;   
  4.   
  5. /**  
  6.  * The class is used for implementing the "System" group.  
  7.  * The group is defined with the following oid: 1.3.6.1.2.1.1.  
  8.  */  
  9. public class System implements SystemMBean, Serializable {   
  10.   
  11.     /**  
  12.      * Variable for storing the value of "SysLocation".  
  13.      * The variable is identified by: "1.3.6.1.2.1.1.6".  
  14.      */  
  15.     protected String SysLocation = new String("JDMK 5.1");   
  16.   
  17.     /**  
  18.      * Variable for storing the value of "SysName".  
  19.      * The variable is identified by: "1.3.6.1.2.1.1.5".  
  20.      */  
  21.     protected String SysName = new String("JDMK 5.1");   
  22.   
  23.     /**  
  24.      * Variable for storing the value of "SysContact".  
  25.      * The variable is identified by: "1.3.6.1.2.1.1.4".  
  26.      */  
  27.     protected String SysContact = new String("JDMK 5.1");   
  28.   
  29.     /**  
  30.      * Variable for storing the value of "SysUpTime".  
  31.      * The variable is identified by: "1.3.6.1.2.1.1.3".  
  32.      */  
  33.     protected Long SysUpTime = new Long(1);   
  34.   
  35.     /**  
  36.      * Variable for storing the value of "SysObjectID".  
  37.      * The variable is identified by: "1.3.6.1.2.1.1.2".  
  38.      */  
  39.     protected String SysObjectID = new String("1.3.6.1.4.1.42");   
  40.   
  41.     /**  
  42.      * Variable for storing the value of "SysDescr".  
  43.      * The variable is identified by: "1.3.6.1.2.1.1.1".  
  44.      */  
  45.     protected String SysDescr = new String("JDMK 5.1");   
  46.   
  47.     /**  
  48.      * Variable for storing the value of "SysServices".  
  49.      * The variable is identified by: "1.3.6.1.2.1.1.7".  
  50.      */  
  51.     protected Integer SysServices = new Integer(1);   
  52.   
  53.   
  54.     /**  
  55.      * Constructor for the "System" group.  
  56.      * If the group contains a table, the entries created through an SNMP SET will not be registered in Java DMK.  
  57.      */  
  58.     public System(SnmpMib myMib) {   
  59.     }   
  60.   
  61.   
  62.     /**  
  63.      * Constructor for the "System" group.  
  64.      * If the group contains a table, the entries created through an SNMP SET will be AUTOMATICALLY REGISTERED in Java DMK.  
  65.      */  
  66.     public System(SnmpMib myMib, MBeanServer server) {   
  67.     }   
  68.   
  69.     /**  
  70.      * Getter for the "SysLocation" variable.  
  71.      */  
  72.     public String getSysLocation() throws SnmpStatusException {   
  73.         return SysLocation;   
  74.     }   
  75.   
  76.     /**  
  77.      * Setter for the "SysLocation" variable.  
  78.      */  
  79.     public void setSysLocation(String x) throws SnmpStatusException {   
  80.         SysLocation = x;   
  81.     }   
  82.   
  83.     /**  
  84.      * Checker for the "SysLocation" variable.  
  85.      */  
  86.     public void checkSysLocation(String x) throws SnmpStatusException {   
  87.         //   
  88.         // Add your own checking policy.   
  89.         //   
  90.     }   
  91.   
  92.     /**  
  93.      * Getter for the "SysName" variable.  
  94.      */  
  95.     public String getSysName() throws SnmpStatusException {   
  96.         return SysName;   
  97.     }   
  98.   
  99.     /**  
  100.      * Setter for the "SysName" variable.  
  101.      */  
  102.     public void setSysName(String x) throws SnmpStatusException {   
  103.         SysName = x;   
  104.     }   
  105.   
  106.     /**  
  107.      * Checker for the "SysName" variable.  
  108.      */  
  109.     public void checkSysName(String x) throws SnmpStatusException {   
  110.         //   
  111.         // Add your own checking policy.   
  112.         //   
  113.     }   
  114. ………………   
  115. }   

在该例子中,给出了继承System的类SystemImpl

SystemImpl 代码
  1.  * @(#)file      SystemImpl.java   
  2. import java.net.InetAddress;   
  3.   
  4.   
  5. /**  
  6.  * The SystemImpl class provides an simple implementation of the "System" group.  
  7.  */  
  8.   
  9. public class SystemImpl extends System {   
  10.   
  11.     // MBean properties.   
  12.     //   
  13.        
  14.     // Start up time of the agent.   
  15.     //   
  16.     private long startUpTime = 0;   
  17.   
  18.     /**  
  19.      * Constructors.  
  20.      */  
  21.     public SystemImpl(SnmpMib myMib) {   
  22.        
  23.         super(myMib);   
  24.         init();   
  25.     }   
  26.        
  27.     public SystemImpl(SnmpMib myMib, MBeanServer server) {   
  28.        
  29.         super(myMib, server);   
  30.       //  java.lang.System.out.println(((SnmpAdaptorServer)myMib.getSnmpAdaptor()).getSnmpInGetNexts()+"adffds");   
  31.            
  32.         init();   
  33.     }   
  34.        
  35.     private void init() {   
  36.            
  37.         // Initialize the system description using some system properties.   
  38.         //   
  39.         try {   
  40.             SysDescr = java.lang.System.getProperty("os.name") + " " +   
  41.                 java.lang.System.getProperty("os.arch") + " " +   
  42.                 java.lang.System.getProperty("os.version");   
  43.         } catch(SecurityException e) {   
  44.             // Do not process the exception   
  45.         }   
  46.        
  47.         // Initialize the system name using the hostname.   
  48.         //   
  49.         try {   
  50.             SysName = (InetAddress.getLocalHost()).getHostName();   
  51.         } catch(UnknownHostException e) {   
  52.             // Do not process the exception   
  53.         }   
  54.        
  55.         // Initialize the system contact using some system properties.   
  56.         //   
  57.         try {   
  58.             SysContact = java.lang.System.getProperty("user.name");   
  59.         } catch(SecurityException e) {   
  60.             // Do not process the exception   
  61.         }   
  62.        
  63.         // Initialize the set of services. Assume the agent only deals   
  64.         // with application layer.   
  65.         //   
  66.         SysServices = new Integer(72);   
  67.   
  68.         // Initialize the location with a dummy string.   
  69.         //   
  70.         SysLocation = "Sample implementation of system group.";   
  71.        
  72.         // For the sysUpTime, use the time the agent started...   
  73.         //   
  74.         startUpTime = java.lang.System.currentTimeMillis();   
  75.     }   
  76.        
  77.     public Long getSysUpTime() throws SnmpStatusException {   
  78.        
  79.         long diff = java.lang.System.currentTimeMillis() - startUpTime;   
  80.         return new Long(diff);   
  81.     }   
  82. }   

在SystemImpl中,是具体的实现instrumentation layer层中的MBean的例子,但是如果不是获得System group上的信息,而是获得CPU利用率,一般情况下,通过在客户端装snmp agent(net-snmp),然后用snmpget命令根据OID可以获得CPU利用率。但是在JDMK中,用java实现的话,是不是只能够通过JNI的方式来建立MBean,能否在JDMK下,利用SNMP的OID获得资源的状态信息呢?有没有其他可行的方法呢?

分享到:
评论

相关推荐

    JNI实现原理权威指南

    JNI(Java Native Interface)是Java语言的一个重要特性,它允许Java代码和其他语言编写的本地代码进行交互,这在Java应用中实现与底层系统特定功能的访问时尤其有用。要深入理解JNI的实现原理,本书《JNI实现原理...

    Android中JNI实现AES加密源代码

    综上所述,"Android中JNI实现AES加密源代码"涉及的知识点包括Android JNI的使用、AES加密算法的实现、NDK开发环境的配置、C/C++与Java的交互,以及数据安全和性能优化。通过这样的实现,开发者可以在Android应用中...

    Android下AES加密算法的JNI实现(包含SO文件)

    在Android开发中,有时为了提高性能或利用C/C++库的优势,我们会选择使用JNI(Java Native Interface)来实现部分功能。本资源提供了一个具体的实例,即在Android环境下使用JNI实现AES(Advanced Encryption ...

    androidjni实现本地加解密数据,使用C++语言编写,基于openssl实现 集成RSAAES3DESBASE64MD5

    本项目主要探讨了如何使用C++语言通过JNI(Java Native Interface)与Android应用交互,实现基于OpenSSL库的加解密算法,包括RSA、AES、3DES、BASE64和MD5。以下是关于这些技术的详细解释: 1. **JNI(Java Native ...

    使用jni和DES实现两次加密

    标题中的“使用JNI和DES实现两次加密”是指在Java编程中结合使用JNI(Java Native Interface)和DES(Data Encryption Standard)加密算法来实现双重安全保护的一种技术。这种技术通常用于提高程序的安全性,防止数据在...

    安卓手机音频调用JNI实现

    2. **库集成**:许多现有的音频处理库是用C或C++编写的,使用JNI可以方便地将这些库集成到Android应用中,无需重新编写。 3. **减少内存分配和垃圾回收开销**:Java对象的创建和销毁会涉及到内存分配和垃圾回收,而...

    java通过jni实现口令屏蔽

    Java 通过JNI(Java Native Interface)实现口令屏蔽是一种在Java应用程序中安全处理敏感数据,如密码或密钥,的方法。JNI是Java平台提供的一种机制,允许Java代码和其他语言写的代码进行交互。在这个场景中,C++代码...

    JNI实现示例DEMO

    熟练掌握JNI能够帮助你充分利用Java的跨平台特性,同时结合本地代码的优势,提升应用性能或者实现特定功能。在进行JNI编程时,确保理解并正确处理内存管理、线程安全以及错误处理是非常重要的。

    JNI实现回调及JNI开启线程

    JNI在很多场景下都是必要的,比如当需要利用C/C++库来提高性能,或者实现与硬件设备的直接通信时。本示例中,我们将深入探讨如何使用JNI实现回调机制以及在JNI中开启线程。 1. **JNI回调JAVA的函数**: 在Java中,...

    使用JNI实现Sobel算子图像边缘检测

    **使用JNI实现Sobel算子图像边缘检测** 在计算机视觉领域,边缘检测是图像处理中的一个关键步骤,它有助于识别图像中的边界,从而提取出重要的结构信息。Sobel算子是一种广泛使用的边缘检测方法,其原理是通过计算...

    springboot 集成seetaface6JNI实现人脸检测识别

    在本文中,我们将深入探讨如何将SeetaFace6JNI集成到SpringBoot应用中,实现高效的人脸检测和识别功能。SeetaFace6JNI是SeetaFace6库的一个Java封装,它提供了一种与Java应用程序交互的方式,使得在Java环境中也能...

    JNI实现高斯模糊图片

    在Android开发中,JNI...总结,使用JNI实现高斯模糊图片可以提高处理速度,尤其对于大量图片模糊需求的场景,相比纯Java实现更具优势。不过,使用JNI也会增加项目的复杂性,需要开发者具备C/C++和图像处理的基础知识。

    JNI实现与VSS通信

    JNI在很多场景下被用到,比如当需要提升性能、调用操作系统特定功能或者集成现有的C/C++库时。在本例中,JNI被用来实现与Visual SourceSafe(VSS)的通信。 Visual SourceSafe(VSS)是由Microsoft开发的一款源代码...

    yuv420p转yuv420sp jni实现

    yuv420p转yuv420sp的jni实现 修改下全类名就可以使用

    用JNI实现java和C++的相互调用

    下面我们将详细介绍如何用JNI实现Java和C++的相互调用。 首先,我们有一个名为`JniTest`的Java类,它包含多个native方法,这些方法将在C++中实现。例如,`PrintHello()`、`Print()`、`AccessField()`、`...

    用JNI技术实现加减乘除算法

    在本案例中,“用JNI技术实现加减乘除算法”意味着我们将探讨如何利用JNI来编写和调用本地方法来执行基本的算术运算。 首先,我们需要理解JNI的工作原理。JNI接口定义了一系列的函数,这些函数允许Java虚拟机(JVM...

    Android使用Jni实现压力锅数据检测效果示例

    本文实例讲述了Android使用Jni实现压力锅数据检测效果。分享给大家供大家参考,具体如下: 1、创建主页: package com.android.imooc.jni; import com.android.imooc.R; import android.app.Activity; import ...

    通过JNI实现C++与JAVA相互调用之TCP编程

    在这个"通过JNI实现C++与JAVA相互调用之TCP编程"的示例中,我们探讨的是如何使用JNI来实现TCP通信,其中C++作为底层通信引擎,而Java则负责上层应用逻辑。 首先,TCP(Transmission Control Protocol)是一种面向...

    jni实现自定义progress(锅炉压力监测)

    本项目"jni实现自定义progress(锅炉压力监测)"的目标是创建一个自定义的进度条组件,用于实时监测和显示锅炉的压力数据,这种需求可能出现在工业自动化或者物联网(IoT)应用中。 首先,我们要理解如何在Android中...

    jni.zip jni编译jni下载

    JNI在很多场景下非常有用,比如当需要利用已有的C或C++库,或者提升性能时,我们可以通过JNI将Java代码与本地代码集成。 在描述中提到的`jni.h`和`jni_md.h`是JNI编程中必不可少的头文件。`jni.h`包含了JNI接口的...

Global site tag (gtag.js) - Google Analytics