`
ywChen
  • 浏览: 121115 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类
最新评论

JMX(二)HelloWorld

    博客分类:
  • J2EE
 
阅读更多

1.文件目录



 2.需要jdmkrt.jar附件可下载

 

3.创建 HelloMBean

 

 

package jmx.helloworld;

/**
 * HelloMBean定义方法及属性由Hello实现
 */
public interface HelloMBean {
	// operations

	public void sayHello();

	public int add(int x, int y);

	// attributes

	// a read-only attribute called Name of type String
	public String getName();

	// a read-write attribute called CacheSize of type int
	public int getCacheSize();

	public void setCacheSize(int size);
}
 

4.创建Hello实现HelloMBean接口,

 

package jmx.helloworld;

/**
 * 被监控的HelloBean
 * @author chenyw
 *
 */
public class Hello implements HelloMBean {

	private final String name = "Reginald";
	private static final int DEFAULT_CACHE_SIZE = 200;
	private int cacheSize = DEFAULT_CACHE_SIZE;

	public void sayHello() {
		System.out.println("hello, world");
	}

	public int add(int x, int y) {
		System.out.println("x+y="+(x+y));
		return x + y;
	}

	/*
	 * Getter for the Name attribute. The pattern shown here is frequent: the
	 * getter returns a private field representing the attribute value. In our
	 * case, the attribute value never changes, but for other attributes it
	 * might change as the application runs. Consider an attribute representing
	 * statistics such as uptime or memory usage, for example. Being read-only
	 * just means that it can't be changed through the management interface.
	 */
	public String getName() {
		return this.name;
	}

	/*
	 * Getter for the CacheSize attribute. The pattern shown here is frequent:
	 * the getter returns a private field representing the attribute value, and
	 * the setter changes that field.
	 */
	public int getCacheSize() {
		return this.cacheSize;
	}

	/*
	 *synchronized在多线程操作时能确保数据的唯一性
	 */
	public synchronized void setCacheSize(int size) {
		this.cacheSize = size;

		/*
		 * 
		 *
		 * 当设置CacheSize的值时控制台打印显示
		 * 
		 */
		System.out.println("Cache size now " + this.cacheSize);
	}

}
 

5.创建HelloAgent 

 

package jmx.helloworld;


import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.sun.jdmk.comm.HtmlAdaptorServer;

/**
 * 
 *该类是一个Agent类,说明: 先创建了一个MBeanServer,用来做MBean的容器
 * 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
 * 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面。 AdaptorServer其实也是一个MBean。
 * jmx.hello:name=Hello的名字是有一定规则的,格式为:“域名:name=MBean名称”,
 * 域名和MBean名称都可以任意取。 打开网页:http://localhost:8082/
 * 
 */
public class HelloAgent {
	public static void main(String[] args) throws Exception {
		// 创建一个MBeanServer,用来做MBean的容器
		MBeanServer mbs = MBeanServerFactory.createMBeanServer();
		// 将Hello这个类注入到MBeanServer中,注入需要创建一个ObjectName类
		ObjectName helloAdaptor = new ObjectName(
				"jmx.hello:name=Hello");
		mbs.registerMBean(new Hello(), helloAdaptor);
		ObjectName htmlAdaptorON = new ObjectName(
				"jmx.agent:name=HelloAgent,port=8082");
		// 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面
		HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer();
		mbs.registerMBean(htmlAdaptor, htmlAdaptorON);
		System.out.println("Starting the HtmlAdaptor....");
		htmlAdaptor.start();

	}
}
 

6.运行HelloAgent ,然后打开网页http://localhost:8082 如图所示



可以看到被监控HelloBean,点击进去可设置里面的值。如CacheSize 将value值设置为400,点击Apply

控制台打印为

Cache size now 400

 

 

  • 大小: 6.9 KB
  • 大小: 56.4 KB
  • 大小: 82.5 KB
分享到:
评论

相关推荐

    JMX HelloWorld Download

    **标题解析:** "JMX HelloWorld Download" 指的是一个关于Java Management Extensions(JMX)的简单示例,可能是用于教学或演示如何在Java应用中使用JMX技术。"Download"表明这是一个可以下载的资源,可能包含了...

    EJB HelloWorld

    HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...

    JMX一步一步来,快速学会开发JMX应用

    在HelloWorld实例中,Hello类就是一个简单的MBean,提供了获取和设置名字的功能。MBeanServer可以将Hello对象注册进去,然后通过JMX客户端接口(如HtmlAdaptorServer)暴露给外部进行管理。 总结起来,JMX是一个...

    JMX学习,开发文档

    ### HelloWorld 实例 1. `Hello`类实现了`HelloMBean`接口,这样它就可以作为MBean注册到MBeanServer。`getName()`和`setName()`方法提供了对`name`属性的访问,而`printHello()`方法则提供了一个可管理的操作。 2...

    JMX入门教程

    #### 三、HelloWorld示例分析 接下来,我们将通过一个简单的“Hello World”示例来演示如何使用JMX。 1. **定义MBean接口**:首先,需要定义一个MBean接口,即`HelloMBean`。该接口规定了被管理对象(MBean)应该...

    jmx入门

    2. 创建MBean实现类`HelloWorld`,实现`HelloWorldMBean`接口并提供具体实现。 ```java public class HelloWorld implements HelloWorldMBean { private String greeting = "Hello, JMX!"; @Override public ...

    JMX IN ACTION(二)

    为了开始我们的“Hello World”示例,我们需要设置一个基本的开发环境,包括配置JMX所需的类库和工具。这通常涉及到配置JDK中的jconsole或jmxfetch等工具,以便进行MBean的监控和管理。 **2.3 实现第一个MBean** ...

    JMX实战

    #### 知识点二:“Hello World”式的JMX应用 **概述**:本章节通过一个简单的“Hello World”案例介绍如何使用JMX进行基本的应用管理。 **详细解释**: - **创建MBean实例**:首先,需要定义一个实现`javax....

    使用RMI远程连接JVM.用JMX获取JVM的参数

    "Hello.java"和"HelloWorld.java"可能是示例类,用于演示RMI和JMX的使用。它们可能包含了简单的远程方法,或者展示了如何创建和注册MBean。 为了实现远程连接JVM并获取JVM参数,首先需要在服务器端启动JMX服务,并...

    JMX 入门 详细 教程

    三、JMX HelloWorld 示例 1. **Hello MBean**: 在示例中,`Hello` 类实现了`HelloMBean`接口,这表明它是一个MBean。`getName()`和`setName()`方法暴露了配置属性,而`printHello()`方法展示了如何执行受管理的操作...

    JMX学习——一步步来

    接下来,我们可以通过编写一个简单的HelloWorld示例来理解JMX的工作原理。在这个例子中,我们创建一个名为Hello的类,它实现了HelloMBean接口。HelloMBean接口是我们在MBean服务器中注册的管理接口,包含了我们想要...

    JMX IN ACTION(四)

    回顾第二章,你使用HTML适配器动态加载了HelloWorld MBean到简单的JMX代理。为了使代理能够成功使用反射创建MBean,你使用的类名必须对应于一个具体类。 2. MBean必须有一个公共构造函数。除了必须公开之外,构造...

    JMX入门教程 程序管理功能的框架

    在JMX中,一个简单的“Hello World”示例通常包括以下步骤: 1. **创建MBean**: 定义一个实现了特定接口的类,该接口定义了管理属性和操作。例如,`Hello`类实现了`HelloMBean`接口,包含了`name`属性和`printHello...

Global site tag (gtag.js) - Google Analytics