转自:http://rabbit9898.iteye.com/blog/1009198
JMX(Java Management Extensions,即Java管理扩展)是一个为应用程序、设备、系统等植入管理功能的框架。JMX可以跨越一系列异构操作系统平台、系统体系结构和网络传输协议,灵活的开发无缝集成的系统、网络和服务管理应用。
我们还是从JMX能给我们提供什么好处入手来理解吧。举一个应用实例:在一个系统中常常会有一些配置信息,比如服务的IP地址,端口号什么的,那么如何来写这些代码呢?
1、初级程序员一般是写死在程序里,到要改变时就去改程序,然后再编译发布;
2、程序熟手则一般把这些信息写在一个配置文件里(JAVA一般都是*.properties文件),
到要改变时只要改配置文件,但还是重新启动系统,以便读取配置文件里的新值;
3、程序好手则会写一个段代码,把配置值缓存起来,系统在读值的时候,先看看配置文件有
没有更动。如有更改则重读一遍,否则从缓存里读取值
4、程序高手则懂得取物为我所用,用JMX!把配置属性集中在一个类,然后写一个叫MBean
的东东,再配置一下就轻松搞定了。而且JMX自动提供了一个WEB页面来给你来改变这些
配置信息。
参考Java提供的例子(需要 jdk1.6):
http://download.oracle.com/javase/6/docs/technotes/guides/jmx/examples.html
1. 需要被管理类的接口 HelloMBean.java (规范一般是***MBean.java)
-
-
-
-
-
-
package com.example.mbeans;
-
-
public interface HelloMBean {
-
-
-
public void sayHello();
-
public int add(int x, int y);
-
-
-
-
-
public String getName();
-
-
-
public int getCacheSize();
-
public void setCacheSize(int size);
- }
/* 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". */
package com.example.mbeans;
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);
}
2. 需要管理的类 Hello.java (通常是实现**MBean.java)
-
-
-
-
package com.example.mbeans;
-
-
public class Hello implements HelloMBean {
-
public void sayHello() {
-
System.out.println("hello, world");
- }
-
-
public int add(int x, int y) {
-
return x + y;
- }
-
-
public String getName() {
-
return this.name;
- }
-
-
public int getCacheSize() {
-
return this.cacheSize;
- }
-
-
public synchronized void setCacheSize(int size) {
-
this.cacheSize = size;
-
-
System.out.println("Cache size now " + this.cacheSize);
- }
-
-
private final String name = "Reginald";
-
private int cacheSize = DEFAULT_CACHE_SIZE;
-
private static final int DEFAULT_CACHE_SIZE = 200;
- }
/* Hello.java - MBean implementation for the Hello World MBean.
因篇幅所限,把examples带的注释去掉了,自己可以下载看 */
package com.example.mbeans;
public class Hello implements HelloMBean {
public void sayHello() {
System.out.println("hello, world");
}
public int add(int x, int y) {
return x + y;
}
public String getName() {
return this.name;
}
public int getCacheSize() {
return this.cacheSize;
}
public synchronized void setCacheSize(int size) {
this.cacheSize = size;
System.out.println("Cache size now " + this.cacheSize);
}
private final String name = "Reginald";
private int cacheSize = DEFAULT_CACHE_SIZE;
private static final int DEFAULT_CACHE_SIZE = 200;
}
3. 代理/注册类 Main.java
- package com.example.mbeans;
-
-
import java.lang.management.*;
-
import javax.management.*;
-
-
public class Main {
-
-
-
public static void main(String[] args) throws Exception {
-
- MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
-
-
-
ObjectName name = new ObjectName("com.example.mbeans:type=Hello");
-
-
-
Hello mbean = new Hello();
-
-
- mbs.registerMBean(mbean, name);
-
-
-
System.out.println("Waiting forever...");
- Thread.sleep(Long.MAX_VALUE);
- }
- }
package com.example.mbeans;
import java.lang.management.*;
import javax.management.*;
public class Main {
/* For simplicity, we declare "throws Exception". Real programs
will usually want finer-grained exception handling. */
public static void main(String[] args) throws Exception {
// Get the Platform MBean Server
MBeanServer mbs = ManagementFactory.getPlatformMBeanServer();
// Construct the ObjectName for the MBean we will register
ObjectName name = new ObjectName("com.example.mbeans:type=Hello");
// Create the Hello World MBean
Hello mbean = new Hello();
// Register the Hello World MBean
mbs.registerMBean(mbean, name);
// Wait forever
System.out.println("Waiting forever...");
Thread.sleep(Long.MAX_VALUE);
}
}
4. 编译、测试运行上面的程序
javac com/example/mbeans/*.java
# 启动程序
java com.example.mbeans.Main
另起一个命令行或者cmd:
运行jconsole (# JConsole is located in $(J2SE_HOME)/bin/jconsole) 可以看到,选择本地的进程 com.example.mbeans 连接 就可以进行管理了。
管理界面:
修改cacheSize 大小,可以在启动Main的命令行窗口看到修改生效。
分享到:
相关推荐
本教程将引导你入门Spring框架下的JMX应用。 首先,JMX是一种Java标准,它允许开发者创建可管理的Java组件,并提供了一种统一的方式来管理和监控这些组件。在Spring中,我们可以利用JMX来创建MBeans(Managed Beans...
总结一下,这个JMX入门例子展示了如何创建一个简单的MBean,将其注册到MBean服务器,并通过`jconsole`进行交互。了解JMX对于任何需要管理和监控Java应用的开发者来说都是一项重要技能,它提供了强大的灵活性和可扩展...
在这个入门指南中,我们将深入探讨JMX的核心概念、API以及如何通过一个简单的示例来理解它的应用。 **一、JMX核心概念** 1. **MBean(Managed Beans)**:MBean是JMX中的核心组件,代表了可管理的资源。它可以是...
5. **发布Web服务**:使用XFire的API,将服务部署到一个Servlet容器,如Tomcat,或者直接通过JMX发布。发布的服务可以通过WSDL文件进行描述,供客户端调用。 6. **消费Web服务**:客户端可以使用XFire提供的客户端...
本入门例子将引导你了解如何使用Hession进行服务端和客户端的开发。首先,我们从服务端开始。 1. **服务端实现** - 创建服务接口:定义你需要对外提供的服务方法,例如`IService`接口,包含一个`sayHello`方法。 ...
这是一个Jmeter对Kafka压测的小例子,里面使用了pepper-box插件,实现了Kafka的生产者和消费者,对于入门者来说看这个就够了,如有疑问请移步博客:https://blog.csdn.net/shan286/article/details/105216381。
首先去...⒉ 有的时候由于端口被占用,导致ActiveMQ错误,ActiveMQ可能需要以下端口1099(JMX),61616(默认的TransportConnector) ⒊ 如果没有物理网卡,或者MS的LoopBackAdpater Multicast会报一个错误
除了 Hibernate 支持,Xdoclet 还可以生成 EJB、JMS、JMX 等多种 Java EE 相关的配置文件。只需在 Java 类中添加相应的注释,Xdoclet 就会自动生成相应的部署描述符。 ### 总结 Xdoclet 是一种强大的工具,它通过 ...
总的来说,`HelloWorldService`是一个入门级的JMX和MBean教程,它可以帮助开发者快速掌握JMX的核心概念,为进一步探索更复杂的Java应用程序管理打下基础。通过阅读和实践这个示例,你可以深入了解Java的管理功能,并...
1. **Hibernate入门** - **前言**:这部分介绍了Hibernate的基本概念和目标,以及它如何简化Java应用程序的数据库交互。 - **第一个Hibernate应用程序**:涵盖创建基本的Java类、映射文件、配置文件、构建过程、...
这是一个使我们入门的简单示例。 这个例子。 本自述文件的所有文档均来自此jmx文件。 如果我们仔细观察第一个Prometheus监听器,它看起来像下面的图片。 让我们逐一浏览所有列。 名称:指标的名称。 帮助:度量...
6. **与其他开源技术的集成**:Spring框架可以轻松集成其他流行的技术,如 Quartz 定时任务、Quartz Spring、JMS、JMX等,为开发者提供了一站式的解决方案。 在《Spring4 中文版》这份文档中,你将深入了解到如何...
- **描述**:“这是Hibernate的中文官方文档,是最新的版本Hibernate 3.6,适合作为Hibernate使用者的参考手册和入门帮助文档。”这句话进一步明确了文档的内容为Hibernate 3.6版本的官方指南,适合新用户作为学习...
- **JMX整合**:描述如何通过JMX监控和管理Hibernate运行时的行为。 - **对JCA的支持**:解释Hibernate如何集成企业级的资源适配器。 - **上下文相关的会话**:介绍如何在Web应用中管理会话的上下文。 #### 配置 -...
2. Hibernate入门 2.1. 前言 2.2. 第一部分 - 第一个Hibernate程序 2.2.1. 第一个class 2.2.2. 映射文件 2.2.3. Hibernate配置 2.2.4. 用Ant编译 2.2.5. 安装和帮助 2.2.6. 加载并存储对象 2.3. 第二部分 ...