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" 指的是一个关于Java Management Extensions(JMX)的简单示例,可能是用于教学或演示如何在Java应用中使用JMX技术。"Download"表明这是一个可以下载的资源,可能包含了...
HelloWorld helloworld = (HelloWorld) ctx.lookup("HelloWorldBean/remote"); out.println(helloworld.SayHello("佛山人")); 5.用ant或eclipse,把客户端文件打成war包,发布到jboss上 6.输入...
在HelloWorld实例中,Hello类就是一个简单的MBean,提供了获取和设置名字的功能。MBeanServer可以将Hello对象注册进去,然后通过JMX客户端接口(如HtmlAdaptorServer)暴露给外部进行管理。 总结起来,JMX是一个...
为了更好地理解JMX的实际应用,我们来看一个简单的HelloWorld示例: 1. **Hello类**:这是一个普通的Java类,实现了`HelloMBean`接口。该类中定义了两个方法`getName()`和`setName()`,用于获取和设置名称;另外还...
### HelloWorld 实例 1. `Hello`类实现了`HelloMBean`接口,这样它就可以作为MBean注册到MBeanServer。`getName()`和`setName()`方法提供了对`name`属性的访问,而`printHello()`方法则提供了一个可管理的操作。 2...
#### 三、HelloWorld示例分析 接下来,我们将通过一个简单的“Hello World”示例来演示如何使用JMX。 1. **定义MBean接口**:首先,需要定义一个MBean接口,即`HelloMBean`。该接口规定了被管理对象(MBean)应该...
2. 创建MBean实现类`HelloWorld`,实现`HelloWorldMBean`接口并提供具体实现。 ```java public class HelloWorld implements HelloWorldMBean { private String greeting = "Hello, JMX!"; @Override public ...
为了开始我们的“Hello World”示例,我们需要设置一个基本的开发环境,包括配置JMX所需的类库和工具。这通常涉及到配置JDK中的jconsole或jmxfetch等工具,以便进行MBean的监控和管理。 **2.3 实现第一个MBean** ...
#### 知识点二:“Hello World”式的JMX应用 **概述**:本章节通过一个简单的“Hello World”案例介绍如何使用JMX进行基本的应用管理。 **详细解释**: - **创建MBean实例**:首先,需要定义一个实现`javax....
"Hello.java"和"HelloWorld.java"可能是示例类,用于演示RMI和JMX的使用。它们可能包含了简单的远程方法,或者展示了如何创建和注册MBean。 为了实现远程连接JVM并获取JVM参数,首先需要在服务器端启动JMX服务,并...
三、JMX HelloWorld 示例 1. **Hello MBean**: 在示例中,`Hello` 类实现了`HelloMBean`接口,这表明它是一个MBean。`getName()`和`setName()`方法暴露了配置属性,而`printHello()`方法展示了如何执行受管理的操作...
接下来,我们可以通过编写一个简单的HelloWorld示例来理解JMX的工作原理。在这个例子中,我们创建一个名为Hello的类,它实现了HelloMBean接口。HelloMBean接口是我们在MBean服务器中注册的管理接口,包含了我们想要...
回顾第二章,你使用HTML适配器动态加载了HelloWorld MBean到简单的JMX代理。为了使代理能够成功使用反射创建MBean,你使用的类名必须对应于一个具体类。 2. MBean必须有一个公共构造函数。除了必须公开之外,构造...
在JMX中,一个简单的“Hello World”示例通常包括以下步骤: 1. **创建MBean**: 定义一个实现了特定接口的类,该接口定义了管理属性和操作。例如,`Hello`类实现了`HelloMBean`接口,包含了`name`属性和`printHello...