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












在server端registerFlower處理里,根據(jù)url動(dòng)態(tài)創(chuàng)建這個(gè)對(duì)象,代碼如下:








































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