亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 學院 > 開發設計 > 正文

深入掌握Java技術 EJB調用原理分析(1)

2019-11-18 13:46:19
字體:
來源:轉載
供稿:網友

一個遠程對象至少要包括4個class文件:遠程對象;遠程對象的接口;實現遠程接口的對象的stub;對象的skeleton這4個class文件。

在EJB中則至少要包括10個class:

Bean類,特定App Server的Bean實現類,Bean的remote接口,特定App Server的remote接口實現類,特定App Server的remote接口的實現類的stub類和skeleton類。

Bean的home接口,特定App Server的home接口實現類,特定App Server的home接口的實現類的stub類和skeleton類和RMI不同的是,EJB中這10個class真正需要用戶編寫的只有3個,分別是 Bean類和它的remote接口,home接口,至于其它的7個class到底是怎么生成,被打包在什么地方,或者是否需要更多的類文件,會根據不同的 App Server表現出比較大的差異,不能一概而論。

拿我最熟悉的Weblogic的來說吧,Weblogic的Bean實現類,以及兩個接口的Weblogic的實現類是在ejbc的時候被打包到EJB的 jar包里面的,這3個class文件可以看到。而home接口和remote接口的Weblogic的實現類的stub類和skeleton類是在 EJB被部署到Weblogic的時候,由Weblogic動態生成stub類和Skeleton類的字節碼,因此看不到這4個類文件。

對于一次客戶端遠程調用EJB,要經過兩個遠程對象的多次RMI循環。首先是通過JNDI查找Home接口,獲得Home接口的實現類,這個過程其實相當復雜。

首先是找到Home接口的Weblogic實現類,然后創建一個Home接口的Weblogic實現類的stub類的對象實例,將它序列化傳送給客戶端(注重stub類的實例是在第1次RMI循環中,由服務器動態發送給客戶端的,因此不需要客戶端保存Home接口的Weblogic實現類的stub 類),最后客戶端獲得該stub類的對象實例(普通的RMI需要在客戶端保存stub類,而EJB不需要,因為服務器會把stub類的對象實例發送給客戶端)。

客戶端拿到服務器給它的Home接口的Weblogic實現類的stub類對象實例以后,調用stub類的create方法,(在代碼上就是 home.create(),但是后臺要做很多事情),于是經過第2次RMI循環,在服務器端,Home接口的Weblogic實現類的skeleton 類收到stub類的調用信息后,由它再去調用Home接口的Weblogic實現類的create方法。

在服務端,Home接口的Weblogic實現類的create方法再去調用Bean類的Weblogic實現類的ejbCreate方法,在服務端創建或者分配一個EJB實例,然后將這個EJB實例的遠程接口的Weblogic實現類的stub類對象實例序列化發送給客戶端。

客戶端收到remote接口的Weblogic實現類的stub類的對象實例,對該對象實例的方法調用(在客戶端代碼中實際上就是對remote接口的調用),將傳送給服務器端remote接口的Weblogic實現類的skeleton類對象,而skeleton類對象再調用相應的remote接口的 Weblogic實現類,然后remote接口的Weblogic實現類再去調用Bean類的Weblogic實現類,如此就完成一次EJB對象的遠程調用。

看了一遍帖子,感覺還是沒有說太清楚,既然寫了帖子,就想徹底把它說清楚。

先拿普通RMI來說,有4個class,分別是遠程對象,對象的接口,對象的stub類和skeleton類。而對象本身和對象的stub類同時都實現了接口類。而我們在客戶端代碼調用遠程對象的時候,雖然在代碼中操縱接口,實質上是在操縱stub類,例如:

接口類:Hello

遠程對象:Hello_Server

stub類:Hello_Stub

skeleton類:Hello_Skeleton

客戶端代碼要這樣寫:

Hello h = new Hello_Stub();h.getString();



我們不會這樣寫:

Hello_Stub h = new Hello_Stub();h.getString();



因為使用接口適用性更廣,就算更換了接口實現類,也不需要更改代碼。因此客戶端需要Hello.class和Hello_Stub.class這兩個文件。

但是對于EJB來說,就不需要Hello_Stub.class,因為服務器會發送給它,但是Hello.class文件客戶端是省不了的,必須有。表面上我們的客戶端代碼在操縱Hello,但別忘記了Hello只是一個接口,抽象的,實質上是在操縱Hello_Stub。

拿Weblogic上的EJB舉例子,10個class分別是:

Bean類:HelloBean (用戶編寫)

Bean類的Weblogic實現類:HelloBean_Impl (EJBC生成)

Home接口:HelloHome (用戶編寫)

Home接口的Weblogic實現類 ((Hello Bean))_HomeImpl(EJBC生成)

Home接口的Weblogic實現類的stub類 ((Hello Bean))_HomeImpl_WLStub(部署的時候動態生成字節碼)

Home接口的Weblogic實現類的skeleton類 ((Hello Bean))_HomeImpl_WLSkeleton(部署的時候動態生成字節碼)

Remote接口:Hello (用戶編寫)

Remote接口的Weblogic實現類 ((Hello Bean))_EOImpl(EJBC生成)

Remote接口的Weblogic實現類的stub類 ((Hello Bean))_EOImpl_WLStub(部署的時候動態生成字節碼)

Remote接口的Weblogic實現類的skeleton類 ((Hello Bean))_EOImpl_WLSkeleton(部署的時候動態生成字節碼)

客戶端只需要Hello.class和HelloHome.class這兩個文件。

