亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? ejb 工作原理.txt

?? EJB 工作原理,有圖片,有文字,是一個很清楚,很容易理解的,很直接,很簡單的文檔,下載下來看吧!
?? TXT
?? 第 1 頁 / 共 2 頁
字號:
Home接口在Server端的實現(xiàn),當然,它也implements UserServiceHome。 

7. EJSStatelessUserServiceHomeBean_a940aa04.java 
由#6調(diào)用,create _UserService_Stub。(為什么#6不能直接create _UserService_Stub呢?后面再講。) 

8. _UserService_Stub.java 
Remote接口在Client端(動態(tài)加載)的Stub類。它implements UserService。 

9. _EJSRemoteStatelessUserService_a940aa04_Tie.java 
Remote接口在Server端的Skeleton類。 

10. EJSRemoteStatelessUserService_a940aa04.java 
Remote接口在Server端的實現(xiàn),當然,它也implements UserService。并且,它負責調(diào)用UserServiceBean——也就是我們所寫的Bean實現(xiàn)類——里面的business method。 

那么,各個類之間的調(diào)用關系到底是怎么樣的呢?簡單的說,就是兩次RMI循環(huán)。

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


Java代碼 
1.try {   
2.    InitialContext ctx = new InitialContext();;   
3.  
4.    //第一步   
5.    UserServiceHome home =   
6.        (UserServiceHome); PortableRemoteObject.narrow(   
7.            ctx.lookup(JNDIString);,   
8.            UserServiceHome.class);;   
9.  
10.    //home: _UserServiceHome_Stub   
11.    System.out.println(home.toString(););;   
12.  
13.    //第二步   
14.    UserService object = home.create();;   
15.  
16.    //ojbect: _UserService_Stub   
17.    System.out.println(object.toString(););;   
18.  
19.    //第三步   
20.    int userId = 1;   
21.    UserInfo ui = object.getUserInfo(userId);;   
22.}  
try {
    InitialContext ctx = new InitialContext();;

    //第一步
    UserServiceHome home =
        (UserServiceHome); PortableRemoteObject.narrow(
            ctx.lookup(JNDIString);,
            UserServiceHome.class);;

    //home: _UserServiceHome_Stub
    System.out.println(home.toString(););;

    //第二步
    UserService object = home.create();;

    //ojbect: _UserService_Stub
    System.out.println(object.toString(););;

    //第三步
    int userId = 1;
    UserInfo ui = object.getUserInfo(userId);;
}


在第一步之后,我們得到了一個UserServiceHome(interface)定義的對象home,那么,home到底是哪個class的instance呢?用debug看一下,知道了home原來就是_UserServiceHome_Stub的實例。 

從第二步開始,就是我們的關注所在,雖然只有簡單的一行代碼, 
UserService object = home.create(); 
但是他背后的系統(tǒng)是怎么運做的呢?我們進入代碼來看吧: 

1. 調(diào)用home.create() 

Java代碼 
1.UserServiceHome home;   
2.UserService obj = home.create();;  
UserServiceHome home;
UserService obj = home.create();;


2. 實際是調(diào)用_UserServiceHome_Stub.create(),在這個方法里面,Stub向Skeleton發(fā)送了一個create的字串: 

Java代碼 
1.org.omg.CORBA.portable.OutputStream out = _request("create", true);;   
2.in = (org.omg.CORBA_2_3.portable.InputStream);_invoke(out);;  
org.omg.CORBA.portable.OutputStream out = _request("create", true);;
in = (org.omg.CORBA_2_3.portable.InputStream);_invoke(out);;


3. Server端的Skeleton接收Stub發(fā)來的request,并調(diào)用相應的方法: 

Java代碼 
1._EJSRemoteStatelessUserServiceHome_a940aa04_Tie._invoke(); {   
2.    ......   
3.    switch (method.length();); {   
4.        case 6:   
5.            if (method.equals("create");); {   
6.                return create(in, reply);;   
7.            }   
8.        ......   
9.    }   
10.}  
_EJSRemoteStatelessUserServiceHome_a940aa04_Tie._invoke(); {
    ......
    switch (method.length();); {
        case 6:
            if (method.equals("create");); {
                return create(in, reply);;
            }
        ......
    }
}



