<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆-124  評論-194  文章-0  trackbacks-0

    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的代碼:

     

            NodeService service = (NodeService) factory.getAPIObject("nodeServiceProxy");
            String name 
    = null;
            
    try {
                name 
    = "rmi://" + InetAddress.getLocalHost().getHostName() + "/NodeNotifyService";
            }
     catch (Exception ue) {}
            
    int result = service.registerFlower (name);
            logger.info (
    "result="+result);

     

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

     

    public class NodeServiceImpl implements NodeService {
        
    public static final Logger logger = LoggerFactory.getLogger(NodeServiceImpl.class);
        
        
    public NodeNotifyService service = null
        
        
    public int registerFlower (String url) {
            logger.info (url);
            
            RmiProxyFactoryBean rmiProxyFactoryBean 
    = new RmiProxyFactoryBean(); 
            rmiProxyFactoryBean.setServiceInterface(NodeNotifyService.
    class); 
            
            logger.info (
    "begin set url");
            rmiProxyFactoryBean.setServiceUrl(url);
            
            
    try 
                logger.info (
    "begin set");
                rmiProxyFactoryBean.afterPropertiesSet(); 
            }
     catch (Exception ex) 
                logger.info (
    "exception");
            }
     

            
    if (rmiProxyFactoryBean.getObject() instanceof NodeNotifyService) 
                service 
    = (NodeNotifyService) rmiProxyFactoryBean.getObject(); 
            }


            
    return 0;
        }

    }



    這樣就從url轉換成client對象了,當然了,還是需要在client和server各自配置文件里配置RmiServiceExporter,這一步很簡單,和正常的spring的rmi是一樣的了。

    做到這步后,我還想把所有接口文件放到一個JAR里,client和server的實現,以及各自邏輯放到各自的JAR中,這樣各自改實現就不需要兩邊更新包。改接口的話,就更新接口所在JAR。不知道這樣安排是否合理?
    posted on 2007-06-21 15:46 我愛佳娃 閱讀(3278) 評論(4)  編輯  收藏 所屬分類: Spring

    評論:
    # re: 在spring中實現rmi回調(callback)功能 2009-03-31 08:58 | meng
    能否給出完整的事例!謝謝!!  回復  更多評論
      
    # re: 在spring中實現rmi回調(callback)功能 2009-03-31 10:58 | meng
    趕快呀  回復  更多評論
      
    # re: 在spring中實現rmi回調(callback)功能[未登錄] 2012-07-23 16:34 | Python
    完整的例子有沒啊。。。。  回復  更多評論
      
    # re: 在spring中實現rmi回調(callback)功能 2016-06-13 15:14 | wwar
    這算個毛線回調  回復  更多評論
      
    主站蜘蛛池模板: 免费大学生国产在线观看p| 成人免费无遮挡无码黄漫视频| 亚洲精品视频在线看| 精品久久久久久久久亚洲偷窥女厕| 成人免费a级毛片| 亚洲精品无码久久久久YW| 四虎成人免费大片在线| 久久精品国产亚洲AV未满十八| 日本免费一区尤物| 免费国产在线精品一区| 久久久久亚洲AV无码专区网站| 中文在线观看永久免费| 亚洲日韩国产精品第一页一区| 精品国产一区二区三区免费| 亚洲邪恶天堂影院在线观看| 免费阿v网站在线观看g| 亚洲一久久久久久久久| 免费乱码中文字幕网站| 国产99视频精品免费视频76| 久久香蕉国产线看观看亚洲片| 2022久久国产精品免费热麻豆| 精品日韩99亚洲的在线发布| 国产精品免费看久久久无码| 午夜成人无码福利免费视频| 久久精品国产亚洲麻豆| 国产2021精品视频免费播放| 亚洲AV无码片一区二区三区| 国产亚洲大尺度无码无码专线| 香港a毛片免费观看| 亚洲色大网站WWW永久网站| 亚洲国产精品毛片av不卡在线 | 亚洲精品国产福利片| 天天看片天天爽_免费播放| 免费激情网站国产高清第一页| 亚洲第一视频网站| 天天摸天天操免费播放小视频 | 亚洲人成在线播放| 国产一级淫片a免费播放口之| 中文精品人人永久免费| 亚洲中文字幕无码爆乳| 亚洲国产一成人久久精品|