前面用Html、jconsole等方法连接上了MBeanServer,并能够通过这些界面来操纵MBean。但有时我们需要不借助这些客户端,而是在自己的程序来操纵这些MBean,这就要求我们知道如何在代码里连接MBean。
1.HelloMBean
package jmx.mbean;
/* HelloMBean.java - MBean interface describing the management
operations and attributes for the Hello World MBean. In this case
there are two operations, "sayHello" and "add", and two attributes,
"Name" and "CacheSize". */
/**
* HelloMBean定义方法及属性由Hello实现
*/
public interface HelloMBean {
public String getName();
public void setName(String name);
public void printHello();
public void printHello(String whoName);
}
2.Hello
package jmx.mbean;
public class Hello implements HelloMBean{
private String name;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public void printHello() {
System.out.println("Hello World, " + name);
}
public void printHello(String whoName) {
System.out.println("Hello , " + whoName);
}
}
3.HelloAgent
package jmx.mbean;
import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;
import javax.management.remote.JMXConnectorServer;
import javax.management.remote.JMXConnectorServerFactory;
import javax.management.remote.JMXServiceURL;
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("jmx:name=HelloWorld");
Hello hello = new Hello();
server.registerMBean(hello, helloName);
ObjectName adapterName = new ObjectName("HelloAgent:name=htmladapter,port=8082");
HtmlAdaptorServer adapter = new HtmlAdaptorServer();
server.registerMBean(adapter, adapterName);
adapter.start();
System.out.println("start.....");
//创建rmi连接并开启
JMXServiceURL url = new JMXServiceURL("service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnectorServer cs = JMXConnectorServerFactory.newJMXConnectorServer(url, null, server);
cs.start();
System.out.println("rmi start.....");
}
}
4.Client
package jmx.mbean;
import java.util.Iterator;
import java.util.Set;
import javax.management.Attribute;
import javax.management.MBeanInfo;
import javax.management.MBeanServerConnection;
import javax.management.MBeanServerInvocationHandler;
import javax.management.ObjectInstance;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;
public class Client {
public static void main(String[] args) throws Exception {
JMXServiceURL url = new JMXServiceURL(
"service:jmx:rmi:///jndi/rmi://localhost:9999/server");
JMXConnector jmxc = JMXConnectorFactory.connect(url, null);
MBeanServerConnection mbsc = jmxc.getMBeanServerConnection();
ObjectName mbeanName = new ObjectName("jmx:name=HelloWorld");
// 把所有Domain都打印出来
System.out.println("Domains:---------------");
String domains[] = mbsc.getDomains();
for (int i = 0; i < domains.length; i++) {
System.out.println("\tDomain[" + i + "] = " + domains[i]);
} // MBean的总数
System.out.println("MBean count = " + mbsc.getMBeanCount());
// 对name属性的操作(属性名的第一个字母要大写)
mbsc.setAttribute(mbeanName, new Attribute("Name", "yuwen"));// 设值
System.out.println("Name = " + mbsc.getAttribute(mbeanName, "Name"));// 取值
// 得到proxy代理后直接调用的方式
HelloMBean proxy = (HelloMBean) MBeanServerInvocationHandler
.newProxyInstance(mbsc, mbeanName, HelloMBean.class, false);
proxy.printHello();
proxy.printHello("yuwen");
// 远程调用的方式
mbsc.invoke(mbeanName, "printHello", null, null);
mbsc.invoke(mbeanName, "printHello", new Object[] { "你好" },
new String[] { String.class.getName() });
// 得mbean的信息
MBeanInfo info = mbsc.getMBeanInfo(mbeanName);
System.out.println("Hello Class: " + info.getClassName());
System.out.println("Hello Attriber:"
+ info.getAttributes()[0].getName());
System.out.println("Hello Operation:"
+ info.getOperations()[0].getName());
// 得到所有的MBean的ObjectName
System.out.println("all ObjectName:---------------");
Set set = mbsc.queryMBeans(null, null);
for (Iterator it = set.iterator(); it.hasNext();) {
ObjectInstance oi = (ObjectInstance) it.next();
System.out.println("\t" + oi.getObjectName());
} // 注销
// mbsc.unregisterMBean(mbeanName);
// 关闭MBeanServer连接
jmxc.close();
}
}
5.运行
(1)在Dos运行一个命令:rmiregistry 9999
(2)运行HelloAgent
(3)运行Client
运行结果有两个
HelloAgent控制台
Hello World, yuwen
Hello , yuwen
Hello World, yuwen
Hello , 你好
------------------------------------
Client控制台
Domains:---------------
Domain[0] = JMImplementation
Domain[1] = jmx
Domain[2] = HelloAgent
MBean count = 3
Name = yuwen
Hello Class: jmx.mbean.Hello
Hello Attriber:Name
Hello Operation:printHello
all ObjectName:---------------
JMImplementation:type=MBeanServerDelegate
HelloAgent:name=htmladapter,port=8082
jmx:name=HelloWorld
本人开了个充值淘宝网店。有需要的朋友请访问的店铺并拍下所充值的话费,
本店已加入消费保障服务计划,货源来源于淘宝充值平台,安全可靠便捷,
支付过后立即到账
http://xiaowen168.taobao.com
分享到:
相关推荐
5. **使用JConsole或VisualVM**:这两个内置的JMX客户端工具的使用方法,包括连接到远程MBean Server、查看和修改MBean属性、接收和处理通知。 6. **编写自定义管理工具**:介绍如何使用JMX API创建自己的管理工具...
通过上述示例可以看出,JMX通过定义MBean接口和其实现类的方式,使得我们能够通过标准的方法来管理和监控应用程序。这种方式不仅提高了应用程序的可管理性,同时也降低了管理操作的复杂度。 #### 六、总结 JMX作为...
2. **自定义JMX客户端**:开发者可以编写自己的JMX客户端,利用JMX的RMI支持建立连接。客户端需要实现JMX的连接逻辑,包括认证、查找MBeans并执行操作。 3. **安全性**:RMI连接通常需要安全控制,例如SSL加密和...
4. **JMX连接器**:JMX连接器允许远程客户端连接到MBean Server,进行管理和监控操作。常见的有RMI、HTTP/HTTPS、JMXMP等。 5. **JMX的应用**:JMX可用于监控内存使用、线程状态、系统属性、甚至是自定义的业务指标...
它扩展了基本的JMX功能,使得管理者可以通过网络来连接到MBean服务器,执行操作、获取属性值或接收通知。这个版本可能包含了RMI(Remote Method Invocation)的实现,这是Java中常用的远程调用协议,用于实现JMX的...
通过JMX连接器,外部客户端可以连接到MBean Server,获取MBean的信息或执行操作。 4. MBean Server: MBean Server是JMX的核心,它负责存储和管理MBeans。开发者可以自定义MBean Server,但通常使用Java提供的内置...
Java Management Extensions(JMX)是一种Java平台上的框架,用于管理和监控应用程序、系统和服务。它提供了一种标准的方式来创建可管理的组件,称为MBeans(Managed Beans),这些组件可以暴露其状态和行为,允许...
Java Management Extensions(JMX)是Java平台上的一个标准...通过理解MBean、MBean Server和连接器的工作原理,以及如何编写和使用JMX代码,我们可以更好地控制和优化我们的应用程序,提升系统的可维护性和稳定性。
【JMX IN ACTION(七)】章节探讨了JMX中的Model MBean,这是一种特殊类型的MBean,开发者无需编写MBean类。Model MBean是JMX规范定义的一部分,保证在所有符合JMX标准的代理中可用,它是一个通用的MBean,可以被实例...
`cmdline-jmxclient` 提供了一个命令行界面,使得用户无需编写代码就能与JMX服务器交互,执行查询、获取或修改MBean的属性、调用MBean的操作等。 在Zabbix中集成`cmdline-jmxclient`,可以实现对Java应用的指标收集...
这一章将介绍如何使用标准MBean来配置应用程序资源(如日志工具和应用属性),以及如何将应用程序分解为组件。如果你需要快速实现一个资源,标准MBean是最佳选择。标准MBean通过明确声明的管理接口暴露资源,该接口...
JMX RI(Remote Interface)允许远程管理程序连接到JMX代理,从而可以跨网络监控和管理Java应用。这通常涉及到RMI(Remote Method Invocation)和JMX的MBean Server的交互。 2. **jmxtools.jar**:这个库则包含了...
3. **JMX连接器**: JMX连接器允许外部工具或应用与MBean服务器通信。它们定义了多种协议,如RMI、HTTP、JMXMP等,用于连接到MBean服务器并执行操作。 4. **管理工具**: 利用JMX,可以创建各种管理工具,如GUI、...
在IT领域,JMX(Java Management Extensions)和OSGi(Open Service Gateway Initiative)是两种重要的技术,它们分别用于管理和模块化Java应用程序。本实例将两者结合,展示了如何将OSGi的bundle注册到JMX以便进行...
5. **JMX客户端**:JMX客户端可以是GUI工具、命令行工具或者自定义的应用程序,它们通过连接器与MBean Server交互,读取或修改MBean的状态,执行操作。 6. **使用JMX的场景**:JMX常用于服务器性能监控、应用健康...
在这个"一个jmx的小例子"中,我们很可能是通过编写Java代码来创建和操作MBeans,然后使用Eclipse这样的集成开发环境(IDE)来运行示例。Eclipse本身并不直接支持JMX,但可以通过安装插件如JConsole或VisualVM来辅助...
在实际应用中,可以通过编写Java代码来建立JMX客户端,连接到远程服务器的MBeanServer,然后通过MBean接口获取并处理监控数据。也可以使用工具,如JConsole、VisualVM等,它们提供了图形化的界面来直接查看和操作...
例如,开发者可以使用JConsole来实时查看和调整应用程序的配置,监控内存使用情况,跟踪线程状态,或者通过编写自定义的JMX客户端来执行特定的管理任务。 总结来说,`jmxtools-1.2.1.jar` 和 `jmxri-1.2.1.jar` ...
- 详细讲解了如何配置 JMX Agent 以连接到远程 MBean 服务器。 - 包括配置文件的编写以及连接参数的设置等。 - **远程管理示例**: - 通过具体的示例演示了如何通过 JMX Agent 远程管理 MBean 服务器。 - 包括...