spring包裝了rmi后,使我們得到幾點便利:
不用調用rmic編譯stub和skeleton
不用直接實現remote接口
不需要啟動命名服務rmiregistry
但,卻不支持原來rmi的回調功能。查閱許多網頁也不得其解。
今天,想到一招,共享出來,如果大家有好辦法歡迎回貼共享。
正常做法是:
回調一般是用在一群client端需要server來通知的情況,一般server就用Vector來保存client對象。
server端需要提供一個方法,client把對象傳過來后,保存到Vector中,以后就可以通知client們了:
register (ClientObject obj);
在spring里,基本做法是一樣的,唯一不同是,在這個方法里,client不能傳對象,我們就傳一個client提供出來的rmi對象的url:
register(String url);
在client端,就如正常使用先獲得server對象,再調用這個方法,注意組成url的代碼:












在server端registerFlower處理里,根據url動態創建這個對象,代碼如下:








































這樣就從url轉換成client對象了,當然了,還是需要在client和server各自配置文件里配置RmiServiceExporter,這一步很簡單,和正常的spring的rmi是一樣的了。
做到這步后,我還想把所有接口文件放到一個JAR里,client和server的實現,以及各自邏輯放到各自的JAR中,這樣各自改實現就不需要兩邊更新包。改接口的話,就更新接口所在JAR。不知道這樣安排是否合理?