- 浏览: 188681 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
grzrt:
zkf55915 写道哥们怎么用啊
好久不用了,就是看帮助资 ...
淘宝MetaQ开源消息队列安装 -
zkf55915:
哥们怎么用啊
淘宝MetaQ开源消息队列安装 -
grzrt:
jinnianshilongnian 写道整这个了?
没有 看 ...
linux内核中链表的实现 -
jinnianshilongnian:
整这个了?
linux内核中链表的实现
原文地址:
JDMK 基本JMX配置( html adaptor)
作者:
macg
- JDMK概述
JDMK(Java Dynamic Management Kit)是由JAVA的一个应用程序接口(JAVA
API)和一套开发工具组成的。
JDMK是JMX的第一个商业化产品,它是JMX(Java Management
extensions)的一个实现,它提供了通过Java应用程序来管理Java对象的一个框架。
- HtmlAdaptorServer介绍
HtmlAdaptorServer在jmxtools.jar包中
它其实也是一个MBean,所以也需要注册入MBeanServer
开启HtmlAdaptorServer后,在IE输入:
http://localhost:8092
可以看到注册的MBean,可以进行管理
http://localhost:8092开启的管理页面比较平淡,功能较少,而且是全西文的页面,说实话不太友好.
jmxtools.jar包还有后续的一些类,如:HttpBody,HtmlPage,HttpRequest,HttpResponse等类,可以进行后续的页面开发 ,不过没有太大的开发潜力(它毕竟不是前端框架).
2 将适配器HtmlAdaptorServer作为MBean注册入MBeanServer
3 将被管理对象(不是类是对象)作为MBean注册入MBeanServer
4 启动HtmlAdaptorServer
2。定义一个struts action (或servlet之类的)
3. web.xml装载spring 配置
4.将项目部署到Tomcat后,重启Tomcat
执行步骤2.的action(或servlet)
很多人修改了port口8082,往往不起作用,如下:
原因:
ObjectName("HelloAgent:name=adapter,port=8082")不是用于设port口的,只是ObjectName的参数
设port口的语句是setPort(8091),如果没执行此语句,则port口缺省是8082 ,你在ObjectName()中设什么,都不会影响缺省的8082口
下面是JDMK HtmlAdaptorServer的源代码: 可以看到构造方法里直接设的就是8082
解决:
可以看到注册的MBean,可以进行管理
http://localhost:8092开启的管理页面比较平淡,功能较少,而且是全西文的页面,说实话不太友好.
jmxtools.jar包还有后续的一些类,如:HttpBody,HtmlPage,HttpRequest,HttpResponse等类,可以进行后续的页面开发 ,不过没有太大的开发潜力(它毕竟不是前端框架).
- JDMK HtmlAdaptor 配置步骤:
2 将适配器HtmlAdaptorServer作为MBean注册入MBeanServer
3 将被管理对象(不是类是对象)作为MBean注册入MBeanServer
4 启动HtmlAdaptorServer
- 简单的application下的JDMK HtmlAdaptorServer例子
import com.sun.jdmk.comm.HtmlAdaptorServer; import javax.management.Attribute; import javax.management.MBeanServer; import javax.management.MBeanServerFactory; import javax.management.ObjectName; public class JmxHttpAdaptors { // 为HttpAdaptor MBean private int port = 8092; private String host = "localhost"; public void start() throws JMException, MalformedURLException { // creates new server MBeanServer server = MBeanServerFactory.createMBeanServer("test"); // 将HttpAdaptor 对象注册入MBean ObjectName serverName = new ObjectName("Http:name=HttpAdaptor"); HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); server.registerMBean(adaptor, serverName); // 设HttpAdaptor MBean(即serverName)的attributes if (port > 0) { server.setAttribute(serverName, new Attribute("Port", new Integer(port))); } else { System.out.println("Incorrect port value " + port); } // 下面是一些测试的MBean // 测试类TestClass代码这里不再给出(无非就是一些简单的POJO 加减乘除之类的方法,自己编就是) TestClass test1 = new TestClass("t1", new URL("http://mx4j.sourceforge.net")); TestClass test2 = new TestClass("t1", new URL("http://www.sourceforge.net/projects/mx4j")); server.registerMBean(test1, new ObjectName("Test:name=test1")); server.registerMBean(test2, new ObjectName("Test:name=test2")); // 执行HttpAdaptor MBean(即serverName)的start()方法 server.invoke(serverName, "start", null, null); } public static void main(String[] str) throws Exception { JmxHttpAdaptors thisAdaptor = new JmxHttpAdaptors(); thisAdaptor.start(); } |
执行程序,查看运行效果 D:Documents and Settingsmac>netstat -an Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING TCP 0.0.0.0:6059 0.0.0.0:0 LISTENING TCP 0.0.0.0:6648 0.0.0.0:0 LISTENING TCP 0.0.0.0:8092 0.0.0.0:0 LISTENING |
在IE输入: http://localhost:8092 可以看到注册的MBean,可以进行管理 |
- spring 下的 JDMK HtmlAdaptorServer
<!--
1.定义自己的bean --> <bean id="hello" class="com.machome.bean.Hello" /> <!-- JMX configuration --> <!-- 2.创建一个mbeanServer bean--> <!-- 如果你的spring是应用在容器中,则不需要此步骤,此步骤用于单独建立独立的MBeanServer中 <bean id="mbeanServer" class="org.springframework.jmx.support.MBeanServerFactoryBean"> </bean> --> <!-- 3.定义assembler bean ,装配bean MetadataMBeanInfoAssembler是AutodetectCapableMBeanInfoAssembler 唯一实现 spring文档中有专门介绍AutodetectCapableMBeanInfoAssembler的章节 --> <bean id="assembler" class="org.springframework.jmx.export.assembler.MetadataMBeanInfoAssembler"> <!-- 注入下面定义的jmxAttributeSource--> <property name="attributeSource" ref="jmxAttributeSource"/> </bean> <!-- 4.定义 解释mbean中Annotation的bean--> <bean id="jmxAttributeSource" class="org.springframework.jmx.export.annotation.AnnotationJmxAttributeSource"/> <!-- 5. 定义JDMK的HtmlAdaptorServer bean --> <bean id="httpJDMKAdaptor" class="com.sun.jdmk.comm.HtmlAdaptorServer " > <property name="port"> <value>8098</value> </property> </bean> <!-- 6.定义MBeanExporter bean, 这是spring jmx最核心的类 --> <bean id="mBeanExporter" class="org.springframework.jmx.export.MBeanExporter" lazy-init="false" > <!-- 注入上面定义的assembler 两个bean注入--> <property name="assembler" ref="assembler"/> <!-- 如果上面步骤2.你单独定义一个mbeanServer,这里需要指定,否则export bean缺省是去寻找runtime环境内的MBeanserver(通常是容器的MBeanServer) <property name="server" ref="mbeanServer"/> --> <!-- 将1.里面定义的mbean注册到mBeanExporter bean中 --> <property name="beans"> <map> <entry key="mbean:name=hello" value-ref="hello"/> <!-- 将JDMK 定义的HtmlAdaptorServer的bean加入mbean map中 --> <entry key="MyAgent:name=jdmkadapter,port=8098" value-ref="httpJDMKAdaptor"/> </map> </property> </bean> |
public class SpringJMXAction extends ActionSupport { @Autowired private HtmlAdaptorServer httpJDMKAdaptor; @Override public String execute() throws Exception { return SUCCESS; } public String JDMKstart() throws Exception { message = "启动JDMK adaptor"; httpJDMKAdaptor.start(); return SUCCESS; } public String JDMKstop() throws Exception { message = "停止JDMK adaptor"; httpJDMKAdaptor.stop(); return SUCCESS; } } |
<!-- #####################
初始化spring容器
###########--> <context-param> <param-name>contextConfigLocation</param-name> <param-value> classpath:ssh-mysql.xml </param-value> </context-param> <listener> <listener-class>org.springframework.web.context.ContextLoaderListener</listener-class> </listener> |
执行步骤2.的action(或servlet)
执行程序,查看运行效果 D:Documents and Settingsmac>netstat -an Active Connections Proto Local Address Foreign Address State TCP 0.0.0.0:135 0.0.0.0:0 LISTENING TCP 0.0.0.0:445 0.0.0.0:0 LISTENING TCP 0.0.0.0:1025 0.0.0.0:0 LISTENING TCP 0.0.0.0:3306 0.0.0.0:0 LISTENING TCP 0.0.0.0:6059 0.0.0.0:0 LISTENING TCP 0.0.0.0:6648 0.0.0.0:0 LISTENING TCP 0.0.0.0:8098 0.0.0.0:0 LISTENING |
在IE输入: http://localhost:8098 可以看到注册的MBean,可以进行管理 |
- 网上有很多例子,其实比较容易造成误解
HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); ObjectName adapterName = new ObjectName("HelloAgent:name=adapter,port=8082"); server.registerMBean(adapter, adapterName); adapter.start(); |
HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); ObjectName adapterName = new ObjectName("HelloAgent:name=adapter,port=8091"); server.registerMBean(adapter, adapterName); adapter.start(); |
访问http://localhost:8091, 访问失败 |
ObjectName("HelloAgent:name=adapter,port=8082")不是用于设port口的,只是ObjectName的参数
设port口的语句是setPort(8091),如果没执行此语句,则port口缺省是8082 ,你在ObjectName()中设什么,都不会影响缺省的8082口
下面是JDMK HtmlAdaptorServer的源代码: 可以看到构造方法里直接设的就是8082
public class
HtmlAdaptorServer extends CommunicatorServer
implements MBeanRegistration, DynamicMBean { public HtmlAdaptorServer() { this(8082); } |
HtmlAdaptorServer adaptor = new HtmlAdaptorServer(); ObjectName adapterName = new ObjectName("HelloAgent:name=adapter,port=8091"); server.registerMBean(adapter, adapterName); adapter.setPort(8091); adapter.start(); |
- 给htmlAdaptor 加入认证
import
com.sun.jdmk.comm.AuthInfo;
import com.sun.jdmk.comm.HtmlAdaptorServer; server = MBeanServerFactory.createMBeanServer(); html = new HtmlAdaptorServer(); ObjectName html_name = new ObjectName("Adaptor:name=html,port="+PORT); server.registerMBean(html, html_name); html.setPort(PORT); AuthInfo login = new AuthInfo(); login.setLogin("admin"); login.setPassword("11111"); html.addUserAuthenticationInfo(login); |
这样在访问http://localhost:8092的时候,会弹出JDMK login窗口 |
发表评论
-
项目代码质量控制
2014-10-20 17:15 835在以后的开发项目时可以适当使用工具进行程序检查: 1、F ... -
WorkbookFactory 找不到
2013-11-08 10:46 1013在最近的POI版本中,poi-3.9.jar包中找不到Work ... -
记一次JVM GC日志分析
2013-03-08 21:36 1751这几天在准备升级JDK版本到1.6,对目前线上JVM(版 ... -
Eclipse 相同变量的高亮 及颜色
2013-02-18 17:26 1663在Eclipse/MyEclipse中如果不小心把变量的高 ... -
java jstack dump 线程 介绍 解释
2013-02-05 15:52 1215hi,all: 最近抽时间把JVM运行 ... -
JAVA中的继承分析
2012-12-27 11:43 5178为什么写这篇博客,之前对继承的理解知识大体理论上,最近 ... -
JVM学习之:虚拟机中的运行时栈帧总结(二)
2012-12-12 19:46 843在 JVM学习之:虚拟机 ... -
JVM学习之:虚拟机中的运行时栈帧总结(一)
2012-12-12 19:45 872每 个人都知道,各种各样的动画视频,都是由一帧一帧图片连 ... -
JAVA字符串占位符
2012-12-06 08:24 3227包 java.text.MessageFormat java ... -
copy项目是容易出现的错误--webAppRootKey错误
2012-12-05 21:18 731Tomcat 发布多个项目时抛的webAppRootKey错误 ... -
web.xml配置总结
2012-12-05 20:50 692一、关于webAppRootKey的定义 默 ... -
spring组件扫描<context:component-scan/>使用详解
2012-12-05 19:14 735关于spring自动检测组件的使用方式网上太多了,而且也不 ... -
spring组件扫描<context:component-scan/>使用详解 (
2012-11-28 08:57 719关于spring自动检测组件的使用方式网上太多了,而且也不 ... -
static class 静态类(Java)
2012-11-23 20:20 885一般情况下是不可以用static 修饰类的。 ... -
java jvm 调优实战
2012-11-13 10:01 8161.eclipse 打印gc日志 eclipse根目录 ... -
Zookeeper的一致性协议:Zab
2012-11-04 16:14 1241Zookeeper使用了一种称为 ... -
浅谈java内存模型
2012-10-30 19:29 854不同的平台,内存模 ... -
JVM分代垃圾回收策略的基础概念
2012-08-15 12:43 702由于不同对象的生命周期不一样,因此在JVM的垃圾回收策略中有分 ... -
bloom filter 的Java 版
2012-07-26 21:50 887属于转贴:http://www.cnblo ... -
JAVA 条件表达式 陷阱
2012-07-25 18:34 1283代码: Map<String, Integer& ...
相关推荐
JDMK(Java Desktop Management Kit)是Oracle公司推出的一款用于管理和监控Java应用程序的工具套件,它基于Java管理扩展(JMX,Java Management Extensions)。JMX是一种标准,用于创建可管理和监控的应用程序、...
maven编译时报找不到这两个jar文件,发现已经无法从网站...Could not resolve dependencies for project ****:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.sun.jdmk:jmxtools:jar:1.2.1, ...
JMX 1.2.1 Reference Implementation(重点) Include com.sun.jdmk.comm.HtmlAdaptorServer class http://www.sun.com/software/jdmk/ Downloads, sun-jdmk-runtime-5.1-b34.2.zip/SUNWjdmk/5.1/lib/jdmkrt.jar
为什么JMX那么受欢迎,JMX到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础
是Java Dynamic Management Kit(JDMK)中的一个组件,它实现了HTML适配器,这个适配器的作用是将JMX MBeans(Managed Beans)的信息转换成HTML格式,从而可以通过Web浏览器进行远程访问和管理。这在分布式系统或者...
5. **配置安全性和权限**:根据应用需求,可能需要配置安全策略和权限控制,以限制谁可以访问和操作MBeans。 6. **访问管理界面**:通过浏览器访问HtmlAdaptorServer提供的URL,查看和操作MBeans。 JMX还支持其他的...
jmx_remote-1_0_1_03-ri.zip jmx-1_2_1-ri.zip 这两个包也是现在网上流行的例子所要求的两个包,即 1、jmx-1_2_1-bin 2、jmxremote-1_0_1-bin 例子网址:http://www.moon-soft.com/doc/39932.htm 其中jmx-1_2_1-ri....
在这个压缩包中,`jdmk` 可能是指Java Dynamic Management Kit,这是一个用于Java应用程序的管理和监控工具,它利用了JMX技术。`jmx` 文件可能包含的是与JMX相关的配置或文档。 在实际应用中,`jmxtools-1.2.1.jar`...
这个包可能包含了JMX远程协议实现所需的类库和配置文件,使得你可以设置JMX代理为接受远程连接,并允许跨网络管理Java应用程序。 3. **jmx-1_2_1-ri.zip**: 这个文件则对应JMX API的1.2.1版本的参考实现。JMX API...
在实际应用中,JMX常用于监控和管理Java应用程序的性能、配置或状态,例如,通过JConsole工具查看和调整应用程序的内存使用、线程状态,或者通过编程方式动态调整服务器配置。同时,JMX也是中间件和服务器产品(如...
maven编译时报找不到这两个jar文件,发现已经无法从网站...Could not resolve dependencies for project ****:jar:0.0.1-SNAPSHOT: The following artifacts could not be resolved: com.sun.jdmk:jmxtools:jar:1.2.1, ...
JDMK的核心功能包括动态管理代理(JMX)、系统级监控以及网络管理等方面,为开发者提供了强大的工具来确保Java应用的稳定性和效率。 ### MIB库生成 MIB(Management Information Base)库是在网络管理领域中用于...
标题“jdmk51_02-allplatforms”似乎是指一个特定的软件或工具的版本,可能是Java Development Kit (JDK) 的一个发行版,其中“jdmk”可能是早期Oracle JDK的一个缩写,而“51_02”可能代表版本号。"allplatforms...
Java Dynamic Management Kit (Java DMK) is a Java technology based toolkit that allows developers to rapidly create smart agents based on the Java Management Extensions (JMX) specification. The power ...
HtmlAdaptorServer com.sun.jdmk.comm.HtmlAdaptorServer JMXjar包 (提供的就是这个jar包,直接引用就可以了) 很多jmx教程的例子里面都会用到com.sun.jdmk.comm.HtmlAdaptorServer这个类,不知道怎么去找到,其实...
在`jdmk`和`jmx`这两个文件名称列表中,`jdmk`可能是指Java Dynamic Management Kit,它是JMX的一部分,提供了一些实用工具和示例,帮助开发者了解如何使用JMX。而`jmx`可能包含与JMX相关的类库或文档。如果这些文件...
HtmlAdaptorServer com.sun.jdmk.comm.HtmlAdaptorServer JMXjar包 (提供的就是这个jar包,直接引用就可以了) 很多jmx教程的例子里面都会用到com.sun.jdmk.comm.HtmlAdaptorServer这个类,不知道怎么去找到,...
缺少jar包 Description Resource Path Location Type Missing artifact com.sun.jdmk:jmxtools:jar:1.2.1 pom.xml Maven Dependency Problem jmxtools-1.2.1.jar
`jdmkrt.jar` 是Java Dynamic Management Kit (JDMK) 的运行时库,JDMK是Sun Microsystems(现在是Oracle公司的一部分)开发的一个JMX实现,它提供了丰富的管理和监控工具,包括 `HtmlAdaptorServer`。 在JMX中,...