Mbean之间的通信是必不可少的,Notification就起到了在Mbean之间沟通桥梁的作用。JMX notification 由四部分组成:
- Notification 这个相当于一个信息包,封装了需要传递的信息
- Notification broadcaster 这相当于一个广播器,把消息广播出去
- Notification listerner 这是一个监听器,用于监听广播出来的Notification消息
- Notification filter 这是一个过滤器,过滤掉不需要的Notification消息
Notification broadcaster不需要我们实现,JMX的内部已经有了。Notification filter一般也很少用。下面的例子主要用到了Notification、Notification listerner。
在http://ldbjakyo.iteye.com/admin/blogs/778268
这篇文章中的例子HelloWorld中有一个printHello(String whoName)方法,意思根据碰到的是谁来打招呼,比如:
Jack从对面走过来,说:“hi”
我们回之以礼,说:“Hello, jack”
首先这需要Jack先说一个hi(相应一个操作方法),然后他说的话封装成声波(相当Notification消息包)传递出去。然后我们还要给Jakc装上一个监听器(Hello的耳朵),这个监听器将捕捉到Jack的声波语音包,并进行相应处理,即说“Hello, jack”。
1、Jack类及其相应的MBean
import javax.management.Notification;
import javax.management.NotificationBroadcasterSupport;
public class Jack extends NotificationBroadcasterSupport implements JackMBean {
private int seq = 0;
public void hi() {
Notification n = new Notification(//创建一个信息包
"jack.hi",//给这个Notification起个名称 Notification n n.getType()
this, //由谁发出的Notification Notification n n.getSource()
++seq,//一系列通知中的序列号,可以设任意数值 Notification n n.getSequenceNumber()
System.currentTimeMillis(),//发出时间 Notification n n.getTimeStamp()
"Jack");//发出的消息文本 Notification n n.getMessage()
//发出去
sendNotification(n);
}
}
- 必需继承NotificationBroadcasterSupport
- 此类只有一个hi方法,方法只有两句:创建一个Notification消息包,然后将包发出去
- 如果你还要在消息包上附加其他数据,Notification还有一个setUserData方法可供使用
2、接下来是他的MBean
public interface JackMBean {
public void hi();
}
3、创建一个Listener,监听到的Notification消息包将由此类负责处理。
import javax.management.Notification;
import javax.management.NotificationListener;
public class HelloListener implements NotificationListener {
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) {
HelloWorld hello = (HelloWorld) handback;
hello.printHello(n.getMessage());
}
}
}
}
4、修改HelloAgent如下(加上了关于jack的三句):
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import com.lidongbo.HelloWorld;
import com.sun.jdmk.comm.HtmlAdaptorServer;
public class HelloAgent {
public static void main(String args[]) throws Exception{
MBeanServer server = MBeanServerFactory.createMBeanServer();
ObjectName helloName = new ObjectName("author:name=HelloWorld");
HelloWorld hello=new HelloWorld();
server.registerMBean(hello, helloName);
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.setPort(8080);
Jack jack = new Jack();
server.registerMBean(jack, new ObjectName("HelloAgent:name=jack")); //注册jack的那个MBean实现
jack.addNotificationListener(new HelloListener(), null, hello); //jackMBean 添加说hello的监听 ,这样就实现了MBean调MBean了
adapter.start();
System.out.println("start.....");
}
}
这样当调用jack hi方法 的时候,就顺带调用了HelloWorld 的 void printHello(String name)方法
分享到:
相关推荐
在这个特定的上下文中,它可能与博主Tristan分享的一篇博客文章有关,该文章可能详细介绍了如何利用JMX进行通知服务(Notification Service)的实现或使用。 在Java中,JMX允许开发者创建、注册和管理被称为MBeans...
5. **Connector**:连接器提供客户端与MBeanServer之间的通信,允许客户端访问和管理MBean。 在"jxmdemo"这个压缩包中,很可能是包含了一个简单的JMX应用程序,可能包含以下关键部分: 1. **MBean类**:定义一个类...
- **Notification**: JMX允许MBean发送通知,这使得其他MBeans或管理工具可以订阅并接收有关系统状态变化的信息。 - **JMX连接器**: 连接器是JMX与外部世界交互的桥梁,它们允许管理应用程序通过JMX API连接到MBean...
RI是JMX规范的具体实现,允许开发者在Java应用程序中使用JMX功能,如创建MBeans(Managed Beans),管理对象和服务,以及实现远程监控。它包含API库、示例代码和必要的文档,帮助开发者理解和使用JMX 1.2.1的功能。 ...
此外,MBean可以使用Notification机制发送事件,让其他MBean或监听器得知状态变化。 在远程管理方面,JMX提供了Connector接口,使得外部管理系统可以通过特定的协议(如JMX Remote Protocol)连接到MBean服务器。这...
这些文档将帮助你理解MBean的生命周期管理、MBeanServer的交互方式,以及如何使用Notification机制进行事件处理。此外,它们可能还会涵盖如何使用JMX与外部管理系统(如SNMP或Web管理协议)集成。 为了有效地学习和...
学习JMX,需要理解其基本概念,熟悉MBean的创建和注册,掌握如何使用JMX Connectors进行远程监控,以及如何利用JMX进行应用性能调优。对于开发者而言,JMX是提高应用可维护性和可管理性的重要工具。通过深入学习和...
5. **通知机制**:JMX还支持通知(Notification)机制,允许MBean发送事件到感兴趣的监听器,实现异步通信。 在实际应用中,JMX常用于监控服务器性能、管理应用程序配置、追踪日志、甚至控制系统的启动和停止等。...
3. **Management Clients**: 这些是使用JMX API与MBean Server交互的应用程序。在本项目中,"ops-container"可能就是一个管理客户端,它连接到WebLogic、Tomcat和WebSphere的MBean Server,并执行监控任务。 4. **...
2. **MBean Server**: MBean Server是JMX的核心组件,它负责注册MBeans、执行对MBeans的操作并处理MBeans之间的交互。它是管理域的中心,管理所有的MBeans。 3. **MBean操作和属性**: MBeans提供了接口,包含了操作...
5. **JMX Connectors**:提供客户端和MBean服务器之间的通信机制。JMX Connectors有多种协议实现,如RMI、HTTP/HTTPS、JNDI等,使得远程管理成为可能。 在实际应用中,JMX常用于监控和管理Java应用程序的性能、配置...
4. **Notification**:MBean可以发布通知,向其他感兴趣的服务或组件广播特定事件的发生,如系统状态变化。 5. **Management Agents**:这些代理负责将JMX管理能力扩展到网络中其他非Java的系统。它们通常作为桥接...
本文详细介绍了如何使用JMX进行网络管理的实际操作过程,包括创建Mlet配置文件、创建MBeanServer、调用MBean的方法等。此外,还介绍了几种不同的JMX实现以及如何使用Timer MBean。这些知识对于理解JMX的工作原理及其...
3. **访问MBean**:客户端通过JMX Connector连接到MBean Server,然后使用`ObjectName`定位特定的MBean,调用其暴露的方法。 4. **管理MBean**:客户端可以读取MBean的属性,调用其操作,甚至可以订阅和接收MBean...
3. **管理界面**: 使用JMX,你可以创建一个简单的Web界面,如HtmlAdaptorServer,允许用户通过浏览器直接修改MBean的`name`属性,并触发`printHello()`方法。 总结,JMX 提供了一种标准化的方法来管理和监控Java...
- **Notification**:MBean发送的事件,用于向管理者报告状态变化或其他重要事件。 - **NotificationListener**:接收并处理MBean发出的通知的接口。 **Spring中使用JMX的步骤**: 1. **定义MBean**:创建实现特定...
- **Connector**:用于MBean Server与其他系统的通信接口。 ## 3. JMX体系架构 ### 3.1 JMX体系结构 JMX架构包含三个主要组件:MBean、MBean Server和管理客户端。 - **MBean**:提供管理功能的对象,通过MBean ...
2. **JMXMP-Agent**:JMX Message Passing Protocol(JMXMP)是一个简单的JMX远程连接协议,`jmxtools-1.2.jar`可能包含了实现这个协议的代码,用于建立客户端和服务器之间的JMX连接。 3. **JMX Notification ...