Java代碼 
1._EJSRemoteStatelessUserServiceHome_a940aa04_Tie.create(); {   
2.    EJSRemoteStatelessUserServiceHome_a940aa04 target = null;   
3.    result = target.create();;   
4.    org.omg.CORBA.portable.OutputStream out = reply.createReply();;   
5.    Util.writeRemoteObject(out,result);;   
6.    return out;   
7.}  
_EJSRemoteStatelessUserServiceHome_a940aa04_Tie.create(); {
    EJSRemoteStatelessUserServiceHome_a940aa04 target = null;
    result = target.create();;
    org.omg.CORBA.portable.OutputStream out = reply.createReply();;
    Util.writeRemoteObject(out,result);;
    return out;
}


4. Skeleton調(diào)用的是UserServiceHome的Server端實現(xiàn)類的create方法 

Java代碼 
1.EJSRemoteStatelessUserServiceHome_a940aa04.create(); {   
2.    UserService _EJS_result;   
3.    _EJS_result = EJSStatelessUserServiceHomeBean_a940aa04.create();;   
4.}  
EJSRemoteStatelessUserServiceHome_a940aa04.create(); {
    UserService _EJS_result;
    _EJS_result = EJSStatelessUserServiceHomeBean_a940aa04.create();;
}


5. #4又調(diào)用EJSStatelessUserServiceHomeBean_a940aa04.create() 

Java代碼 
1.UserService result = super.createWrapper(new BeanId(this, null););;  
    UserService result = super.createWrapper(new BeanId(this, null););;


至此,我們終于結(jié)束了第一個RMI循環(huán),并得到了Remote接口UserService的Stub類_UserService_Stub,就是#5里面的result。 

這里有一個問題,為什么#4不直接create _UserService_Stub,而又轉(zhuǎn)了一道#5的手呢?因為#4 extends from EJSWrapper,它沒有能力create Stub,因此必須借助#5,which extends from EJSHome,這樣才可以生成一個Stub。如果不是為了生成這個Stub,應該可以不走#5這一步。 

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. 調(diào)用object.getUserInfo() 

Java代碼 
1.UserService object;   
2.object.getUserInfo(userId);;  
UserService object;
object.getUserInfo(userId);;


2. 實際是調(diào)用_UserService_Stub.getUserInfo(int arg0),在這個方法里面,Stub向Skeleton發(fā)送了一個getUserInfo的字串和arg0這個參數(shù): 


Java代碼 
1.org.omg.CORBA.portable.OutputStream out = _request("getUserInfo", true);;   
2.out.write_long(arg0);;   
3.in = (org.omg.CORBA_2_3.portable.InputStream);_invoke(out);;  
org.omg.CORBA.portable.OutputStream out = _request("getUserInfo", true);;
out.write_long(arg0);;
in = (org.omg.CORBA_2_3.portable.InputStream);_invoke(out);;


3. Server端的Skeleton接收Stub發(fā)來的request,并調(diào)用相應的方法: 

Java代碼 
1._EJSRemoteStatelessUserService_a940aa04_Tie._invoke(); {   
2.    switch (method.charAt(5););   
3.    {   
4.        case 83:   
5.            if (method.equals("getUserInfo");); {   
6.                return getUserInfo(in, reply);;   
7.            }   
8.        ......   
9.    }   
10.}   
11.  
12._EJSRemoteStatelessUserService_a940aa04_Tie.getUserInfo(); {   
13.    EJSRemoteStatelessUserService_a940aa04 target = null;   
14.    int arg0 = in.read_long();;   
15.    UserDTO result = target.getUserInfo(arg0);;   
16.    org.omg.CORBA_2_3.portable.OutputStream out = reply.createReply();;   
17.    out.write_value(result,UserDTO.class);;   
18.    return out;   
19.}  
_EJSRemoteStatelessUserService_a940aa04_Tie._invoke(); {
    switch (method.charAt(5););
    {
        case 83:
            if (method.equals("getUserInfo");); {
                return getUserInfo(in, reply);;
            }
        ......
    }
}

_EJSRemoteStatelessUserService_a940aa04_Tie.getUserInfo(); {
    EJSRemoteStatelessUserService_a940aa04 target = null;
    int arg0 = in.read_long();;
    UserDTO result = target.getUserInfo(arg0);;
    org.omg.CORBA_2_3.portable.OutputStream out = reply.createReply();;
    out.write_value(result,UserDTO.class);;
    return out;
}


4. Skeleton調(diào)用的是UserService的Server端實現(xiàn)類的getUserInfo方法 

