日本综合一区二区|亚洲中文天堂综合|日韩欧美自拍一区|男女精品天堂一区|欧美自拍第6页亚洲成人精品一区|亚洲黄色天堂一区二区成人|超碰91偷拍第一页|日韩av夜夜嗨中文字幕|久久蜜综合视频官网|精美人妻一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營銷解決方案
Java分布式之RMI實例教程

Java分布式之RMI實例教程

作者:佚名 2010-08-25 17:08:18

企業(yè)動態(tài)

分布式 最近的聯(lián)通項目,下一階段可能會涉及到和各省間的RMI接口,所以總結(jié)一下08年中國移動自動撥測系統(tǒng)用到的RMI技術(shù),以備不時之需。

成都創(chuàng)新互聯(lián)公司主要從事做網(wǎng)站、網(wǎng)站設(shè)計、網(wǎng)頁設(shè)計、企業(yè)做網(wǎng)站、公司建網(wǎng)站等業(yè)務(wù)。立足成都服務(wù)邵陽,十余年網(wǎng)站建設(shè)經(jīng)驗,價格優(yōu)惠、服務(wù)專業(yè),歡迎來電咨詢建站服務(wù):13518219792

Java分布式之RMI實例教程,RMI的基礎(chǔ)是接口,RMI構(gòu)架基于一個重要的原理:定義接口和定義接口的具體實現(xiàn)是分開的。

編輯特別推薦:

關(guān)于Java性能監(jiān)控不知道的五件事

Java運行時環(huán)境初始化時出現(xiàn)錯誤

SQLServe數(shù)據(jù)庫到DB2連接服務(wù)器的實現(xiàn)過程全解

前言

最近的聯(lián)通項目,下一階段可能會涉及到和各省間的RMI接口,所以總結(jié)一下08年中國移動自動撥測系統(tǒng)用到的RMI技術(shù),以備不時之需。同時也給廣大初哥提供一些學(xué)習(xí)資料,哈哈。前幾年,一直忙于項目,沒怎么做系統(tǒng)總結(jié)。以后計劃寫一些以前項目用過的Java分布式技術(shù)實例教程,如:RMI、Socket、Mina、SNMP、SOAP、web Service、Hessian、JMS等。希望和大家一起交流,分享經(jīng)驗,一起提高。

RMI簡介

RMI,遠程方法調(diào)用(Remote Method Invocation)是Enterprise JavaBeans的支柱,是建立分布式Java應(yīng)用程序的方便途徑。RMI是非常容易使用的,但是它非常的強大。

RMI的基礎(chǔ)是接口,RMI構(gòu)架基于一個重要的原理:定義接口和定義接口的具體實現(xiàn)是分開的。看看jboss-remoting:

基本原理

要實現(xiàn)網(wǎng)絡(luò)機器間的通訊,首先得來看看計算機系統(tǒng)網(wǎng)絡(luò)通信的基本原理,在底層層面去看,網(wǎng)絡(luò)通信需要做的就是將流從一臺計算機傳輸?shù)搅硗庖慌_計算機,基于傳輸協(xié)議和網(wǎng)絡(luò)IO來實現(xiàn),其中傳輸協(xié)議比較出名的有http、tcp、udp等等,http、tcp、udp都是在基于Socket概念上為某類應(yīng)用場景而擴展出的傳輸協(xié)議,網(wǎng)絡(luò)IO,主要有bio、nio、aio三種方式,所有的分布式應(yīng)用通訊都基于這個原理而實現(xiàn),只是為了應(yīng)用的易用,各種語言通常都會提供一些更為貼近應(yīng)用易用的應(yīng)用層協(xié)議。

主要步驟

分為以下幾個步驟:

1. 創(chuàng)建遠程接口及聲明遠程方法(RmiMonitorService.java)

2. 實現(xiàn)遠程接口及遠程方法(繼承UnicastRemoteObject)(RmiMonitorServiceImpl.java)

3. 啟動RMI注冊服務(wù),并注冊遠程對象(RmiServer.java)

4. 客戶端查找遠程對象,并調(diào)用遠程方法(MonitorClient.java)

5. 運行實例#p#

業(yè)務(wù)場景

在移動撥測系統(tǒng)管理端中要融合實時顯示。簡單點說就是設(shè)備出現(xiàn)告警時,要采用不同方式實時展示。如Web界面(Ajax)、GIS等。

主要業(yè)務(wù)流程設(shè)計:

1. 設(shè)備告警

2. 調(diào)用RMI Client

3. 調(diào)用RMI Server

4. 調(diào)用業(yè)務(wù)處理接口

5. 告警信息入庫

6. 實時顯示(Ajax,Gis等技術(shù))

技術(shù)設(shè)計

接口函數(shù)函數(shù)名稱: int interactive( int funindex, string param )

參數(shù)說明:

