MBean之间的通信是必不可少的,Notification就起到了在MBean之间沟通桥梁的作用,JMX Notification由4个部分组成:
Notification 这个相当于一个信息包,封装了需要传递的信息。
Notification broadcast 这相当于一个广播器,把消息广播出去。
Notification listerner 这是一个监听器,用于监听广播出来的Notification 消息。
Notification filter 这是一个过滤器,过滤掉不需要的Notification 消息。
Notification broadcast不需要我们实现,JMX内部已经有了,Notification filter 一般也很少用,下面的例子主要用到
Notification 、Notification listerner。
1.目录结构
在hello中有一个sayHello(String message)方法,意思是根据碰到的是谁来打招呼,比如:
jack从对面走过来,说:‘hi’
我们回礼,说:‘hello jack“
首先需要jack先说一个hi(相应一个操作),然后他说的话封装成声波(相当于Notification 消息包)传递出去,然后我们还要给jack装上一个监听器(耳朵),这个监听器将捕捉到jack的声波语音包,并进行相应的处理,即说”hello jack“。
2.将jack写成一个MBean
JackMBean
package jmx.notification;
public interface JackMBean {
public void hi();
}
Jack
package jmx.notification;
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
/**
* Jack必须继承NotificationBroadcasterSupport
* 此类只有一个hi方法,方法只有两句:创建消息报,然后将包发出去
* 如果你还要在消息包上附加其他数据,notification还有一个setUserData()方法
* @author chenyw
*
*/
public class Jack extends NotificationBroadcasterSupport implements JackMBean{
private int seq =0;
@Override
public void hi() {
Notification n = new Notification(//创建一个信息包
"jack.hi",//给这个Notifiction起一个名字
this,//由谁发出的Notification
++seq,//一系列通知中的序列号,可以设置任意数
System.currentTimeMillis(),//发出时间
"Jack"//发出文本
);
sendNotification(n);
}
}
3.创建一个Listerner,监听到的Notification 消息包将由此类负责处理。
HelloListener
package jmx.notification;
import javax.management.Notification;
import javax.management.NotificationListener;
/**
* 创建一个Listener,监听到的Notification消息包将由此类负责处理
* @author chenyw
*
*/
public class HelloListener implements NotificationListener{
@Override
public void handleNotification(Notification n, Object handback) {
System.out.println("type:"+n.getType());
System.out.println("source:"+n.getSource());
System.out.println("seq:"+n.getSequenceNumber());
System.out.println("send time:"+n.getTimeStamp());
System.out.println("message:"+n.getMessage());
if(handback!=null){
if(handback instanceof Hello ){
Hello h = (Hello)handback;
h.sayHello(n.getMessage());
}
}
}
}
4.修改HelloAgent
package jmx.notification;
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");
Hello hello = new Hello();
mbs.registerMBean(hello, helloAdaptor);
ObjectName htmlAdaptorON = new ObjectName(
"jmx.agent:name=HelloAgent,port=8082");
// 创建一个AdaptorServer,这个类将决定MBean的管理界面,这里用最普通的Html型界面
HtmlAdaptorServer htmlAdaptor = new HtmlAdaptorServer();
mbs.registerMBean(htmlAdaptor, htmlAdaptorON);
//加入Notification
Jack jack = new Jack();
mbs.registerMBean(jack, new ObjectName(
"jmx.jack:name=Jack"));
jack.addNotificationListener(new HelloListener(), null, hello);
System.out.println("Starting the HtmlAdaptor....");
htmlAdaptor.start();
}
}
5.运行HelloAgent,打开浏览器http://localhost:8082
进入那么=jack,然后点击hi按钮来执行它,这是控制台显示:
- 大小: 13.1 KB
- 大小: 38.4 KB
- 大小: 9.8 KB
分享到:
相关推荐
7. **工具支持**:提到了Java标准工具(如JConsole、VisualVM)和其他第三方工具,如何利用这些工具与JMX交互,查看和接收通知。 由于没有具体的博客内容,以上推测基于通常JMX通知服务会涉及的话题。如果想深入...
JMX架构由三个主要部分组成:MBeans(Managed Beans)、Servers和Clients。MBeans是可管理的对象,代表服务或资源;Servers是运行在Java虚拟机中的代理,它们暴露MBeans给外部访问;Clients则是与Server交互的应用...
4. **Notification**: JMX支持发布/订阅模型,MBeans可以发送通知到感兴趣的客户端,使得实时监控成为可能。 通过JMX,开发者可以实现自定义的监控解决方案,例如收集性能指标、触发警报或自动调整系统设置。这个...
4. **Notification**: JMX支持Notification机制,MBeans可以发布通知,其他组件可以通过订阅来接收这些通知,实现事件驱动的管理。 5. **JMX Connectors**: 这是JMX与外部世界的桥梁,提供了多种标准的协议和API,...
4. **Notification**:MBean可以发送通知事件,告知管理器其状态的改变或其他重要事件。 5. **Connector**:连接器提供客户端与MBeanServer之间的通信,允许客户端访问和管理MBean。 在"jxmdemo"这个压缩包中,很...
- **Notification**: JMX允许MBean发送通知,这使得其他MBeans或管理工具可以订阅并接收有关系统状态变化的信息。 - **JMX连接器**: 连接器是JMX与外部世界交互的桥梁,它们允许管理应用程序通过JMX API连接到MBean...
3. **Notification**: JMX 支持Notification机制,MBeans 可以发送通知给感兴趣的监听者,这对于事件驱动的管理系统特别有用。 4. **Management Agents**: JMX 还包括Management Agents,它们负责暴露MBean Server...
这里提到的三个ZIP文件包含了不同版本的JMX实现和规范,分别是: 1. **jmx-1_2_1-ri.zip**:这个文件提供了JMX 1.2.1版本的运行时实现(Runtime Implementation,RI)。RI是JMX规范的具体实现,允许开发者在Java...
这个类继承自 `Notification`,用于表示客户端连接的开启、关闭、失败或通知丢失等事件。这些事件由连接器服务器(`JMXConnectorServer` 实例)和连接器客户端(`JMXConnector` 实例)发出。例如,类型为 `jmx....
3. **定义NotificationHandler**:用于接收来自Timer的通知。 4. **实例化监听器并注册到MBeanServer**。 5. **启动计时器**: ```java lServer.invoke(new ObjectName(":service=timer"), "start", new Object[]{...
MBeans有三种类型:Standard MBeans、Dynamic MBeans和Open MBeans。 2. **MBean Server**:MBean服务器是JMX架构的心脏,它负责实例化、注册、查询和操作MBeans。所有MBean都在MBean服务器中注册并管理。 3. **...
5. **通知机制**:JMX还支持通知(Notification)机制,允许MBean发送事件到感兴趣的监听器,实现异步通信。 在实际应用中,JMX常用于监控服务器性能、管理应用程序配置、追踪日志、甚至控制系统的启动和停止等。...
**三、简单JMX示例** 让我们通过一个简单的例子来了解JMX的工作流程: 1. 首先,定义一个MBean接口,比如`HelloWorldMBean`,包含一个返回字符串的属性`greeting`和一个输出问候的`sayHello`操作。 ```java ...
Java Management Extensions(JMX)是Java平台上的一个标准,它提供了管理和监控应用程序、操作系统和网络设备的能力。在本文中,我们将深入探讨JMX的核心概念、关键组件以及如何使用所提供的JAR和文档来学习和实践...
3. **JMX Notification Broadcaster**:帮助应用程序发布JMX通知,使得其他JMX客户端可以订阅并接收这些通知。 4. **MBeanServerBuilder**:帮助创建和配置MBeanServer,这是JMX的核心组件,负责注册、查找和管理...
3. **Notification**: JMX支持发布/订阅模型的通知机制,使得MBeans可以向感兴趣的客户端发送事件。 4. **Standard MBeans and Dynamic MBeans**: 标准MBeans是预先定义好的接口,而动态MBeans可以根据其属性和操作...
**JMX(Java Management Extensions)**是Java平台提供的一种用于管理与监控应用程序、服务器和设备的标准框架。通过JMX,开发者可以轻松地为Java应用程序添加管理功能,使得系统管理员能够远程监控和控制程序的运行...
3. **Notification**:通知机制,允许MBean在特定事件发生时向MBean Server或其他MBeans发送消息。 4. **Connector**:连接器,提供远程管理能力,使MBean Server可以通过网络被外部应用程序访问。 5. **Agent**:...
在JMX中,有三个主要元素:管理Bean(MBean)、MBean服务器和代理(Agent)。MBean是JMX的核心,它代表了可管理的资源或对象,可以是系统的一个特定方面,如内存使用情况或线程池状态。MBean服务器是运行MBean的地方...