`
grzrt
  • 浏览: 187732 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

[转载]JDMK 基本JMX配置( html adaptor)

    博客分类:
  • JAVA
 
阅读更多
原文地址: 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等类,可以进行后续的页面开发 ,不过没有太大的开发潜力(它毕竟不是前端框架).

  • JDMK HtmlAdaptor 配置步骤:
1 建立MBeanServer
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.spring 配置文件:
   <!-- 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>
2。定义一个struts action (或servlet之类的)
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;
    }

}
3. web.xml装载spring 配置
    <!-- ##################### 初始化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>
4.将项目部署到Tomcat后,重启Tomcat
执行步骤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();
很多人修改了port口8082,往往不起作用,如下:
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窗口
分享到:
评论

相关推荐

    JDMK开发jar包

    JDMK(Java Desktop Management Kit)是Oracle公司推出的一款用于管理和监控Java应用程序的工具套件,它基于Java管理扩展(JMX,Java Management Extensions)。JMX是一种标准,用于创建可管理和监控的应用程序、...

    jmxtools jmxri-1.2.1.jar

    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 mbean学习 jmxtools下载

    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到底有那些优势只得人们去学习和理解,本文从JMX的基本架构、hellowold jmx以及spring对JMX的支持讲起,希望大家能通过本文对JMX有个基础的认识,并能通过本文为今后学习JMX打个基础

    com.sun.jdmk.comm.HtmlAdaptorServer对应jar包

    是Java Dynamic Management Kit(JDMK)中的一个组件,它实现了HTML适配器,这个适配器的作用是将JMX MBeans(Managed Beans)的信息转换成HTML格式,从而可以通过Web浏览器进行远程访问和管理。这在分布式系统或者...

    com.sun.jdmk.comm.HtmlAdaptorServer对应的jar包

    5. **配置安全性和权限**:根据应用需求,可能需要配置安全策略和权限控制,以限制谁可以访问和操作MBeans。 6. **访问管理界面**:通过浏览器访问HtmlAdaptorServer提供的URL,查看和操作MBeans。 JMX还支持其他的...

    jmx-1_2_1-bin,jmxremote-1_0_1-bin,com.sun.jdmk.comm.HtmlAdaptorServer

    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....

    jmxtools-1.2.1.jar+jmxri-1.2.1.jar.zip

    在这个压缩包中,`jdmk` 可能是指Java Dynamic Management Kit,这是一个用于Java应用程序的管理和监控工具,它利用了JMX技术。`jmx` 文件可能包含的是与JMX相关的配置或文档。 在实际应用中,`jmxtools-1.2.1.jar`...

    jmx工具包tools

    这个包可能包含了JMX远程协议实现所需的类库和配置文件,使得你可以设置JMX代理为接受远程连接,并允许跨网络管理Java应用程序。 3. **jmx-1_2_1-ri.zip**: 这个文件则对应JMX API的1.2.1版本的参考实现。JMX API...

    JMXTools.jar和jmxri.jar下载

    在实际应用中,JMX常用于监控和管理Java应用程序的性能、配置或状态,例如,通过JConsole工具查看和调整应用程序的内存使用、线程状态,或者通过编程方式动态调整服务器配置。同时,JMX也是中间件和服务器产品(如...

    jmxri-1.2.1 和 jmxtools-1.2.1.rar

    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相关文档资料

    JDMK的核心功能包括动态管理代理(JMX)、系统级监控以及网络管理等方面,为开发者提供了强大的工具来确保Java应用的稳定性和效率。 ### MIB库生成 MIB(Management Information Base)库是在网络管理领域中用于...

    jdmk51_02-allplatforms

    标题“jdmk51_02-allplatforms”似乎是指一个特定的软件或工具的版本,可能是Java Development Kit (JDK) 的一个发行版,其中“jdmk”可能是早期Oracle JDK的一个缩写,而“51_02”可能代表版本号。"allplatforms...

    jdmk51_02-allplatforms.zip

    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所需要的JAR包(com.sun.jdmk.comm.HtmlAdaptorServer)

    HtmlAdaptorServer com.sun.jdmk.comm.HtmlAdaptorServer JMXjar包 (提供的就是这个jar包,直接引用就可以了) 很多jmx教程的例子里面都会用到com.sun.jdmk.comm.HtmlAdaptorServer这个类,不知道怎么去找到,其实...

    免费下载 jmxtools-1.2.1.jar + jmxri-1.2.1.jar.zip

    在`jdmk`和`jmx`这两个文件名称列表中,`jdmk`可能是指Java Dynamic Management Kit,它是JMX的一部分,提供了一些实用工具和示例,帮助开发者了解如何使用JMX。而`jmx`可能包含与JMX相关的类库或文档。如果这些文件...

    HtmlAdaptorServer所需要的JAR包,com.sun.jdmk.comm.HtmlAdaptorServer

    HtmlAdaptorServer com.sun.jdmk.comm.HtmlAdaptorServer JMXjar包 (提供的就是这个jar包,直接引用就可以了) 很多jmx教程的例子里面都会用到com.sun.jdmk.comm.HtmlAdaptorServer这个类,不知道怎么去找到,...

    com.sun.jdmk.jmxtools.1.2.1 jmxtools-1.2.1.jar 亲测可用

    缺少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

    研究JMX必不可少的jar

    `jdmkrt.jar` 是Java Dynamic Management Kit (JDMK) 的运行时库,JDMK是Sun Microsystems(现在是Oracle公司的一部分)开发的一个JMX实现,它提供了丰富的管理和监控工具,包括 `HtmlAdaptorServer`。 在JMX中,...

Global site tag (gtag.js) - Google Analytics