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)即可。