`
非飞
  • 浏览: 80379 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

通过mx4j实现JMXConnectorServer和JMXConnector

阅读更多
    看了两天文档,总算对JMX有了一个整体的认识。发现使用mx4j实现JMX还是相当的轻松的。MBeans可以使用mx4j-tools中的 Xdoclet偷一下懒,让它自动的生成MBeans和Descriptions,ant有相应的支持,还是比较方便的,对于MBean接口的实现,自己写了。

    对于如何产生和注册MBeans,mx4j提供了一个相当方便的工具,为什么说相当方便,是因为它真的实在是太方便了。通过写一个xml配置文件可以完成所有的工作。比起M-LET确实是强了不少。下面就是一个在MBean Server产生注册一个NamingService、JMXConnectorServer和一个自写的MBean的配置文件。

<?xml version="1.0" encoding="UTF-8"?>

<configuration port="9999">
   
<startup>
      
<create classname="mx4j.tools.naming.NamingService" objectname="naming:type=rmiregistry">
         
<arg type="int">1099</arg>
      
</create>
      
<call operation="start" objectname="naming:type=rmiregistry" />

      

<object objectid="rmi">
         
<call classname="javax.management.remote.JMXConnectorServerFactory" method="newJMXConnectorServer">
            
<arg type="javax.management.remote.JMXServiceURL">
               
<new classname="javax.management.remote.JMXServiceURL">
                  
<arg type="string">service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx</arg>
               
</new>
            
</arg>
            
<arg type="java.util.Map" />
            
<arg type="javax.management.MBeanServer" />
         
</call>
      
</object>
      
<register objectname="connectors:type=rmi,protocol=jrmp">
         
<arg type="object" refobjectid="rmi" />
      
</register>
      
<call method="start" refobjectid="rmi" />
      
<create classname="nsmp.examples.mbeans.rmi.MyRemoteServiceObject" objectname="services:type=my-remote" />
   
</startup>

   

<shutdown>
      
<call operation="stop" objectname="services:type=my-remote" />
      
<call method="stop" refobjectid="rmi" />
      
<call operation="stop" objectname="naming:type=rmiregistry" />
      
<unregister objectname="services:type=my-remote"/>
      
<unregister objectname="connectors:type=rmi,protocol=jrmp" />
      
<unregister objectname="naming:type=rmiregistry" />
   
</shutdown>

</configuration> 


java代码:

package nsmp.agent;

import java.io.BufferedReader;
import java.io.FileReader;
import java.io.Reader;
import java.net.Socket;

import javax.management.MBeanServer;
import javax.management.MBeanServerFactory;
import javax.management.ObjectName;

import mx4j.tools.config.ConfigurationLoader;
import nsmp.util.NsmpGlobals;















/**//**
 * @version 1.0
 * @author tower
 *
 * TODO write the comment of this type
 




*/


public class NsmpServer {
    
public void startup() throws Exception {
        MBeanServer server 
= MBeanServerFactory.newMBeanServer();
        ConfigurationLoader loader 
= new ConfigurationLoader();

        server.registerMBean(loader, ObjectName.getInstance(

"config:service=loader"));
        Reader reader 
= new BufferedReader(new FileReader(NsmpGlobals.NSMP_HOME + "/conf/config.xml"));
        
        loader.startup(reader);
        reader.close();
        System.



out.println("Start the nsmp server successfully!");
    }

    
public void shutdown() throws Exception {
          String shutdownCommand 
= "shutdown";
          Socket socket 
= new Socket("127.0.0.1"9999);
          socket.getOutputStream().write(shutdownCommand.getBytes());
          socket.close();
    }



}



    startup方法调用配置文件的startup部分完成创建和注册,shutdown方法调用配置文件的shutdown部分释放相应的资源。通过调用 startup方法就可以起动MBeanServer提供服务了。对于shutdown开始搞了我半天startup后 ConfigurationLoader都没有创建一个侦听端口来接收shutdown命令,看了看mx4j的源码发现 ConfigurationLoader也没有发现什么特殊地方。捉摸半天终于发现了自己放了一个愚笨的错误,eclipse是用普通用户权限开的,没有办法创建侦听,改成root后一切ok。

    接下就随便写了一个JMXConnector,代码:

/**//*
 * Copyright (C) The MX4J Contributors.
 * All rights reserved.
 *
 * This software is distributed under the terms of the MX4J License version 1.0.
 * See the terms of the MX4J License in the documentation provided with this software.
 





*/


package nsmp.examples.mbeans.rmi;

import java.util.Map;

import javax.management.MBeanInfo;
import javax.management.MBeanOperationInfo;
import javax.management.MBeanServerConnection;
import javax.management.ObjectName;
import javax.management.remote.JMXConnector;
import javax.management.remote.JMXConnectorFactory;
import javax.management.remote.JMXServiceURL;

















/**//**
 * @version $Revision: 1.3 $
 

*/


public class Client

{
   
public static void main(String[] args) throws Exception
   
{
           JMXServiceURL address 
= new JMXServiceURL("service:jmx:rmi://localhost/jndi/rmi://localhost:1099/jmx");
           Map creationEnv 
= null;
           JMXConnector connector 
= JMXConnectorFactory.newJMXConnector(address, creationEnv);
           
           Map connectionEnv 

= null;
           connector.connect(connectionEnv);
           
           MBeanServerConnection serverConnection 


= connector.getMBeanServerConnection();
           ObjectName name 
= ObjectName.getInstance("services:type=my-remote");
           MBeanInfo mbInfo 
= serverConnection.getMBeanInfo(name);
           MBeanOperationInfo[] operationInfo 
= mbInfo.getOperations();
           
           

for (int i = 0; i < operationInfo.length; i++{
               System.
out.println(operationInfo[i].getName());
           }

           
           serverConnection.invoke(name, 

"sayHello"new Object[] {"Tower He"}new String[] {"java.lang.String"});
   }

}




JMXConnector是通过获取一个MBeanServerConnection来实现远程调用的,运行了一下一切顺利通过。

下载:MX4JExample.rar














非飞 2005-02-05 19:07




分享到:
评论
4 楼 非飞 2008-09-30  
longways 写道

请问你的MyRemoteServiceObject 是如何定义的的


这个问题暂时答不到你了,我手上已经没有代码了,好久以前的东西了,忘记具体是如何写的了。
3 楼 非飞 2008-09-30  
dainiao01 写道

运行没有反映, 也没有什么效果!!


你指的什么反应也没有是?我给出的sample是演示如何启动和关闭一个server的。
2 楼 dainiao01 2008-09-26  
运行没有反映, 也没有什么效果!!
1 楼 longways 2008-09-11  
请问你的MyRemoteServiceObject 是如何定义的的

相关推荐

    mx4j管理jmx的jar与spring结合使用

    MX4J是一款开源的Java管理工具,主要用于远程监控和管理Java应用程序。它通过JMX(Java Management Extensions)标准提供服务,允许开发者对运行中的Java应用进行性能监控、配置管理和故障排查。Spring框架则是一个...

    mx4j 开发包,JMX的实现

    mx4j是jmx的开源框架实现,可实现系统开发的微内核管理

    mx4j.jar

    mx4j.jarmx4j.jar

    jdom.jar;javax.servlet.jar;mx4j.jar

    MX4J是一个开源的Java Management Extensions (JMX) 实现,它允许开发者管理和监控Java应用程序。JMX是一种标准,用于在Java应用程序中管理资源,如内存、线程、系统属性等。MX4J提供了远程管理功能,允许通过网络...

    mx4j-tools.jar

    mx4j-tools.jar

    mx4j-remote.jar

    mx4j-remote.jar

    mx4j-jmx.jar

    mx4j-jmx.jar

    mx4j管理框架

    mx4j是对于jmx的一个具体实现,比较古老了,不知有无人需要

    mx4j-impl.jar

    mx4j-impl.jar

    MX4J-开源

    MX4J是一款强大的开源工具,专门用于实现Java Management Extensions(JMX)标准,该标准定义了管理和监控Java应用程序的方法。JMX允许开发者创建可管理的组件,并通过标准接口与管理系统进行交互,从而实现对应用...

    mx4j-rjmx.jar

    mx4j-rjmx.jar

    [探究JMX] 4、Spring2.x集成MX4J

    NULL 博文链接:https://luisfigo.iteye.com/blog/703759

    mx4j-examples.jar

    mx4j-examples.jar

    mx4j-rimpl.jar

    mx4j-rimpl.jar

    DALSA MX4 Xtium-CL-MX4 SDK及driver

    在开发过程中,开发者可以借助SDK提供的库和示例,结合Driver实现对相机的控制和图像的处理。例如,可以创建一个应用来实时显示相机捕获的图像,或者对图像进行分析和处理,满足特定的工业检测或科研需求。 总结,...

    魅族 MX4Pro USB 驱动

    1. **数据传输**:使电脑能够识别并连接魅族MX4Pro,实现照片、音乐、视频等文件的上传和下载。 2. **设备充电**:提供正常的充电功能,确保手机在连接电脑时能获得电力。 3. **调试与开发**:对于开发者而言,USB...

    Xtium-CL+MX4+User+Manual.pdf

    《Xtium-CL+MX4+User+Manual.pdf》用户手册主要涵盖了Dalsa公司的Xtium-CL MX4采集卡的详细...通过深入了解和掌握手册中的知识,用户可以更高效、更稳定地实现图像数据的捕获和处理,从而提升整个系统的性能和可靠性。

    魅族MX4驱动及刷机工具

    同时,由于该描述提到"镜像适用于Ubuntu Touch",这意味着可能还涉及将魅族MX4转换为运行Ubuntu Touch系统的设备,这是一项更为复杂的操作,需要额外的知识和准备。总之,了解并正确使用这些工具可以极大地提升你对...

    JMX应用技术架构系统(包括具体开发说明)

    2. 创建MBean接口和实现类。 3. 实例化MBean,并注册到MBean Server。 4. 配置MX4J连接器,如HTTPServer或RMIConnector。 5. 通过管理客户端连接并操作MBean。 总结,JMX技术架构系统为Java应用提供了强大的管理和...

    Dalsa Xtium-CL MX4采集卡驱动(OR-Y4C0-XmX00)

    通过正确安装和使用驱动,用户能够充分利用采集卡的高速传输能力,实现高效、高质量的图像处理。在实际应用中,用户应密切关注驱动程序的更新,以保持设备的最佳状态,同时遵循提供的文档,解决可能出现的技术问题。

Global site tag (gtag.js) - Google Analytics