EJB分布式对象实现方式描述
在Java RMI中要求所有的參數傳遞和返回類型是JAVA的基本類型或實現Serilizable的對象。
串行化對象通過值傳遞(又名拷貝傳遞),而不是引用傳遞。
這意味著在某一層中串行化對象的更新并不自動影響到其它的對象。
對于EJB對象而言,它由兩個接口(home接口和remote接口)和一個類組成。
容器會根據ejb規范來生成上面兩個接口的類(我們分別稱為xxxEJBHome對象和xxxEjbObject對象)。
在較多的容器實現方案中,xxxEJBHome對象使用了factory模式來創建xxxEjbObject對象;
xxxEjbObject對象則采用proxy模式作為xxxBean的代理類。
在生成以上兩個對象的同時,容器會從部署文件中讀取關于安全、事務、持久性等服務并在xxxEjbObject對象和xxxEJBHome對象中添加以上服務的代碼。
而且xxxEJBHome對象和xxxEjbObject對象都是分布式對象。
在此我們只討論xxxEjbObject對象。
所謂分布式對象,從本質上講,分為三個部分:object server,skeleton,stub。
其中object server和skeleton位于服務器端,而stub位于客戶端。
Object server負責實現業務邏輯,skeleton負責marshal和unmarshal方法簽名。
顯然,EJB的客戶(調用EJB的對象)可以是任何對象,包括EJB和一般的Java類甚至是用任何語言寫的corba客戶端。
從EJB的客戶視角來看的話,我們只能看到一個home接口、一個remote接口(對于實體bean的話,還可以看見一個主鍵類,而bean類對客戶是不可見的)。
但。。。對于remote接口中的方法調用實際上是多態的調用XXX_Stub類,即XXX_Stub對象對客戶具有可見性(但這種可見性是透明的,即客戶不知道這種可見性的存在)。
由于XXX_Stub對象和Object Server實現了相同的接口,并且Object server真正實現了業務邏輯。
所以,當在客戶端調用XXX_Stub對象的方法時候,XXX_Stub對象通過socket通信機制將方法簽名傳給XXX_Skeleton對象,XXX_Skeleton對象再去委托Object server完成業務處理邏輯。
因此,Object server本身發生了改變。
我們稱XXX_Stub對象是Object Server對象的遠程引用,并認為當分布式對象作為參數傳遞的時候,是通過引用傳遞的(會產生副作用,即改變參數對象),只不過這種引用是遠程引用。
來源:
http://wenku.baidu.com/view/942bb1ec0975f46527d3e1ba.html?
轉載于:https://www.cnblogs.com/zjstar12/archive/2012/02/14/2350484.html
創作挑戰賽新人創作獎勵來咯,堅持創作打卡瓜分現金大獎總結
以上是生活随笔為你收集整理的EJB分布式对象实现方式描述的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: android之隐式intent调用
- 下一篇: 关于DataAdapter打开和关闭连接