posts - 12,  comments - 2,  trackbacks - 0

              很早以前就接觸到了JMX,最近又要用到它。但是啟動服務(wù),遠(yuǎn)程調(diào)用的關(guān)鍵代碼一時還真想不起來。上網(wǎng)google一圈還是沒找到答案。最終還是本人反復(fù)調(diào)試,才搞定。現(xiàn)貢獻(xiàn)源碼如下:
              JMX Server實現(xiàn):

          public class ToolsJMXServer {
              
              
          public void startUp() {
                  
          try {
                      
          //加載配置
                      InputStream is = this.getClass().getClassLoader().getResourceAsStream(
                          
          "com/shrcn/jmx/RegistBeanInfo.properties");
                      
          if(is.available()>0{
                          proCfg.load(is);
                      }

                      
          if(proCfg.contains(KEY_PORT)) {
                          RMI_PORT 
          = Integer.parseInt(proCfg.getProperty(KEY_PORT));
                      }

                      
          //啟動命名服務(wù)
                      LocateRegistry.createRegistry(RMI_PORT);
                      registerMBeans();
                      JMXServiceURL url 
          = new JMXServiceURL(
                              
          "service:jmx:rmi:///jndi/rmi://localhost:" + RMI_PORT + 
                              
          "/" + JNDI_NAME);
                      JMXConnectorServer cs 
          = JMXConnectorServerFactory
                          .newJMXConnectorServer(url,     
          // url
                                              null,         // environment map
                                              server);     // MBeanServer
                      
          //啟動JMXServer
                      cs.start();
                  }
           catch (RemoteException e) {
                      e.printStackTrace();
                  }
           catch (MalformedURLException e) {
                      e.printStackTrace();
                  }
           catch (IOException e) {
                      e.printStackTrace();
                  }

              }

              
              
          private void registerMBeans() {
                  
          try {
                      Iterator
          <Entry<Object, Object>> it = proCfg.entrySet().iterator();
                      
          while(it.hasNext()) {
                          Entry
          <Object, Object> entry = it.next();
                          String beanName 
          = (String)entry.getKey();
                          
          if(KEY_PORT.equals(beanName))
                              
          continue;
                          String clazz 
          = (String)entry.getValue();
                          ObjectName on 
          = new ObjectName(DOMAIN + ":" + KEY + "=" + beanName);
                          Class
          <?> cl = Class.forName(clazz);
                          Object obj 
          = cl.newInstance();
                          server.registerMBean(obj, on);
                      }

                  }
           catch (Exception e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }

              }

              
          }

              JMX客戶端實現(xiàn):

          public class MBeanCaller {
              
              
          public static Object invokeRemote(String host, int port, ObjectName objectName,
                      String methodName, Object[] params, String[] signature)
                      
          throws RemoteException {
                  JMXConnector connector 
          = null;
                  MBeanServerConnection connection 
          = null;
                  
          try {
                      JMXServiceURL url 
          = new JMXServiceURL(
                          
          "service:jmx:rmi:///jndi/rmi://" + host + 
                              
          ":" + port + "/" + ToolsJMXServer.JNDI_NAME);
                      connector 
          = JMXConnectorFactory.connect(url);
                      connection 
          = connector.getMBeanServerConnection();
                      
          return connection.invoke(objectName, methodName, params, signature);
                  }
           catch (Exception e) {
                      
          // TODO Auto-generated catch block
                      e.printStackTrace();
                  }
           finally {
                      
          try {
                          connector.close();
                      }
           catch (IOException e) {
                          
          // TODO Auto-generated catch block
                          e.printStackTrace();
                      }

                  }

                  
          return null;
              }

              
          }


              雖然代碼簡練,但很實用,希望對各位讀者有益。[源碼]

          posted on 2008-12-23 21:08 遠(yuǎn)帆 閱讀(415) 評論(0)  編輯  收藏 所屬分類: Java
          主站蜘蛛池模板: 屏东市| 甘德县| 秀山| 涞源县| 巍山| 遂昌县| 大新县| 济源市| 股票| 伊春市| 灌云县| 大同县| 汪清县| 泰来县| 五常市| 舞阳县| 尤溪县| 宣恩县| 启东市| 临朐县| 汉沽区| 卓尼县| 开远市| 金寨县| 峨边| 长沙市| 石狮市| 永宁县| 南华县| 扎赉特旗| 普定县| 新绛县| 双牌县| 武川县| 唐河县| 台江县| 阿克| 丰原市| 土默特左旗| 县级市| 沙田区|