一、什麼是EJB。
EJB是sun的JavaEE服務器端組件模型,設計目標與核心應用是部署分佈式應用程序。後面還有一堆下面再仔細分析。我相信在這麼寫下去,你就要關閉頁簽了。尼瑪...什麼意思?
好吧,也許你只是來看看EJB是不是適合你的應用場景。如果看到底才發現適合,浪費時間了。
二、應用場景
比較適合:規模大、擴展性高、伸縮性強、多形態客戶端(C/S,或者C/S、B/S混合)的應用。不太適合:純B/S結構的Web應用;請求、返回、調用能通過自定義協議解決的應用;超大訪問併發量的應用。
三、繼續什麼是EJB。
接“後面還有一堆”。EJB定義。商務軟件的核心部分是它的業務邏輯。業務邏輯抽象了整個商務過程的流程,並使用計算機語言將他們實現。J2EE 對於這個問題的處理方法是將業務邏輯從客戶端軟件中抽取出來,封裝在一個組件中。這個組件運行在一個獨立的服務器上,客戶端軟件通過網絡調用組件提供的服務以實現業務邏輯,而客戶端軟件的功能單純到只負責發送調用請求和顯示處理結果。在J2EE 中,這個運行在一個獨立的服務器上,並封裝了業務邏輯的組件就是EJB(Enterprise JavaBean)組件。
下面我們來逐句分析
業務邏輯:所謂業務邏輯,並沒有什麼高大上,就是你平時寫的業務邏輯,完全可以翻譯成執行特定任務的"類"。
抽取、封裝、在獨立服務器上運行:把原來放到客戶端的"類",拿出來不放到客戶端了,放到一個組件中,並將這個組件放到一個服務器上去運行。
下面就沒有什麼好分析的了,把EJB翻譯成大白話就是:
把你編寫的軟件中那些需要執行制定的任務的類,不放到客戶端軟件上了,而是給他打成包放到一個服務器上了,通過網絡訪問。
等等等等,聽上面的意識,難道EJB 的概念中說的是C/S 軟件?
是的,沒錯,你說的對。
很多人沒有看到這一行,直接關閉了頁籤。
那麼EJB和JSP一點關係都沒有嘛?
EJB 和JSP 有什麼關係?EJB 和JSP 有關係,但是關係還真不怎麼大,至多是在JSP 的服務器端調用遠端服務上的EJB 類,僅此而已。
以上只是簡單解釋了EJB是什麼,想深入瞭解,請搜索更深入的文章。
原理?這不就是原理嗎。大白話顯得不高端麼?
好吧,客戶端是通過網絡對EJB 對象進行調用的,在Java中,能夠實現遠程對象調用的技術是RMI,也正是EJB技術的基礎。
通過RMI 技術,J2EE將EJB 組件創建爲遠程對象,客戶端就可以通過網絡調用EJB 對象了。
四、關於RMI
方法調用從客戶對象經佔位程序(Stub)、遠程引用層(Remote Reference Layer)和傳輸層(Transport Layer)向下,傳遞給主機,然後再次經傳 輸層,向上穿過遠程調用層和骨幹網(Skeleton),到達服務器對象。 佔位程序扮演着遠程服務器對象的代理的角色,使該對象可被客戶激活。 遠程引用層處理語義、管理單一或多重對象的通信,決定調用是應發往一個服務器還是多個。傳輸層管理實際的連接,並且追追蹤可以接受方法調用的遠程對象。服務器端的骨幹網完成對服務器對象實際的方法調用,並獲取返回值。返回值向下經遠程引用層、服務器端的傳輸層傳遞迴客戶端,再向上經傳輸層和遠程調用層返回。最後,佔位程序獲得返回值。這下明白了吧,沒明白?至少高端了吧。
說明白一點:RMI使用Java語言接口定義了遠程對象,它集合了Java序列化和Java遠程方法協議(Java Remote Method Protocol)。
還是不明白?下面一點點來分析。
四點一
序列化概念:對象的序列化過程就是將對象狀態轉換成字節流和從字節流恢復對象。將對象狀態轉換成字節流之後,可以用java.io 包中的各種字節流類將其保存到文件中,或者通過網絡連接將對象數據發送到另一個主機大白話就是:你自定一個類MyClass,或者任何一個類的對象,將它轉換成字節數組,那麼你當然就可以隨便處置了它了,用得最多的就是把他發送到網絡上遠程的計算機上了。
四點二
遠程方法調用:本地計算機調用遠程計算機上的一個函數或者說函數總結:利用對象序列化來實現遠程調用。