專利名稱:對客戶端調用遠程接口訪問ejb進行處理的方法和裝置的制作方法
技術領域:
本發(fā)明涉及計算機應用領域,尤其涉及一種對客戶端調用遠程接口訪問EJB進行處理的方法和裝置。
背景技術:
EJB(企業(yè)Java組件)客戶端可以調用遠程接口或者本地接口來訪問EJB,EJB容器負責創(chuàng)建和管理EJB。EJB客戶端在調用遠程接口和本地接口時EJB容器的處理方式不一樣。
EJB客戶端對本地接口的調用只有在EJB客戶端和EJB容器運行在同一個JVM(Java虛擬機)時才使用。在這種情況下,EJB容器處理本地調用就像處理普通的Java方法調用一樣。這種處理方式能夠有效地提升EJB容器的性能。
EJB客戶端對遠程接口的調用被視為遠程調用,在這種情況下,不管EJB客戶端是否與EJB在同一個JVM中,一系列的遠程調用處理將被執(zhí)行,這些處理通常包括通過底層的ORB(對象請求代理)將本次調用路由到特定的EJB容器、對輸入參數(shù)和返回參數(shù)的編解碼和查找合適的伺服器來處理本次請求等等。如果EJB客戶端與EJB在同一個JVM中,對輸入參數(shù)和輸出參數(shù)的編解碼等處理不是必須的。
上述現(xiàn)有技術中的EJB客戶端在調用遠程接口和本地接口時EJB容器的處理方法的缺點為
Web客戶端是EJB應用的常用客戶端,并且web客戶端與EJB應用通常處在同一個JVM中。此時,web客戶端對EJB的調用仍然會被視為遠程調用,EJB容器仍然要執(zhí)行一些不必要的協(xié)議相關的操作,從而導致web客戶端對EJB的遠程調用的性能十分低。
JDK(Java開發(fā)工具包)提供的CORBA(Common Object RequestBroker Architecture,公共對象請求代理架構)方案支持對同一個JVM中的EJB客戶端調用進行優(yōu)化。該JDK CORBA實現(xiàn)使用CORBA接口來區(qū)分EJB客戶端調用是否與服務器端EJB調用處于同一JVM,當EJB客戶端調用與服務器端EJB調用處于同一JVM時,對該同一JVM中的EJB客戶端調用進行優(yōu)化。
在實現(xiàn)本發(fā)明的過程中,發(fā)明人發(fā)現(xiàn)上述JDK提供的CORBA方案至少存在如下技術問題當在一個JVM中運行了多個ORB,EJB客戶端使用了不同的ORB,并且這些不同的ORB與服務器端EJB調用處于同一個JVM之中時,該方法的優(yōu)化效果將失效。在這種情形下,盡管EJB客戶端與服務端EJB調用處于同一個JVM之中,EJB客戶端對服務端EJB應用的調用仍然會被視為遠程調用,EJB容器仍然要執(zhí)行一些不必要的協(xié)議相關的操作,從而導致EJB客戶端對服務端EJB的遠程調用的性能比較低下。
發(fā)明內容
本發(fā)明的實施例的目的是提供一種對客戶端調用遠程接口訪問EJB進行處理的方法和裝置,以便可以解決EJB客戶端對服務端EJB的遠程調用的性能比較低下的問題。
本發(fā)明實施例的目的是通過以下技術方案實現(xiàn)的一種對客戶端調用遠程接口訪問EJB進行處理的方法,包括以下步驟A、當客戶端調用遠程接口對企業(yè)Java組件EJB進行訪問時,確認EJB服務器端的Java虛擬機JVM標識與客戶端的JVM標識一致;B、所述EJB使用本地調用處理對象來處理所述客戶端對所述EJB的訪問。
一種對客戶端調用遠程接口訪問企業(yè)Java組件EJB進行處理的方法,包括以下步驟C、當客戶端調用遠程接口對企業(yè)Java組件EJB進行訪問時,比較EJB服務器端的JVM標識與客戶端的JVM標識是否一致,當EJB服務器端的JVM標識與客戶端的JVM標識為一致時,則轉至步驟B;否則,則轉至步驟C;D、所述企業(yè)Java組件EJB使用本地調用處理對象來處理所述客戶端對所述EJB的訪問;E、所述EJB使用遠程調用處理對象來處理所述客戶端對所述EJB的訪問。
一種對客戶端調用遠程接口訪問EJB進行處理的裝置,包括JVM確定模塊和本地調用處理模塊;其中,所述JVM確定模塊用于確定所述EJB服務器端的JVM標識與所述客戶端的JVM標識一致,表示所述客戶端和所述EJB運行于同一個JVM中;所述本地調用處理模塊用于使用本地調用處理對象來處理所述客戶端對所述EJB的訪問,所述EJB為經所述JVM確認模塊確認的和所述客戶端處于同一個JVM中的EJB。
由上述本發(fā)明實施例提供的技術方案可以看出,本發(fā)明實施例通過使用本地調用處理對象來處理處于同一JVM中的客戶端使用遠程接口訪問EJB的過程,從而可以大大提高客戶端調用遠程接口訪問EJB的耗時等性能,并且不會產生協(xié)議相關的操作。使用本發(fā)明實施例能夠為用戶節(jié)約硬件成本。
圖1為本發(fā)明實施例所述方法的處理流程圖;圖2為以直接Java方法調用的方式將EJB客戶端對本地接口的調用傳遞給EJB容器的示意圖;圖3為本發(fā)明實施例所述方法的一個具體應用實例的處理流程示意圖;圖4為本發(fā)明實施例所述的裝置的結構示意圖。
具體實施例方式
本發(fā)明實施例提供了一種對客戶端調用遠程接口訪問EJB進行處理的方法和裝置,使用本地調用處理對象來處理處于同一JVM中的客戶端使用遠程接口訪問EJB的過程。
下面結合附圖來詳細描述本發(fā)明實施例,本發(fā)明實施例所述方法的處理流程如圖1所示,包括如下步驟步驟1-1、EJB容器創(chuàng)建代理描述對象,并把代理描述對象綁定到命名服務上。
當一個EJB部署完成后,EJB容器會創(chuàng)建相應的代理描述對象,并把該代理描述對象綁定到命名服務上。代理描述對象是代理對象的包裝對象,包含EJB對象能夠提供的服務的相關信息,能夠用來幫助生成代理對象。代理對象持有用于處理所有方法調用的調用處理對象的引用。
如果一個EJB同時具有遠程接口和本地接口,則EJB容器將分別創(chuàng)建兩個代理描述對象并分別綁定到相應的命名服務上。上述兩個代理描述對象中的一個代理描述對象包含了處理遠程調用的遠程調用處理對象,另外一個代理描述對象包含了處理本地調用的本地調用處理對象。
上述遠程調用處理對象和本地調用處理對象中包含普通對象,EJB客戶端通過該普通對象能訪問EJB容器創(chuàng)建的已部署的EJB對象。如圖2所示,所有的EJB客戶端對本地接口的調用以直接Java方法調用的方式傳遞給EJB容器。
步驟1-2、當EJB客戶端調用遠程接口時,判斷代理對象中包含的JVM標識和客戶端的本地JVM標識是否一致;如果是,則執(zhí)行步驟1-3;否則,執(zhí)行步驟1-4。
當一個EJB部署完成后,系統(tǒng)要為EJB服務器端使用的JVM指定一個唯一的UUID(通用唯一標識)。該UUID是個16位的字符串,根據系統(tǒng)的網卡地址和時間戳采用通用唯一標識算法生成,該算法可以為多個系統(tǒng)的JVM實例或同一個系統(tǒng)的多個JVM實例生成唯一的UUID,該UUID設置在代理對象中的調用處理對象中。
代理對象中包含一個調用處理對象,客戶端通過代理對象來使用調用處理對象。如果讓客戶端直接使用調用處理對象,客戶端就要分辨到底是遠程調用處理對象還是本地調用處理對象。代理對象能夠屏蔽客戶端對遠程調用處理對象或本地調用處理對象的感知。而且代理對象含有所有EJB組件的業(yè)務方法,能夠讓客戶端覺得使用EJB對象(不論是遠程調用,還是本地調用)就跟使用本地對象一樣。
當客戶端調用遠程接口,通過命名服務來查找EJB時,綁定在命名服務中的代理描述對象被轉換為代理對象,該代理對象將獲取調用處理對象中設置的上述JVM標識對應的UUID。然后,判斷該UUID和客戶端的本地JVM標識是否一致,如果是,則執(zhí)行步驟1-3;否則,執(zhí)行步驟1-4。上述客戶端的本地JVM標識用于標識客戶端,即客戶端的UUID,該標識是用UUID算法生成,由JVM標識管理器產生和維護。
步驟1-3、通過本地調用處理對象處理本次客戶端對遠程接口的調用。
當上述UUID和本地JVM標識是一致時,則說明本次客戶端對遠程接口的調用發(fā)生在同一個JVM中,本發(fā)明將這種情況下的遠程調用稱為遠程-本地調用,于是,上述代理對象委托其包含的上述本地調用處理對象來處理本次遠程-本地調用。
步驟14、通過遠程調用處理對象處理本次客戶端對遠程接口的調用。
當上述UUID和本地JVM標識不一致時,則說明本次客戶端對遠程接口的調用不是發(fā)生在同一個JVM中,于是,上述代理對象委托其包含的上述遠程調用處理對象來處理本次客戶端對遠程接口的調用。
上述客戶端包括web客戶端,或者使用了EJB組件提供的服務的java應用程序。
本發(fā)明實施例所述方法的一個具體應用實例的處理流程如圖3所示,包括如下步驟31、客戶應用程序根據指定的JNDI(Java命名和目錄接口)名稱向客戶端側的CORBA客戶端查找EJB對象。
32、CORBA客戶端向命名服務查找EJB對象。
33、命名服務將代理描述對象返回給CORBA客戶端。代理描述對象是EJB對象的描述對象,CORBA客戶端通過該代理描述對象得到服務端的JVM標識,即服務端的UUID。
34、CORBA客戶端從代理描述值工廠讀取Proxy對象,代理描述值工廠用于代理描述對象從服務端讀取相應的代理描述值。
35、代理描述值工廠從代理描述對象中讀取EJB對象的類名。
36、代理描述對象從JVM標識管理器對象中取得客戶端的本地JVM標識,即客戶端的UUID,該本地JVM標識由JVM標識管理器產生和維護。
37、代理描述對象檢查上述服務端的JVM標識跟本地JVM標識是否一致。
38、如果上述服務端的JVM標識跟本地JVM標識一致,代表客戶端和服務端處于同一個JVM之中,于是,EJB容器創(chuàng)建本地調用處理對象。
39、如果上述服務端的JVM標識跟本地JVM標識不一致,代表客戶端和服務端處于不同的JVM之中,于是,EJB容器創(chuàng)建遠程調用處理對象。
310、代理描述值工廠從代理描述中取得相應的調用處理對象。
311、代理描述值工廠創(chuàng)建代理對象,該代理對象是EJB對象的代理對象,它包含了調用處理對象。
312、代理描述值工廠將創(chuàng)建的代理對象返回給CORBA客戶端。
313、CORBA客戶端將接收到的代理對象返回給客戶應用程序。
314、客戶應用程序調用EJB對象提供的服務。代理對象會接管這次調用。
315、當上述EJB容器創(chuàng)建的是遠程本地調用時,代理對象會委托本地調用處理對象接管這次調用。
316、上述本地調用處理對象調用EJB容器來取得結果。
317、EJB容器將調用結果返回給本地調用處理對象。
318、本地調用處理對象將調用結果返回給代理對象。
319、代理對象將調用結果返回給客戶端應用程序。
根據上述本發(fā)明實施例所述方法的處理流程,本發(fā)明使用從服務端發(fā)送過來的UUID來區(qū)分客戶端調用是否跟服務端處在同一JVM之中,因為JVM標識是唯一的,不管客戶端是否使用相同的ORB或者不同的ORB,都會被視為遠程-本地調用。
在遠程-本地調用的情形下,JDK CORBA實現(xiàn)依賴ORB,但是本發(fā)明不依賴ORB,不使用CORBA接口;JDK CORBA實現(xiàn)需要將存根置于環(huán)境變量之中,但是本發(fā)明不需要將stubs置于環(huán)境變量之中。
JDK CORBA實現(xiàn)使用CORBA伺服器來操作EJB,伺服器將調用路由到創(chuàng)建了EJB對象的容器上。本發(fā)明直接調用容器來執(zhí)行操作。因此,相比JDK CORBA,本發(fā)明的性能更好。
本發(fā)明實施例所述對客戶端調用遠程接口訪問EJB進行處理的裝置的結構示意圖如圖4所示,包括如下模塊JVM確定模塊,用于確定所述EJB服務器端的JVM標識與所述客戶端的JVM標識一致,表示所述客戶端和所述EJB運行于同一個JVM中,包括命名服務子模塊和代理描述對象子模塊;本地調用處理模塊,用于使用本地調用處理對象來處理所述客戶端對所述EJB的訪問,所述EJB為經所述JVM確認模塊確認的和所述客戶端處于同一個JVM中的EJB。
遠程調用處理模塊,用于使用遠程調用處理對象來處理所述客戶端對所述EJB的訪問,所述EJB為和所述客戶端不是處于同一個JVM中的EJB。
上述JVM確定模塊中的命名服務子模塊,用于接收客戶端調用遠程接口訪問所述EJB的信號,將預先創(chuàng)建的代理描述對象返回給所述客戶端;上述JVM確定模塊中的代理描述對象子模塊,用于從其內部獲得EJB服務器端的JVM標識,從JVM標識管理器對象中獲得所述客戶端的JVM標識,并比較所述EJB服務器端的JVM標識和所述客戶端的JVM標識是否一致,當比較結果為是時,通知所述本地調用處理模塊,當比較結果為否時,通知所述遠程調用處理模塊。
應用本發(fā)明實施例所述方法和裝置后,可以對EJB的遠程調用進行優(yōu)化,有效地提高EJB的遠程調用的性能。應用本發(fā)明實施例所述方法之前和之后,EJB的遠程調用的一個具體應用實例的性能對比示意表如下述表1所示
表1
在上述具體應用實例中,如上述表1所示,本發(fā)明所述遠程-本地調用的性能比現(xiàn)有的遠程調用的性能提高了10倍。
以上所述,僅為本發(fā)明較佳的具體實施方式
,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術領域的技術人員在本發(fā)明揭露的技術范圍內,可輕易想到的變化或替換,都應涵蓋在本發(fā)明的保護范圍之內。因此,本發(fā)明的保護范圍應該以權利要求的保護范圍為準。
權利要求
1.一種對客戶端調用遠程接口訪問企業(yè)Java組件EJB進行處理的方法,其特征在于,包括以下步驟A、當客戶端調用遠程接口對企業(yè)Java組件EJB進行訪問時,確定EJB服務器端的Java虛擬機JVM標識與客戶端的JVM標識一致;B、所述企業(yè)Java組件EJB使用本地調用處理對象來處理所述客戶端對所述EJB的訪問。
2.根據權利要求1所述的方法,其特征在于,所述步驟A具體包括當客戶端調用遠程接口通過命名服務訪問所述EJB時,所述命名服務實體將代理描述對象實體返回給所述客戶端;所述代理描述對象實體從其內部獲得EJB服務器端的JVM標識,并根據所述EJB服務器端的JVM標識,從JVM標識管理器對象中獲得所述客戶端的JVM標識;所述代理描述對象實體確定所述EJB服務器端的JVM標識和所述客戶端的JVM標識一致。
3.根據權利要求1所述的方法,其特征在于,所述步驟A之前還包括EJB容器創(chuàng)建代理描述對象實體,并將該代理描述對象實體綁定到命名服務實體上;為所述EJB服務器端使用的Java虛擬機JVM指定通用唯一標識UUID,并將該UUID設置在所述代理描述對象實體中。
4.根據權利要求2所述的方法,其特征在于,所述客戶端的JVM標識包括客戶端的通用唯一標識UUID。
5.根據權利要求1至4任一項所述的方法,其特征在于,所述的步驟B具體包括確定所述客戶端調用遠程接口對所述EJB的訪問發(fā)生在同一個JVM中,所述客戶端創(chuàng)建包含本地調用處理對象的EJB組件的代理對象,當客戶端調用所述代理對象時,所述代理對象委托其包含的本地調用處理對象來處理所述客戶端對所述EJB的訪問。
6.一種對客戶端調用遠程接口訪問企業(yè)Java組件EJB進行處理的方法,其特征在于,包括以下步驟C、當客戶端調用遠程接口對企業(yè)Java組件EJB進行訪問時,比較EJB服務器端的JVM標識與客戶端的JVM標識是否一致,當EJB服務器端的JVM標識與客戶端的JVM標識為一致時,則轉至步驟B;否則,則轉至步驟C;D、所述企業(yè)Java組件EJB使用本地調用處理對象來處理所述客戶端對所述EJB的訪問;E、所述EJB使用遠程調用處理對象來處理所述客戶端對所述EJB的訪問。
7.根據權利要求6所述的方法,其特征在于,所述步驟E具體包括確定所述客戶端調用遠程接口對所述EJB的訪問發(fā)生在不同JVM中,所述客戶端創(chuàng)建包含遠程調用處理對象的EJB組件的代理對象,當客戶端調用所述代理對象時,所述代理對象委托其包含的遠程調用處理對象來處理所述客戶端對所述EJB的訪問。
8.一種對客戶端調用遠程接口訪問EJB進行處理的裝置,其特征在于,包括JVM確定模塊和本地調用處理模塊;其中,所述JVM確定模塊,用于當客戶端調用遠程接口對EJB進行訪問時,確定所述EJB服務器端的JVM標識與所述客戶端的JVM標識一致,表示所述EJB和所述客戶端運行于同一個JVM中;所述本地調用處理模塊,用于使用本地調用處理對象來處理所述客戶端對所述EJB的訪問,所述EJB為經所述JVM確認模塊確認的與所述客戶端處于同一個JVM中的EJB。
9.根據權利要求8所述的裝置,其特征在于,所述裝置還包括遠程調用處理模塊,用于使用遠程調用處理對象來處理所述客戶端對所述EJB的訪問,所述EJB為與所述客戶端不是處于同一個JVM中的EJB。
10.根據權利要求9所述的裝置,其特征在于,所述JVM確定模塊包括命名服務子模塊,用于接收客戶端調用遠程接口訪問所述EJB的信號,將預先創(chuàng)建的代理描述對象返回給所述客戶端;代理描述對象子模塊,用于從其內部獲得EJB服務器端的JVM標識,從JVM標識管理器對象中獲得所述客戶端的JVM標識,并比較所述EJB服務器端的JVM標識和所述客戶端的JVM標識是否一致,當比較結果為是時,通知所述本地調用處理模塊,當比較結果為否時,通知所述遠程調用處理模塊。
全文摘要
本發(fā)明提供了一種對客戶端調用遠程接口訪問EJB進行處理的方法和裝置,該方法主要包括當客戶端調用遠程接口對EJB(企業(yè)Java組件)進行訪問,并且所述EJB服務器端的企業(yè)Java組件JVM標識與所述客戶端的JVM標識一致時,使用本地調用處理對象來處理所述客戶端對所述EJB的訪問。該裝置主要包括JVM確定模塊、本地調用處理模塊。利用本發(fā)明所述方法和裝置,可以解決EJB客戶端對服務端EJB的遠程調用的性能比較低下的問題,可以提高客戶端調用遠程接口訪問EJB的耗時等性能。
文檔編號G06F9/46GK1996256SQ20061016738
公開日2007年7月11日 申請日期2006年12月31日 優(yōu)先權日2006年12月31日
發(fā)明者蘇葩娜, 墨迪 申請人:華為技術有限公司