1. 程式人生 > >RMI與配置檔案結合跨專案呼叫

RMI與配置檔案結合跨專案呼叫

RMI雖然只能處理java專案之前的呼叫,其在jvm專案之間的通訊效能還是可以的。

RMI結合配置檔案可實現專案之間的呼叫,如有配置檔案如下:

  <server>
<host>10.118.63.20</host>
<port>8080</port>
<list>
<package>com.company.module.baseFile</package>
<package>com.company.module.loginmgmt</package>
</list>
</server>

每個server對應一個專案,專案呼叫不同的埠,package為各專案中的模組。以下程式碼為調取該xml檔案,並建立跨專案通訊。

 SAXReader saxReader = new SAXReader();
    Document document = null;
    try {
      document = saxReader.read(xmlFile);
      Element root = document.getRootElement();


      List<?> listServer = root.elements("server");


      for (Object el : listServer) {
        List<?> listEle = ((Element) el).element("list").elements(
            "package");
        Element host = ((Element) el).element("host");
        Element port = ((Element) el).element("port");


        ITransporter transporter = new ClientTransporter(
            host.getTextTrim(),
            Integer.parseInt(port.getTextTrim()));
        
        // 獲取超時配置
        LaunchConfig launchConfig = AppContext.getAppContext().getLaunchConfig();
        Integer rmiTimeOut = launchConfig.getRmiTimeOut();
        if (rmiTimeOut != null) {
          transporter.setTimeout(rmiTimeOut.intValue());
        } else {
          transporter.setTimeout(DEFAULT_TIMEOUT);
        }
        
        // 例項化RMIProxy
        RMIProxy proxy = RMIProxy.newInstance();
        proxy.setTransporter(transporter);
        proxyList.add(proxy);


        // 設定包與RMIProxy對映關係
        for (Object element : listEle) {
          String pkg = ((Element) element).getTextTrim();
          proxyMap.put(pkg, proxy);
        }        
      }      
    } catch (DocumentException e) {
      logger.error("讀取配置檔案出錯", e);
    }

假設類的名稱為RMIProxy,呼叫另一專案中的類時程式碼:

RMIProxy.get(OtherClass.class)即可。