funindex 功能號,整型。1為設(shè)備告警

param 交互參數(shù),字符串型。

返回:

成功=1,失敗=0。

說明:

param交互參數(shù)用鍵值對組成,每個鍵值對以“&”分割,如:Tsid=01&devid=002&warnid=102&warntype=01&warnlevel=1 。

測試點ID(tsid)

設(shè)備ID(devid)

告警ID(warnid)

告警類型(warntype)

告警級別(warnlevel)

代碼實現(xiàn)#p#

廢話少說,上代碼,為了演示方便,經(jīng)過整理,省去了很多get,set之類的東東還有業(yè)務(wù)的東西以及Spring相關(guān)的東西。

  
 
 
  1. Java代碼
  2. RmiMonitorService.java
  3. package nbpt.ts.manager.message.service;
  4. import java.rmi.Remote;
  5. import java.rmi.RemoteException;
  6. /**
  7. * Description: 實時顯示RMI服務(wù)接口.
  8. *
  9. * RMI接口必須擴展接口java.rmi.Remote
  10. *
  11. * @author Peter Wei
  12. * @version 1.0 Feb 25, 2009
  13. */
  14. public interface RmiMonitorService extends Remote {
  15. /**
  16. * 實時顯示對外接口
  17. *
  18. * @param funindex
  19. * 功能號
  20. * @param param
  21. * 鍵名列表,也就是實際傳輸?shù)膬?nèi)容
  22. * @return
  23. * @throws RemoteException
  24. * 遠程接口方法必須拋出java.rmi.RemoteException
  25. */
  26. public int interactive(int funindex, String param) throws RemoteException;
  27. }
  28. RmiMonitorServiceImpl.java
  29. package nbpt.ts.manager.message.service.impl;
  30. import java.rmi.RemoteException;
  31. import java.rmi.server.UnicastRemoteObject;
  32. // import nbpt.ts.manager.base.util.AppContext;
  33. import nbpt.ts.manager.message.service.RmiMonitorService;
  34. import nbpt.ts.manager.message.service.WarnService;
  35. /**
  36. * Description: 實時顯示RMI接口實現(xiàn).
  37. *
  38. * 實現(xiàn)RMI接口及遠程方法(繼承UnicastRemoteObject)
  39. *
  40. * @author Peter Wei
  41. * @version 1.0 Feb 25, 2009
  42. */
  43. public class RmiMonitorServiceImpl extends UnicastRemoteObject implements
  44. RmiMonitorService {
  45. private static final long serialVersionUID = -3771656108378649574L;
  46. public static final int SUCCSS = 1;
  47. public static final int FAIL = 0;
  48. public WarnService warnService;
  49. /**
  50. * 必須定義構(gòu)造方法,因為要拋出RemoteException異常
  51. *
  52. * @throws RemoteException
  53. */
  54. public RmiMonitorServiceImpl() throws RemoteException {
  55. super();
  56. }
  57. public int interactive(int funindex, String param) throws RemoteException {
  58. int result = FAIL;
  59. switch (funindex) {

告警#p#

  
 
 
  1. case (1): {
  2. // warnService = (WarnService) AppContext.getAppContext().getBean(
  3. // "warn.warnService");

實際應(yīng)用是從Spring應(yīng)用中獲取告警Service,如上代碼

  
 
 
  1. warnService = new WarnServiceImpl();

網(wǎng)絡(luò)告警的業(yè)務(wù)操作

  
 
 
  1. warnService.dealWarn(param);
  2. result = SUCCSS;
  3. }
  4. break;
  5. case (2):
  6. // do other biz
  7. break;
  8. }
  9. // ......
  10. return result;
  11. }
  12. public WarnService getWarnService() {
  13. return warnService;
  14. }
  15. public void setWarnService(WarnService warnService) {
  16. this.warnService = warnService;
  17. }
  18. }
  19. RmiServer.java
  20. package nbpt.ts.manager.message.service;
  21. import java.net.MalformedURLException;
  22. import java.rmi.AlreadyBoundException;
  23. import java.rmi.Naming;
  24. import java.rmi.RemoteException;
  25. import java.rmi.registry.LocateRegistry;
  26. import nbpt.ts.manager.message.service.impl.RmiMonitorServiceImpl;
  27. /**
  28. * Description: RMI服務(wù)端.
  29. *
  30. * @author Peter Wei
  31. * @version 1.0 Feb 25, 2009
  32. */
  33. public class RmiServer {
  34. public String ip = "localhost";
  35. public int port = 8889;
  36. /**
  37. * 啟動RMI注冊服務(wù),并注冊遠程對象.實際應(yīng)用中是在Spring初始化并啟動
  38. */
  39. public void init() {
  40. try {
  41. LocateRegistry.createRegistry(port);
  42. // 創(chuàng)建一個遠程對象
  43. RmiMonitorService comm = new RmiMonitorServiceImpl();
  44. Naming.bind("http://" + ip + ":" + port + "/comm", comm);
  45. } catch (RemoteException e) {
  46. System.out.println("創(chuàng)建遠程對象發(fā)生異常!" + e.toString());
  47. e.printStackTrace();
  48. } catch (AlreadyBoundException e) {
  49. System.out.println("發(fā)生重復(fù)綁定對象異常!" + e.toString());
  50. e.printStackTrace();
  51. } catch (MalformedURLException e) {
  52. System.out.println("發(fā)生URL畸形異常!" + e.toString());
  53. e.printStackTrace();
  54. }
  55. }
  56. public String getIp() {
  57. return ip;
  58. }
  59. public void setIp(String ip) {
  60. this.ip = ip;
  61. }
  62. public int getPort() {
  63. return port;
  64. }
  65. public void setPort(int port) {
  66. this.port = port;
  67. }
  68. public static void main(String[] args) {

 實際應(yīng)用中是在Spring初始化并啟動#p#

  
 
 
  1. RmiServer rmiServer = new RmiServer();
  2. System.out.println("RMI服務(wù)初始化:");
  3. rmiServer.init();
  4. }
  5. }
  6. MonitorClient.java
  7. package nbpt.ts.manager.message.service;
  8. import java.net.MalformedURLException;
  9. import java.rmi.Naming;
  10. import java.rmi.NotBoundException;
  11. import java.rmi.RemoteException;
  12. /**
  13. * Description: RMI客戶端.
  14. *
  15. * @author Peter Wei
  16. * @version 1.0 Feb 25, 2009
  17. */
  18. public class MonitorClient {
  19. public RmiMonitorService monitorService;
  20. public String ip = "localhost";
  21. public int port = 8889;
  22. public int interactive(int funindex, String param) 
  23. int result = 0;
  24. try {
  25. getMonitorService().interactive(funindex, param);
  26. result = 1;
  27. } catch (RemoteException e) {
  28. e.printStackTrace();
  29. }
  30. return result;
  31. }
  32. public RmiMonitorService getMonitorService() {
  33. try {

在RMI服務(wù)注冊表中查找名稱為RmiMonitorService的對象,并調(diào)用其上的方法#p#

  
 
 
  1. monitorService = (RmiMonitorService) Naming.lookup("rmi://" + ip
  2. + ":" + port + "/comm");
  3. } catch (NotBoundException e) {
  4. e.printStackTrace();
  5. } catch (MalformedURLException e) {
  6. e.printStackTrace();
  7. } catch (RemoteException e) {
  8. e.printStackTrace();
  9. }
  10. return monitorService;
  11. }
  12. public static void main(String args[]) throws RemoteException {
  13. MonitorClient client = new MonitorClient();
  14. System.out.println("發(fā)送告警信息:");
  15. String msg = "tsid=1022&devid=10001027&warnid=102&warntype=01&warnlevel=1&warnmsg=設(shè)備出錯,請檢查.";
  16. System.out.println(client.getValue(msg, "warnmsg"));
  17. client.interactive(1, msg);
  18. }
  19. public String getValue(String content, String key) {
  20. String value = "";
  21. int begin = 0, end = 0;
  22. begin = content.indexOf(key + "=");
  23. end = content.indexOf("&", begin);
  24. if (end == -1)
  25. end = content.length();
  26. value = content.substring(begin + key.length() + 1, end);
  27. return value;
  28. }
  29. }
  30. WarnService.java
  31. package nbpt.ts.manager.message.service;
  32. /**
  33. * Description: 告警服務(wù)
  34. *
  35. * @author Peter Wei
  36. * @version 1.0 2010-8-22
  37. */
  38. public interface WarnService {
  39. /**

* 處理告警:告警來時的業(yè)務(wù)操作,實際操作是解析消息存庫,然后界面Ajax定時刷新數(shù)據(jù),獲取實時告警展示#p#

  
 
 
  1. *
  2. * @param message
  3. * @return
  4. */
  5. public int dealWarn(String message);
  6. }
  7. WarnServiceImpl.java
  8. package nbpt.ts.manager.message.service.impl;
  9. import nbpt.ts.manager.message.service.WarnService;
  10. /**
  11. * Description: 告警服務(wù)
  12. *
  13. * @author Peter Wei
  14. * @version 1.0 2010-8-22
  15. */
  16. public class WarnServiceImpl implements WarnService {
  17. public int dealWarn(String message) {

告警處理方法

  
 
 
  1. System.out.println("已接收網(wǎng)絡(luò)告警");
  2. // …
  3. return 1;
  4. }
  5. }

當(dāng)前題目:Java分布式之RMI實例教程
文章地址:http://www.dlmjj.cn/article/dpgdspd.html