((Hello Home)) home = (Home) ((Portable Remote Object)).narrow(ctx.lookup("Hello"), ((Hello Home)).class);



發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
91精品国产乱码久久久久久久久| 国产精品视频专区| 国产精品久久久久久久7电影| 精品久久久一区二区| 国产精品www网站| 这里只有视频精品| 欧美激情视频网址| 日本一本a高清免费不卡| 91大神福利视频在线| 日本精品久久久| 日韩视频第一页| 国产一区二区日韩精品欧美精品| 日本久久中文字幕| 欧美韩国理论所午夜片917电影| 日韩欧美国产激情| 国产欧美精品一区二区三区介绍| 伦伦影院午夜日韩欧美限制| 国产91|九色| 亚洲精品在线视频| xvideos成人免费中文版| 亚洲成人av片| 一区二区欧美在线| 久久天天躁狠狠躁夜夜躁2014| 亚洲精品自拍视频| 性色av一区二区三区在线观看| 国产亚洲精品久久久久久牛牛| 亚洲天堂网站在线观看视频| 久久精彩免费视频| 91精品啪在线观看麻豆免费| 在线成人免费网站| 日韩欧美亚洲综合| 好吊成人免视频| 久久影视电视剧免费网站| 色av中文字幕一区| 久久91精品国产91久久久| 久久综合九色九九| 91国内在线视频| 亚洲国产小视频在线观看| 欧美日韩国产一中文字不卡| 久久99精品久久久久久琪琪| 久久免费视频观看| 欧洲成人在线观看| 欧美日韩精品二区| 91国产精品91| 亚洲精品美女久久久久| 久久精品美女视频网站| 欧美性猛交xxxx免费看久久久| 日韩有码在线观看| 国产日韩欧美91| 欧美午夜精品久久久久久人妖| 日韩av在线影院| 欧美成人小视频| 精品偷拍各种wc美女嘘嘘| 国模精品视频一区二区| 亚洲日本成人网| 日韩av一区二区在线观看| 亚洲无限av看| 亚洲欧美日韩中文在线| 国产成人激情视频| 亚洲精品免费av| 欧美激情a∨在线视频播放| 精品国产户外野外| 国产欧美日韩精品丝袜高跟鞋| 日韩在线观看网站| 91国产美女在线观看| 最近2019中文字幕大全第二页| 韩国福利视频一区| 亚洲在线免费视频| 91在线观看免费观看| 欧美专区日韩视频| 久热精品在线视频| 久久影视电视剧凤归四时歌| 国产视频观看一区| 色小说视频一区| 亚洲第一区在线观看| 亚洲精品美女久久久| 久久韩国免费视频| 欧美男插女视频| 欧美成人午夜免费视在线看片| 国产精品激情av在线播放| 国产小视频91| 98精品国产高清在线xxxx天堂| 一区二区三区国产在线观看| 日本国产一区二区三区| 成人在线小视频| 欧美成人在线影院| 国产午夜精品一区理论片飘花| 亚洲第一av网| 97色在线视频| 中文综合在线观看| 国产成人精品视| 神马久久桃色视频| 国产精品免费网站| 日韩精品亚洲元码| 色无极亚洲影院| 亚洲国产成人在线视频| 51精品在线观看| 中文字幕亚洲欧美日韩高清| 亚洲自拍偷拍视频| 亚洲精品福利免费在线观看| 亚洲国产日韩精品在线| 国产精品一区二区性色av| 日韩精品亚洲精品| 久热国产精品视频| 久久av在线播放| 国产成人亚洲综合91精品| 亚洲第一精品夜夜躁人人爽| 国产视频一区在线| 国产精品成人久久久久| 57pao国产精品一区| 亚洲色图综合网| 国产精品免费视频久久久| 在线播放国产一区中文字幕剧情欧美| 国产美女高潮久久白浆| 国产精品露脸av在线| 国产精品久久久久久一区二区| 777国产偷窥盗摄精品视频| 成人性教育视频在线观看| 都市激情亚洲色图| 久久精品中文字幕| 日本欧美精品在线| 色悠悠国产精品| 亚洲a成v人在线观看| 欧美日韩国产一区二区三区| 亚洲精品久久久久| 97视频在线播放| 欧美性猛交xxxx免费看| 亚洲欧美日韩天堂一区二区| 国产男女猛烈无遮挡91| 一本色道久久综合亚洲精品小说| 在线午夜精品自拍| 国产亚洲激情视频在线| 亚洲女人天堂成人av在线| 国产精品美乳一区二区免费| 精品国产一区二区三区久久狼5月| 亚洲视频综合网| 狠狠色噜噜狠狠狠狠97| 高跟丝袜欧美一区| 亚洲专区在线视频| 欧美激情一区二区三级高清视频| 亚洲无亚洲人成网站77777| 国产网站欧美日韩免费精品在线观看| 久久久国产精品一区| 国产精品视频男人的天堂| 美女999久久久精品视频| 一区二区三区美女xx视频| 亚洲人成电影网站| 海角国产乱辈乱精品视频| 成人免费网站在线观看| 久久这里有精品| www亚洲精品| 国产午夜精品免费一区二区三区| 国产精品久久久久久av下载红粉| 精品香蕉一区二区三区| 日韩在线免费观看视频| 国产婷婷成人久久av免费高清| 97国产一区二区精品久久呦| 4k岛国日韩精品**专区| 日韩精品在线视频| 亚洲大胆美女视频| 中文字幕日韩在线视频| 精品日本高清在线播放| 欧美专区日韩视频| 久久精品国产久精国产一老狼|