真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

[轉]EJB工作原理

前兩天在這個版塊的精華區(qū)里翻到了Robbin關于EJB的調用原理的分析,受益非淺,但感覺用純文字來表達效果似乎不夠直觀,而且對RMI的闡述也略嫌少了些。這里我根據(jù)自己的一點體會,在Robbin帖子的基礎上再來說說這個話題,供大家參考。

站在用戶的角度思考問題,與客戶深入溝通,找到西塞山網(wǎng)站設計與西塞山網(wǎng)站推廣的解決方案,憑借多年的經(jīng)驗,讓設計與互聯(lián)網(wǎng)技術結合,創(chuàng)造個性化、用戶體驗好的作品,建站類型包括:網(wǎng)站設計制作、成都網(wǎng)站制作、企業(yè)官網(wǎng)、英文網(wǎng)站、手機端網(wǎng)站、網(wǎng)站推廣、空間域名、網(wǎng)頁空間、企業(yè)郵箱。業(yè)務覆蓋西塞山地區(qū)。

首先,我想先說說RMI的工作原理,因為EJB畢竟是基于RMI的嘛。廢話就不多講了,RMI的本質就是實現(xiàn)在不同JVM之間的調用,工作原理圖如下:

[轉]EJB 工作原理

它的實現(xiàn)方法就是在兩個JVM中各開一個Stub和Skeleton,二者通過socket通信來實現(xiàn)參數(shù)和返回值的傳遞。

有關RMI的例子代碼網(wǎng)上可以找到不少,但絕大部分都是通過extend the interface java.rmi.Remote實現(xiàn),已經(jīng)封裝的很完善了,不免使人有霧里看花的感覺。下面的例子是我在《Enterprise JavaBeans》里看到的,雖然很粗糙,但很直觀,利于很快了解它的工作原理。

[@more@]

1. 定義一個Person的接口,其中有兩個business method, getAge() 和getName()

xanada 2004-03-24 09:53

先來看看Client端的程序是怎么寫的:

xanada 2004-03-24 10:08

OK, now we got the object which is instanceOf _UserService_Stub, and implements UserService

現(xiàn)在我們的Client端走到第三步了:
UserInfo ui = object.getUserInfo(userId);

繼續(xù)看代碼,開始第二個RMI循環(huán):

1. 調用object.getUserInfo()

xanada 2004-03-24 10:19

回顧一下上面的分析,可以很清晰的看到兩次RMI循環(huán)的過程,下圖(見鏈接)描述了整個流程:

http://www.pbase.com/image/27229257

黃色的1,6,10是程序員要寫的,其余是系統(tǒng)生成的。

#1是Home interface, #2和#4都implements 了它。
#6是Remote interface, #7和#9都implements 了它。
#10是Bean實現(xiàn)。

寫到這里,基本要說的就說完了。這實在是一項累死人的工作,希望您能稀飯。歡迎補充,歡迎摘錯。謝謝,呵呵。

莊表偉 2004-03-24 11:02

了不起的工作!
不辭辛勞,詳盡明白。

一定會好好學習的!

另外,有沒有可能分析一下,這樣的工作方式的“所以然”。或者說“不得不然”。再或者有沒有“其他的實現(xiàn)方式”。

xanada 2004-03-25 11:18

簡單講,就是為了適應分布式開發(fā)的需要。

首先,回到我最后給出的流程圖。

Client端最原始的沖動,肯定是能直接調用#10.UserServiceBean就爽了。那么第一個問題來了,
Client和Server不在一個JVM里

這好辦,我們不是有RMI嗎,好,這個問題就這么解決了:
1. UserServiceBeanInterface.getUserInfo()
2. UserServiceBeanStub
3. UserServiceBeanSkeleton
4. UserServiceBean

用著用著,第二個問題來了,
UserServiceBean只有人用,沒人管理,transaction logic, security logic, bean instance pooling logic這些不得不考慮的問題浮出水面了。

OK,我們想到用一個delegate,EJBObject,來進行所有這些logic的管理。client和EJBObject打交道,EJBObject調用UserServiceBean。

注意,這個EJBObject也是一個Interface,#6.UserService這個interface正是從它extends而來。并且EJBObject所管理的這些logic,正是AppServer的一部分。

現(xiàn)在的流程變?yōu)榱耍?
EJBObject
1. UserService.getUserInfo()
2. UserServiceStub
3. UserServiceSkeleton
4. UserServiceImp
5. UserServiceBean

這已經(jīng)和整幅圖里的#6, #7, #8, #9, #10一一對應了。

現(xiàn)在能滿足我們的需求了嗎?不,第三個問題又來了:
既然是分布式開發(fā),那么我當然沒理由只用一個Specified Server,我可能需要用到好幾個不同的Server,而且EJBObject也需要管理呀

OK,為了適應你的需要,我們還得加再一個HomeObject,首先它來決定用哪個Server(當然,是由你用JNDI String設定的),其次,它來管理EJBObject。

注意,這個EJBHome也是一個Interface,#1.UserServiceHome這個interface正是從它extends而來。并且EJBHome管理EJBObject的logic,也是AppServer的一部分。

現(xiàn)在的調用次序是
1. EJBHome.create()
2. EJBHomeStub
3. EJBHomeSkeleton
4. EJBHomeImp(EJSWrapper)
5. EJSHome

得到EJBObject

6. UserService.getUserInfo()
7. UserServiceStub
8. UserServiceSkeleton
9. UserServiceImp
10. UserServiceBean

現(xiàn)在已經(jīng)完全和流程圖的調用順序一致了。

綜上所述,EJB的調用確實很麻煩,但是搞的這么麻煩,確實是有搞的麻煩的道理,實在是不得不為也。


網(wǎng)站名稱:[轉]EJB工作原理
本文網(wǎng)址:http://weahome.cn/article/ipiehj.html

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部

<samp id="4kua4"><tbody id="4kua4"></tbody></samp>
  • <ul id="4kua4"><pre id="4kua4"></pre></ul>
    <tr id="4kua4"><rt id="4kua4"></rt></tr>
    <strike id="4kua4"></strike>