Java代碼 
1.EJSRemoteStatelessUserService_a940aa04.getUserInfo(); {   
2.    UserServiceBean _EJS_beanRef = container.preInvoke(this, 0, _EJS_s);;   
3.    _EJS_result = _EJS_beanRef.getUserInfo(id);;   
4.}  
EJSRemoteStatelessUserService_a940aa04.getUserInfo(); {
    UserServiceBean _EJS_beanRef = container.preInvoke(this, 0, _EJS_s);;
    _EJS_result = _EJS_beanRef.getUserInfo(id);;
}


最后的最后,#4終于調(diào)用了我們寫的UserServiceBean里的getUserInfo方法,這才是我們真正想要去做的事情。 

至此,第二個RMI循環(huán)也終于結(jié)束了。 

回顧一下上面的分析,可以很清晰的看到兩次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)。 

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

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

一定會好好學習的! 

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

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

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

Client端最原始的沖動,肯定是能直接調(diào)用#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調(diào)用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)在的調(diào)用次序是 
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)完全和流程圖的調(diào)用順序一致了。 

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

哎喲,好累啊。希望我把這個問題說清楚了,您也沒給我繞迷糊。謝謝。 

莊表偉 寫道
了不起的工作! 
不辭辛勞,詳盡明白。 

一定會好好學習的! 

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


我覺得這位同志問的比較好,但我還想往深處追究一下: 
     EJB specification說它是為了實現(xiàn)企業(yè)間分布式事務和計算的良好平臺而產(chǎn)生的。我對這里的“企業(yè)分布式計算和分布式事務”不太了解,哪些企業(yè)間的應用屬于“分布式事務,分布式計算”,這在國外的具體表現(xiàn)是那些行業(yè)? 
