<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    向左走,向右走。。。
    永遠(yuǎn)不回頭
    posts - 16,comments - 17,trackbacks - 0
        看了兩天文檔,總算對(duì)JMX有了一個(gè)整體的認(rèn)識(shí)。發(fā)現(xiàn)使用mx4j實(shí)現(xiàn)JMX還是相當(dāng)?shù)妮p松的。MBeans可以使用mx4j-tools中的 Xdoclet偷一下懶,讓它自動(dòng)的生成MBeans和Descriptions,ant有相應(yīng)的支持,還是比較方便的,對(duì)于MBean接口的實(shí)現(xiàn),自己寫(xiě)了。

        對(duì)于如何產(chǎn)生和注冊(cè)MBeans,mx4j提供了一個(gè)相當(dāng)方便的工具,為什么說(shuō)相當(dāng)方便,是因?yàn)樗娴膶?shí)在是太方便了。通過(guò)寫(xiě)一個(gè)xml配置文件可以完成所有的工作。比起M-LET確實(shí)是強(qiáng)了不少。下面就是一個(gè)在MBean Server產(chǎn)生注冊(cè)一個(gè)NamingService、JMXConnectorServer和一個(gè)自寫(xiě)的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方法調(diào)用配置文件的startup部分完成創(chuàng)建和注冊(cè),shutdown方法調(diào)用配置文件的shutdown部分釋放相應(yīng)的資源。通過(guò)調(diào)用 startup方法就可以起動(dòng)MBeanServer提供服務(wù)了。對(duì)于shutdown開(kāi)始搞了我半天startup后 ConfigurationLoader都沒(méi)有創(chuàng)建一個(gè)偵聽(tīng)端口來(lái)接收shutdown命令,看了看mx4j的源碼發(fā)現(xiàn) ConfigurationLoader也沒(méi)有發(fā)現(xiàn)什么特殊地方。捉摸半天終于發(fā)現(xiàn)了自己放了一個(gè)愚笨的錯(cuò)誤,eclipse是用普通用戶(hù)權(quán)限開(kāi)的,沒(méi)有辦法創(chuàng)建偵聽(tīng),改成root后一切ok。

        接下就隨便寫(xiě)了一個(gè)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是通過(guò)獲取一個(gè)MBeanServerConnection來(lái)實(shí)現(xiàn)遠(yuǎn)程調(diào)用的,運(yùn)行了一下一切順利通過(guò)。

    下載:MX4JExample.rar
    posted on 2005-02-05 19:07 非飛 閱讀(5708) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): JAVA 相關(guān)技術(shù)
    主站蜘蛛池模板: 午夜男人一级毛片免费| 免费A级毛片无码免费视| 男人的好免费观看在线视频| 国产高清免费的视频| 亚洲第一AAAAA片| 亚洲无码一区二区三区| 99在线热播精品免费99热| 无码日韩人妻av一区免费| 国产啪亚洲国产精品无码| 亚洲乱码中文论理电影| 国产免费伦精品一区二区三区| 黄页网站在线观看免费高清| 成年女人免费视频播放体验区| 老司机在线免费视频| 亚洲视频在线观看免费| 亚洲成A人片在线观看无码3D | 国产精品免费αv视频| 亚洲精品GV天堂无码男同| 亚洲人妖女同在线播放| 亚洲最大中文字幕| 亚洲精品视频专区| 亚洲白色白色永久观看| 亚洲黄色在线播放| 亚洲精品在线播放| 色偷偷亚洲第一综合网| 国产免费爽爽视频免费可以看| 久久精品国产亚洲香蕉| 黄页网站在线免费观看| 1024免费福利永久观看网站| 久久九九亚洲精品| 深夜福利在线免费观看| 最近的中文字幕大全免费版| 久久亚洲AV成人无码软件| 国产免费内射又粗又爽密桃视频 | 亚洲中文无码卡通动漫野外 | 日本精品人妻无码免费大全| 亚洲乱码无码永久不卡在线| 男女超爽视频免费播放| 91在线视频免费看| 亚洲一区二区成人| 中文字幕av无码不卡免费|