讀quartz源碼有感一

今天是2018年10月22號,已經陸陸續續看了quartz源碼好幾天,初步對quartz的框架有了些瞭解,但是腦子裏完全想不起來。

首先看到了QuartzScheduler繼承RemoteQuartzScheduler繼承Remote,即java.rmi.Remote

第一天

學習參考了孫衛琴老師的《Java網絡編程精解》一書的RMI一章

RMI(即Remote Method Invoke 遠程方法調用)。在Java中,只要一個類extends了java.rmi.Remote接口,即可成爲存在於服務器端的遠程對象,供客戶端訪問並提供一定的服務。JavaDoc描述:Remote 接口用於標識其方法可以從非本地虛擬機上調用的接口。任何遠程對象都必須直接或間接實現此接口。只有在“遠程接口”(擴展 java.rmi.Remote 的接口)中指定的這些方法纔可遠程使用。 

注意:extends了Remote接口的類或者其他接口中的方法若是聲明拋出了RemoteException異常,則表明該方法可被客戶端遠程訪問調用。 

同時,遠程對象必須實現java.rmi.server.UniCastRemoteObject類,這樣才能保證客戶端訪問獲得遠程對象時,該遠程對象將會把自身的一個拷貝以Socket的形式傳輸給客戶端,此時客戶端所獲得的這個拷貝稱爲“存根”,而服務器端本身已存在的遠程對象則稱之爲“骨架”。其實此時的存根是客戶端的一個代理,用於與服務器端的通信,而骨架也可認爲是服務器端的一個代理,用於接收客戶端的請求之後調用遠程方法來響應客戶端的請求。 

RMI 框架的基本原理大概如下圖,應用了代理模式來封裝了本地存根與真實的遠程對象進行通信的細節。

                              

下面給出一個簡單的RMI 應用,其中類圖如下:其中IService接口用於聲明服務器端必須提供的服務(即service()方法),ServiceImpl類是具體的服務實現類,而Server類是最終負責註冊服務器遠程對象,以便在服務器端存在骨架代理對象來對客戶端的請求提供處理和響應。

                                 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章