那EJB產(chǎn)生之前用的是啥方法解決的它的“分布式事務,分布式計算”,為什么EJB能取而代之它們? 
      用一句話說就是“為什么當前的業(yè)務需要用到EJB而不是別的?” 
          穩(wěn)定性,高性能,我們該不該用它??? 

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
人人精品人人爱| 91香蕉视频在线| 丁香婷婷综合激情五月色| 色婷婷综合久久久中文一区二区| 欧美精品1区2区3区| 综合分类小说区另类春色亚洲小说欧美| 丝瓜av网站精品一区二区| 97精品国产露脸对白| 欧美tickling网站挠脚心| 亚洲第一综合色| 一本一本久久a久久精品综合麻豆 一本一道波多野结衣一区二区 | 日本伊人精品一区二区三区观看方式 | 欧美三级电影一区| 中文字幕欧美激情一区| 精品无人码麻豆乱码1区2区| 欧美日韩在线播放三区| 亚洲精品美国一| av电影在线观看完整版一区二区| 精品美女一区二区| 久久国产日韩欧美精品| 欧美日韩高清一区二区| 亚洲一区二区在线免费看| caoporm超碰国产精品| 国产欧美一区二区在线| 黄色精品一二区| 精品免费视频一区二区| 蜜臀av性久久久久蜜臀aⅴ流畅 | 精品国产第一区二区三区观看体验 | 色婷婷av一区二区三区大白胸| 国产日韩在线不卡| 国产成人精品影院| 国产欧美一区二区在线观看| 国产成人免费在线观看| 国产午夜精品久久久久久免费视| 国产美女一区二区三区| 久久精品水蜜桃av综合天堂| 国产麻豆一精品一av一免费| 久久久久青草大香线综合精品| 久久成人免费网| 国产午夜精品在线观看| 成人黄页毛片网站| 一区二区三区中文字幕电影| 色噜噜狠狠成人网p站| 午夜激情一区二区| 欧美一级日韩免费不卡| 狠狠色丁香久久婷婷综| 国产午夜一区二区三区| 91色婷婷久久久久合中文| 亚洲一二三四区| 欧美一级理论片| 国产a久久麻豆| 亚洲青青青在线视频| 欧美日韩一区视频| 精品一区二区三区免费播放| 久久精品亚洲一区二区三区浴池 | 日本黄色一区二区| 亚洲不卡在线观看| 精品少妇一区二区三区日产乱码 | 国产亚洲综合色| 色哟哟一区二区在线观看| 亚洲va天堂va国产va久| 精品国产一二三区| 972aa.com艺术欧美| 日一区二区三区| 国产女主播在线一区二区| 色哟哟在线观看一区二区三区| 日日夜夜精品视频天天综合网| 国产午夜精品一区二区三区视频| 色综合久久综合中文综合网| 免费观看在线色综合| **网站欧美大片在线观看| 777亚洲妇女| 99riav久久精品riav| 日韩高清在线一区| 国产精品久久久爽爽爽麻豆色哟哟 | 欧美一区午夜精品| 不卡电影一区二区三区| 奇米精品一区二区三区四区| 中文字幕一区二区三区不卡| 欧美一级黄色录像| 91免费看片在线观看| 久久国产欧美日韩精品| 亚洲午夜精品在线| 中文一区一区三区高中清不卡| 91精品视频网| 91久久精品一区二区三区| 国产乱人伦偷精品视频免下载| 五月激情综合网| 亚洲人成小说网站色在线 | 中文字幕日本不卡| 精品91自产拍在线观看一区| 在线精品视频免费观看| 国产99久久久国产精品| 精品写真视频在线观看| 日本免费在线视频不卡一不卡二| 亚洲同性同志一二三专区| 国产色婷婷亚洲99精品小说| 日韩精品一区二区三区中文不卡| 欧美亚男人的天堂| 91一区二区三区在线观看| 国产精品18久久久久久久久 | 亚洲精品免费在线| 中文字幕av一区 二区| www成人在线观看| 精品免费99久久| 精品日韩在线一区| 欧美成人性战久久| 69堂国产成人免费视频| 欧美另类高清zo欧美| 欧美日免费三级在线| 91精彩视频在线| 欧美性视频一区二区三区| 欧洲精品在线观看| 欧美影视一区在线| 欧美色视频一区| 欧美精品三级在线观看| 91精品久久久久久久久99蜜臂| 欧美日韩国产天堂| 91.com视频| 精品国产一区二区三区不卡 | 欧美乱熟臀69xxxxxx| 欧美精品在线观看一区二区| 欧美日韩一本到| 91麻豆精品91久久久久同性| 91精品婷婷国产综合久久| 日韩一区二区不卡| 精品成人免费观看| 欧美国产在线观看| 亚洲欧美综合网| 亚洲综合一区二区| 午夜精品久久久久久久| 奇米一区二区三区| 国产精品一区二区黑丝| av在线不卡网| 欧美四级电影网| 精品三级在线看| 国产精品初高中害羞小美女文| 亚洲品质自拍视频网站| 天堂午夜影视日韩欧美一区二区| 日本中文字幕一区| 国产jizzjizz一区二区| 91久久久免费一区二区| 欧美一区二区视频在线观看2020| 精品福利av导航| 亚洲人被黑人高潮完整版| 日韩高清不卡在线| 成人午夜激情片| 欧美日韩在线一区二区| 久久久精品2019中文字幕之3| 中文字幕一区二区在线观看| 天天操天天干天天综合网| 国产精品一区专区| 欧美色老头old∨ideo| 337p粉嫩大胆噜噜噜噜噜91av| 亚洲欧洲99久久| 激情五月婷婷综合| 精品视频123区在线观看| 国产亚洲1区2区3区| 午夜电影网一区| 成人深夜在线观看| 欧美精品乱码久久久久久按摩| 国产精品天天摸av网| 日韩国产一二三区| 99精品桃花视频在线观看| 欧美不卡在线视频| 亚洲国产欧美在线人成| 国产传媒日韩欧美成人| 欧美日韩你懂得| 亚洲欧美综合在线精品| 黄页网站大全一区二区| 欧美日韩精品一区二区三区| 国产精品欧美精品| 国产一区二区三区蝌蚪| 正在播放亚洲一区| 一区二区三区丝袜| 国产91综合一区在线观看| 欧美mv和日韩mv国产网站| 亚洲福利一区二区| 91视频com| 中文字幕一区av| 成人一区二区三区在线观看| 日韩精品一区二| 蜜臀av性久久久久av蜜臀妖精| 欧美日韩综合在线| 一区二区三区日韩欧美精品| 成a人片国产精品| 久久免费电影网| 久久99久国产精品黄毛片色诱| 欧美色手机在线观看| 一区二区三区丝袜| 色综合久久88色综合天天| 国产精品剧情在线亚洲| 国产99精品国产| 国产日韩av一区| 成人午夜伦理影院| 亚洲国产精品v| 成人激情小说乱人伦| 中文字幕一区二区三区不卡在线| 国产91丝袜在线播放0| 国产欧美日韩另类视频免费观看|