`

jmx 实例--最简单的例子

 
阅读更多

1,接口

/**
 * standard MBeans, dynamic MBeans, open MBeans(形如MXBean) 
 * and model MBeans,@MXBean()注解的接口名字可以任意取
 * @author river.wang
 */
@MXBean()
public interface CMonitor0 {
    public long getUptime();
    public String getMemory();
}

 

 2,MBean,被管理对象,一如JavaBean。Bean对象,实体,对应资源。。。

/**
 * @author river.wang
 */
public class ServerMonitor implements CMonitor0{
    private final long startTime;
    private Runtime runtime = Runtime.getRuntime();
    public ServerMonitor() {
        startTime = System.currentTimeMillis();
    }
    public long getUptime() {
        return System.currentTimeMillis()-startTime;
    }
    public String getMemory() {
        float freeMemory = (float)runtime.freeMemory();
        float totalMemory = (float)runtime.totalMemory();
        String memory = "idle scale : "+(freeMemory/totalMemory)+"%; freeMemory="
            +(freeMemory)/1024+" KB; totalMemory="+(totalMemory)/1024+" KB" ;
        return memory;
    }
}

 

 3,运行下面程序,就可以用jconsole进行本地连接了

/**
 * @author river.wang
 */
public class ServerMonitorAgent {
    public static void main( String[] args )
        throws Exception {
        // MBeanServer server=MBeanServerFactory.createMBeanServer(); //不可在jconsole中使用
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();// 可在jconsole中使用
        // 被管理的bean,"com.jmx"包名任意取
        ObjectName monitorName = new ObjectName( "com.jmx:type=ServerMonitor" );
        server.registerMBean( new ServerMonitor(), monitorName );
        // 必须确保线程活着
        Thread.sleep( Long.MAX_VALUE );
    }
}

 

 4.1,指定端口--Server端 

/**
 * @author river.wang
 */
public class ServerMonitorAgentv2 {

    public static void main( String[] args )
        throws Exception {
        // MBeanServer server=MBeanServerFactory.createMBeanServer(); //不可在jconsole中使用
        MBeanServer server = ManagementFactory.getPlatformMBeanServer();// 可在jconsole中使用

        // 指定端口
        LocateRegistry.createRegistry( 1098 );
        JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://127.0.0.1:" + 1098 + "/myJmx" );
        Map<String, Object> env = new HashMap<String, Object>();
//        System.setProperty( "com.sun.management.jmxremote.authenticate", "true" );
//        env.put( "jmx.remote.credentials", new String[] { "admin", "admin123" } );
        
        JMXConnectorServer cntorServer = JMXConnectorServerFactory.newJMXConnectorServer( url, env, server );
        cntorServer.start();

        // 被管理的bean,"com.jmx"包名任意取,可以多个Bean
        ObjectName monitorName = new ObjectName( "com.jmx:type=ServerMonitor" );
        server.registerMBean( new ServerMonitor(), monitorName );
    }
}

 

 

 4.2,指定端口--Client端 

/**
 * @author river.wang
 */
public class ServerMonitorClient {
    public static void main( String[] args )
        throws Exception {
        JMXServiceURL url = new JMXServiceURL( "service:jmx:rmi:///jndi/rmi://192.168.22.91:1098/myJmx" );
        Map<String, Object> env = new HashMap<String, Object>();
//        env.put( "jmx.remote.credentials", new String[] { "admin", "admin123" } );
        JMXConnector conn = JMXConnectorFactory.connect(url,env );
        
        CMonitor0 monitor = JMX.newMBeanProxy( conn.getMBeanServerConnection(),
             new ObjectName( "com.jmx:type=ServerMonitor" ),CMonitor0.class );
        for ( int i = 0; i < 10; i++ ) {
            System.out.println( monitor.getUptime() );
            System.out.println( monitor.getMemory() );
        }
        conn.close();
    }
}

 

分享到:
评论
1 楼 zbz 2016-03-22  
例子很简单,可是怎么设置访问账号和密码呢?注释掉的那段不起作用

相关推荐

    最简单JMX例子

    对于初学者,这个"最简单JMX例子"将展示如何创建一个简单的MBean,如何在Eclipse这样的集成开发环境中配置和运行,以及如何通过标准的JMX客户端工具进行交互。通过学习这个例子,你可以理解JMX的基本结构和用法,为...

    JMX小例子以及介绍

    - **MBean(Managed Beans)**: MBean是JMX中最基本的管理单元,它是Java对象,代表可管理的资源或服务。MBean可以是标准MBean、开放MBean或模型MBean,每种类型都有不同的接口和注册方式。 - **MBean Server**: 这...

    (2.0版本)自己写的struts2+hibernate+spring实例

    common.jar jboss-jmx.jar jboss-system.jar jacc-1_0-fr.jar jgroups-2.2.8.jar oscache-2.1.jar proxool-0.8.3.jar swarmcache-1.0rc2.jar classes12.jar spring.jar ...

    hibernate_reference.pdf

    - **Minimal architecture**:介绍最简单的Hibernate应用架构。 - **Comprehensive architecture**:提供一个更完整的架构视图,包括所有可用组件。 - **Basic APIs**:描述基本的API接口,如Session、...

    hiberante 参考手册 最新版 中文版 3.6.8

    - **4.1 一个简单的POJO例子** - **实现一个默认的(即无参数的)构造方法**: 确保每个持久化类都有一个无参构造函数。 - **提供标识符属性**: 为每个实体类定义唯一的标识符。 - **优选非最终类**: 避免使用...

    Hibernate参考文档

    ##### 4.1 简单的 POJO 例子 - **实现默认构造方法**: 必须有一个无参构造函数。 - **提供标识属性**: 主键字段。 - **使用非 final 类**: 便于子类继承。 - **声明访问器和是否可变的标志**: 提供 getter 和 ...

    hibernate_3.5.6_中文帮助文档(有目录)_Final.pdf

    文档提到了Hibernate的体系结构概况,包括实例状态、与Java管理扩展(JMX)的整合以及对Java连接器架构(JCA)的支持。文档还提到了上下文相关的会话(Contextual Session),这涉及到Hibernate会话的生命周期管理。...

    kafka-streams-scala:Kafka Streams API的Thin Scala包装器

    在这个例子中,我们创建了一个流处理拓扑,从`input-topic`读取数据,过滤掉不包含"target"的记录,然后将结果写入`output-topic`。 ### 6. 部署与监控 Kafka Streams应用可以在任何Kafka集群上运行,可以设置多个...

    最全Hibernate 参考文档

    4.1. 一个简单的POJO例子 4.1.1. 为持久化字段声明访问器(accessors)和是否可变的标志(mutators) 4.1.2. 实现一个默认的(即无参数的)构造方法(constructor) 4.1.3. 提供一个标识属性(identifier property)(可...

    Spring中文帮助文档

    2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 ...

    Spring API

    2.6.3. JMX 支持 2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3...

    ESB应用Hello_World_Action

    ESB(Enterprise Service Bus,企业服务总线)是企业级集成解决方案的核心,它提供了...通过这个简单的例子,我们可以深入理解ESB如何在企业集成场景中发挥关键作用,协调不同系统的通信,并提供灵活的服务组合和管理。

Global site tag (gtag.js) - Google Analytics