專利名稱:在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的系統(tǒng)和方法
技術(shù)領(lǐng)域:
本發(fā)明涉及動態(tài)編程語言,更具體地,涉及在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序。
背景技術(shù):
除非在此有相反指示,否則在本部分中描述的方法不是本申請權(quán)利要求 的現(xiàn)有技術(shù),并且不因包含在本部分中而承認是現(xiàn)有技術(shù)。
可以寬泛地將編程語言分類為兩類動態(tài)編程語言和非動態(tài)編程語言。 非動態(tài)語言可以被看作是這樣一種編程語言,其中,在方法(或過程
(procedure))調(diào)用之間進4亍綁定以實現(xiàn)方法發(fā)生在編i奪時。而動態(tài)語言則可 以被看作是綁定發(fā)生在運行時并且通常可以在任何時間在程序中覆寫
(overwrite)的編程語言。在非動態(tài)語言中,方法調(diào)用可以是對分配給類的 過程的調(diào)用。在動態(tài)語言中,方法調(diào)用可以是要發(fā)送給類的實例的消息,而 確定如何處理該消息是類的任務(wù)。
更具體地,術(shù)語"動態(tài)編程語言"描述的是一類高級編程語言,其在運 行時執(zhí)行許多公共行為(common behaviors ),而其它語言即使i丸行這些z^共 行為,也是在編譯期間執(zhí)行。這些行為可以包括對程序的擴展,所述擴展包 括通過增加新代碼、通過擴展對象和定義、或通過修改類型系統(tǒng)的擴展,所 有這些都是在程序執(zhí)行期間進行的。這些行為可以在幾乎任何足夠復(fù)雜的語 言中進行仿真,但是動態(tài)語言提供直接的工具來對它們加以利用。術(shù)語"非 動態(tài)編程語言"描述的是缺少這些行為的語言。(非動態(tài)編程語言也可稱為"靜 態(tài)編程語言"。)
動態(tài)編程語言具有許多實際的或是可認識到的優(yōu)點。動態(tài)編程語言例如 通過允許動態(tài)類型的變量、以及給予在運行時改變代碼和邏輯結(jié)構(gòu)的能力而 具有靈活性。許多動態(tài)語言是開放式源語言。動態(tài)語言允許較高的生產(chǎn)率, 因為其例如易于學(xué)習(xí)并具有簡單易懂的句法。動態(tài)語言通常允許更容易地集 成到例如諸如mashups或其它Web服務(wù)的環(huán)境中。動態(tài)語言的一個示例是Ruby。 Ruby是一種反射性的(reflective )、動態(tài) 的、面向?qū)ο蟮木幊陶Z言。它將受Perl啟發(fā)的句法與類似Smalltalk的面向?qū)?象特征相結(jié)合,并且還與Python、 Lisp、 Dylan以及CLU共享某些特征。Ruby 是單向(single-pass)解釋性語言。
然而,動態(tài)語言在某些計算環(huán)境中具有許多缺點。例如,雖然在程序執(zhí) 行期間改變程序代碼的能力通常是優(yōu)點,但是其在企業(yè)應(yīng)用(business application)環(huán)境中卻是缺點。對于企業(yè)應(yīng)用來說, 一般不希望一個用戶的程 序影響另一個用戶的程序或數(shù)據(jù)。企業(yè)應(yīng)用一般必須是"魯棒的",來自不同 用戶的程序應(yīng)保持隔離,限制對其它用戶的程序、對服務(wù)器或?qū)ο聦訕I(yè)務(wù)數(shù) 據(jù)(business data)產(chǎn)生破壞的潛在可能。
例如由于Java②語言不具有線程級隔離,所以通過用^¥&@語言實現(xiàn)動態(tài) 語言不能解決這些問題。對于進一步的細節(jié),請參見例如Almut Herzog和 Nahid Shahmehri的 "Problems Running Untrusted Services as Java Threads", CSES 2004 2nd International ^Vorkshop on Certification and Security in Inter-Organizational E-Services(2004)。
因而,需要提高在企業(yè)應(yīng)用環(huán)境中執(zhí)行動態(tài)程序的魯棒性。本發(fā)明通過 提供用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的系統(tǒng)和方法來解決這些和其它問 題。
發(fā)明內(nèi)容
本發(fā)明的實施例提高了動態(tài)編程語言的魯棒性和可伸縮性。在一個實施 例中,本發(fā)明包括一種計算機系統(tǒng),該計算機系統(tǒng)包括用于在結(jié)構(gòu)化環(huán)境中 執(zhí)行動態(tài)程序的軟件。所述軟件包括虛擬機軟件文件和安全橋軟件文件。所 述虛擬機軟件文件實現(xiàn)第一虛擬機以執(zhí)行第一程序。所述第一程序是以非動 態(tài)編程語言編寫的。所述第一虛擬機管理第一堆棧,并且所述第一程序使用 所述第一堆棧。所述安全橋軟件文件定義在所述第一程序和第二程序之間的 所允許的交互路徑。所述第二程序是以動態(tài)編程語言編寫的。所述第一程序 在所述第一虛擬機內(nèi)實現(xiàn)第二虛擬機,以利用所允許的交互路徑來執(zhí)行所述 第二程序。所述第一程序管理所述第二虛擬機中的第二堆棧,并且所述第二 程序使用所述第二堆棧。
在另 一實施例中,本發(fā)明包括一種用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的方法。
在另 一實施例中,'本發(fā)明包括記錄有用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序
的計算機程序的計算機可讀介質(zhì)。
下面的詳細描述和附圖提供了對本發(fā)明的本質(zhì)和優(yōu)點的更佳理解。
圖1是根據(jù)本發(fā)明實施例的在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的系統(tǒng)的框圖。
圖2是可以用于實現(xiàn)根據(jù)本發(fā)明實施例的計算機系統(tǒng)的三層結(jié)構(gòu)系統(tǒng)的框圖。
圖3是示出根據(jù)本發(fā)明實施例的多個虛擬機的框圖。 圖5是根據(jù)本發(fā)明實施例的方法的流程圖。
圖6是用于實現(xiàn)本發(fā)明實施例的示例性計算機系統(tǒng)和網(wǎng)絡(luò)的框圖。
具體實施例方式
在此描述用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的技術(shù)。在下面的描述中, 出于解釋的目的,為了提供對本發(fā)明的完全理解,闡述了多個示例和特定細 節(jié)。然而,對于本領(lǐng)域技術(shù)人員來說明顯的是,由權(quán)利要求書所限定的本發(fā) 明可以只包括這些示例中的 一些或所有特征、或包括這些示例中的 一些或所 有特征與下面描述的其它特征的結(jié)合,并且還可以包括在此所描述的特征和 概念的修改和等價物。
下面描述各種計算機可實現(xiàn)的方法和計算機程序。通過各種名稱來指代 它們,包括計算機過程、程序、模塊、軟件和軟件文件。當(dāng)討論這樣的計算 機程序時,它們可以被具體化在有形的記錄介質(zhì)上。
下面描述各種方法。盡管具體的方法可能具有以具體次序描述的方法步 驟,但是這樣的描述主要是為了描述清楚。根據(jù)各種實施例,可以按照意愿 變化次序并且可以并行地執(zhí)行方法步驟。當(dāng)具體的方法步驟需要在另一個方 法步驟之前或之后時,這樣的次序從上下文中將是明顯的或?qū)⒈惶貏e指出。
圖1是根據(jù)本發(fā)明實施例的在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的系統(tǒng)100的 框圖。系統(tǒng)100包括計算機系統(tǒng)102。(在隨后的部分中會提供計算機系統(tǒng)102的具體實施細節(jié)。)計算機系統(tǒng)102執(zhí)行實現(xiàn)虛擬機104的計算機程序。
虛擬機104實現(xiàn)非動態(tài)編程環(huán)境。在非動態(tài)編程環(huán)境中,可以執(zhí)行以相 應(yīng)的非動態(tài)編程語言編寫的計算機程序。作為示例示出了非動態(tài)程序106。 非動態(tài)編程語言可以是面向?qū)ο蟮恼Z言,在該情況下非動態(tài)程序106可以定 義虛擬機104所操作的對象。
非動態(tài)程序106與堆棧108接口。堆棧108充當(dāng)非動態(tài)程序106的調(diào)用 堆棧,在那里將參數(shù)傳遞到方法,從而該方法可以具有局部變量并且可以調(diào) 用其它方法(或該方法可以遞歸調(diào)用其本身)。
虛擬機104可以包括諸如垃圾收集器110的其它組件。 一旦不再需要由 非動態(tài)程序106創(chuàng)建的對象,垃圾收集器IIO就收回在計算機系統(tǒng)102中分 配給這些對象的存儲空間。
非動態(tài)程序106通常實現(xiàn)和控制用于執(zhí)行計算機程序的結(jié)構(gòu)化環(huán)境。作 為該結(jié)構(gòu)化環(huán)境的一部分,非動態(tài)程序106實現(xiàn)虛擬才幾124,以4丸行動態(tài)程— 序126。
虛擬才幾124實現(xiàn)動態(tài)編程環(huán)境。在該動態(tài)編程環(huán)境中,可以扭^亍以動態(tài) 編程語言編寫的計算機程序。作為示例示出了動態(tài)程序126。動態(tài)編程語言 可以是面向?qū)ο蟮恼Z言,在該情況下動態(tài)程序126可以定義虛擬機124所操 作的對象。
動態(tài)程序126與堆棧128接口 。堆棧128充當(dāng)動態(tài)程序126的調(diào)用堆棧, 在那里將參數(shù)傳遞到方法,從而方法可以具有局部變量并且可以調(diào)用其它方 法(或該方法可以遞歸調(diào)用其本身)。
動態(tài)程序126被隔離在虛擬機124內(nèi),并且通過各種所允許的交互^各徑 130與非動態(tài)程序106交互。下面會更充分地描述這些交互if各徑130。以此方 式,動態(tài)程序126與計算機系統(tǒng)102隔離,并且與可能屬于其他用戶的其它 動態(tài)程序隔離。
由于語言不同,堆棧108和128并不相同,因為在不同的語言中如^f可傳 遞參數(shù)存在差別。對此,我們的結(jié)論是你可以將兩種語言結(jié)合,因為每個方 法要么屬于這種語言,要么屬于那種語言,并且你將需要為不同語言分配不 同堆棧幀(stackframe),即關(guān)于調(diào)用堆棧的數(shù)據(jù)結(jié)構(gòu),其描述方法調(diào)用。根 據(jù)本發(fā)明的一個實施例,動態(tài)語言堆棧幀128僅僅是非動態(tài)語言的堆棧幀結(jié) 構(gòu)108的擴展。負載平衡器40執(zhí)行在計算機系統(tǒng)102的組件之間虛擬機104的負載平 衡。如參考圖2至圖3和圖6更充分地描述的,虛擬機104的組件可以分布 在多個物理設(shè)備上;負載平衡器140管理這種分布。
作為本發(fā)明實施例的特定實現(xiàn)方式的示例,ABAPTM編程語言的非動態(tài) 編程環(huán)境可以提供用于執(zhí)行以Ruby編寫的動態(tài)程序的魯棒環(huán)境。ABAPTNn# 言是由SAP AG創(chuàng)建的高級編程語言。它與最近引入的Java —起被定位為目 前用于對SAP的Web應(yīng)用服務(wù)器產(chǎn)品進行編程的語言,SAP的Web應(yīng)用服 務(wù)器產(chǎn)品是用于構(gòu)建企業(yè)應(yīng)用的SAP的NetWeaverTM平臺的一部分。
圖2是可以用于實現(xiàn)計算機系統(tǒng)102的三層架構(gòu)系統(tǒng)200的框圖。系統(tǒng) 200包括表示層202、應(yīng)用層204和數(shù)據(jù)庫層206。網(wǎng)絡(luò)208連4妄層內(nèi)和層之 間的設(shè)備。
表示層202 —般包括一個或多個客戶端計算機212??蛻舳擞嬎銠C212 一般為用戶提供圖形用戶接口 ,以與系統(tǒng)200的其它部分交互。
應(yīng)用層204 —般包括一個或多個應(yīng)用服務(wù)器214。應(yīng)用服務(wù)器214 —般 實現(xiàn)用于處理用戶和下層數(shù)據(jù)之間交互的業(yè)務(wù)邏輯(business logic )。不同的 應(yīng)用服務(wù)器214可以執(zhí)行不同的功能。例如, 一個應(yīng)用服務(wù)器214可以用于 構(gòu)造原型或開發(fā),而其它應(yīng)用服務(wù)器214可以用于商業(yè)智能生產(chǎn)活動(business intelligence production activity )。 一般而言,虛擬機104 (參見圖1 )駐留在應(yīng) 用層204中的一個或多個應(yīng)用服務(wù)器214上。
數(shù)據(jù)庫層206 —般包括一個或多個數(shù)據(jù)庫服務(wù)器216。數(shù)據(jù)庫服務(wù)器216 一般實現(xiàn)存儲和操作下層數(shù)據(jù)和相關(guān)元數(shù)據(jù)的數(shù)據(jù)庫管理系統(tǒng)。
盡管在每層中示出了許多單獨的設(shè)備,但是這樣主要是出于說明的目的, 為了示出可伸縮性。例如,在基本配置中可以使用單個數(shù)據(jù)庫服務(wù)器,而隨 著數(shù)據(jù)庫中數(shù)據(jù)量的增加,數(shù)據(jù)庫服務(wù)器216的數(shù)目也可以增加。作為另一 個示例,在基本配置中可以使用單個應(yīng)用服務(wù)器,而隨著業(yè)務(wù)邏輯處理量的 增加,應(yīng)用服務(wù)器214的數(shù)目也可以增加。負載平衡器140 (參見圖1)通過 將虛擬機104分布到應(yīng)用層中的應(yīng)用服務(wù)器214上,以及協(xié)調(diào)與數(shù)據(jù)庫層中 的數(shù)據(jù)庫服務(wù)器216的交互,來執(zhí)行負載平衡。以此方式,負載平衡器140 (參見圖1 )使得在結(jié)構(gòu)化編程環(huán)境(例如,虛擬機104)內(nèi)的動態(tài)編程環(huán)境 (例如,虛擬機124)能夠具有可伸縮性。
可以在各種操作系統(tǒng)中實現(xiàn)系統(tǒng)200,例如UNIX( AIX、 HP-UX、 Solaris、Linux )、 Microsoft Windows、 IBM Series i (以前的iSeries、 AS/400 )和IBM zSeries(以前的S/390 )??梢允褂酶鞣N類型的數(shù)據(jù)庫系統(tǒng),包括DB2、Informix、 MaxDB 、 Oracle和Microsoft SQL Server。 SAP Web應(yīng)用服務(wù)器是系統(tǒng)200的 實現(xiàn)方式的一個特定示例。
返回到圖1,根據(jù)本發(fā)明實施例的特定示例性實現(xiàn)方式,可以使用SAP Web應(yīng)用服務(wù)器來實現(xiàn)計算機系統(tǒng)102 (或系統(tǒng)200,參見圖2)。在這樣的 情況下,非動態(tài)編程語言是ABAPTM語言。SAP Web應(yīng)用服務(wù)器可以實現(xiàn)作 為ABApTM運行時(nmtime)環(huán)境的一部分的虛擬機104。非動態(tài)程序106包括 用于在ABAP中執(zhí)行動態(tài)程序的組件(在隨后部分中會更充分地討論)。作為 另一個特定的示例性實現(xiàn)方式,可以將Ruby用作動態(tài)編程語言。
圖3是示出了根據(jù)本發(fā)明實施例的多個虛擬機的框圖。虛擬機104 (參 見圖1 )執(zhí)行非動態(tài)程序106(參見圖1 ),其可以實現(xiàn)多個虛擬機124a、 124b、 124c、 124d和124e (統(tǒng)稱為"虛擬機124";也參見圖1)。虛擬機124的交 互經(jīng)由所允許的路徑130 (也參見圖1 )進行。虛擬機124a (例如)與每一個 其它的虛擬才幾124b、 124c、 124d和124e相互隔離。在虛擬才幾124中的動態(tài) 程序也彼此隔離。 一個用戶的動態(tài)程序不能影響另 一個用戶的動態(tài)程序。
圖4是非動態(tài)程序106和相關(guān)程序的各種組件的框圖。為了簡明,特別 參考了 Eclipse、 Ruby和ABAPTM。然而,應(yīng)當(dāng)理解,當(dāng)使用其它的建??蚣?、 動態(tài)語言和非動態(tài)語言時,可以應(yīng)用類似的和克念。
用戶可以與軟件框架402 (諸如Eclipse)交互來開發(fā)Ruby程序。軟件 框架402 —般提供用于編程的用戶接口 。軟件框架402可以提供標(biāo)準(zhǔn)的源控 制系統(tǒng)。軟件框架402可以包括調(diào)試器。軟件框架402與編譯器410交互。
作為示例,示出了 Ruby程序404。在Ruby中命令"puts"是用于打印 輸出的基本命令,所以該Ruby程序404的目的是輸出短語"hello world"(世 界你好)。
編譯器410將Ruby程序404編譯成中間程序412。根據(jù)本發(fā)明的實施例, 中間程序412的語言稱為Blue Ruby中間語言??梢砸訨ava⑧語言來編寫編譯 器410。編_澤器410與虛擬才幾124交互。
上面關(guān)于圖1 一般性地描述了虛擬機124。更具體地,Blue Ruby虛擬機 124是執(zhí)行中間程序412的堆棧/寄存器虛擬機??梢园凑找庠竵砀淖兲摂M機 124的參數(shù),從而可以對編譯器410進行相應(yīng)的調(diào)整,以使得中間程序412在改變后的虛擬機124上運行。
一般而言,語言虛擬機(VM)是逐個運行指令的引擎。根據(jù)本發(fā)明的 某些實施例,用于不同語言的VM可以被認為是加性的(additive),因為VM 僅僅由要運行的非結(jié)構(gòu)化的指令集組成。你可以向現(xiàn)有的VM添加第二語言 所需的指令,而不會發(fā)生沖突??梢詫⑦@些新指令自然地實現(xiàn)為通常已實現(xiàn) 的第 一語言的指令,或?qū)崿F(xiàn)為更基本的基礎(chǔ)操作(more atomic base operation) 的組合,所述基礎(chǔ)操作已經(jīng)存在以用于第一語言(在硬件處理器設(shè)計中,后 者有時被稱為微代碼)。
動態(tài)語言例如可以具有用于通過向?qū)ο髮嵗l(fā)送消息來動態(tài)調(diào)用方法的 指令,該指令是非動態(tài)語言不需要也不具有的。
作為示例,示出了中間程序412。由于虛擬機124是堆棧機,所以使用 命令"push"將短語"hello world"壓入到堆棧中。使用命令"call"來調(diào)用 函凄t "puts"。
加載器420在軟件框架402、虛擬機124和虛擬機104之間接口 。加載 器可以是非動態(tài)程序106的組件(參見圖1 )。
非動態(tài)程序106 (參見圖1 )與多個模塊接口 ,所述多個模塊用于執(zhí)行與 管理虛擬機124和運行中間程序412相關(guān)的各種函數(shù)。這些模塊的細節(jié)依賴 于所實現(xiàn)的具體的動態(tài)語言和具體的非動態(tài)語言的細節(jié)。對于使用Ruby和 ABAP的圖4的實施例來說,這些模塊是以ABAP編寫的。這些模塊是虛擬 機104的一部分,并且包括對象存儲和運行時庫模塊432、內(nèi)置(build-in)操作 模塊434和安全橋(secured bridge )模塊436。
對象存儲和運行時庫模塊432將動態(tài)語言中的對象映射為非動態(tài)語言中 的對象。 一般而言,對象存儲和運行時庫模塊432管理基本類層級(basic class hierarchy),并且處理類、方法和對象實例之間的關(guān)系。對象存儲和運行時庫 模塊432也可以管理對象的壽命,這可能涉及與垃圾收集器110 (參見圖1) 的交互。作為示例,Ruby具有對象、方法、塊、數(shù)組、模塊和類。ABAP具 有類。在圖4的實施例中,對象存儲和運行時庫模塊432將這些Ruby對象映 射為各種ABAP類(對象)。例如,Ruby對象"object"被映射為ABAP類 "RubyObject"。
通常,在編程語言中將數(shù)據(jù)類型組織為類型層級(typehierarchy)。兩種 語言具有兩個不同的類型層級,即,兩個獨立的樹。然而,根據(jù)本發(fā)明的某些實施例,可以將第二語言的樹放到第一語言的樹中,作為從第一語言的對
象根(objectroot)導(dǎo)出的子樹。然后,第二語言的對象根可以實現(xiàn)第二語言 的動態(tài)方法調(diào)用能力,從而從那里導(dǎo)出的動態(tài)語言的所有對象可以接收動態(tài) 方法調(diào)用。由于動態(tài)語言不知道如何調(diào)用第一語言的方法,所以第一語言的 對象根的方法對于動態(tài)語言來說不是直接可用的,因此不會破壞語言的語義。 另一方面,由于通過第一語言的垃圾收集器來管理從第一語言的對象根導(dǎo)出 的每個對象,所以這兩種語言共享共同的垃圾收集器、存儲器管理和物理數(shù) 據(jù)表示。
內(nèi)置操作模塊434將動態(tài)語言中的功能或操作實現(xiàn)為非動態(tài)語言中的功 能或操作(對象)。例如,Ruby具有"string"函數(shù)和"fixnum"函數(shù)。在圖 4的實施例中,內(nèi)置操作模塊434將這些Ruby函數(shù)實現(xiàn)為ABAP類(對象)。 例如,將Ruby函數(shù)"string"實現(xiàn)為ABAP類"Ruby String"。類Ruby String 包括的ABAP命令在ABAP環(huán)境中執(zhí)行與Ruby函數(shù)"string"相同的功能。
安全橋模塊436定義所允許的交互路徑130 (參見圖1)。這些交互路徑 幫助確保動態(tài)程序在非動態(tài)編程環(huán)境中保持魯棒。例如,ABAP包括命令 BADI、 RFC和BQL。允許Ruby程序調(diào)用這些命令,以執(zhí)行這些特別允許的 ABAP功能。
盡管所允許的交互路徑130與安全橋模塊436非常密切地相關(guān)聯(lián),但是 它們也可以被視為是作為非動態(tài)語言對象的動態(tài)語言對象的特定映射和實 現(xiàn)。也就是說,對象存儲和運行時庫模塊432還根據(jù)其從Ruby到ABAP的 對象映射來定義所允許的交互路徑130。內(nèi)置操作模塊434還根據(jù)其從Ruby 到ABAP的對象映射來定義所允許的交互i 各徑130。
這些所允許的交互路徑130幫助本發(fā)明的某些實施例來管理用于執(zhí)行動 態(tài)程序的魯棒的、結(jié)構(gòu)化的環(huán)境。虛擬機104實現(xiàn)不同用戶的處理之間的線 程級隔離。這樣, 一個用戶的動態(tài)程序不能影響下層數(shù)據(jù)或其它用戶的程序, 除非經(jīng)所允許的交互路徑130允許。
圖5是#^居本發(fā)明的實施例的方法500的流程圖。方法500在結(jié)構(gòu)化環(huán) 境中執(zhí)行動態(tài)程序。方法500可以在計算機系統(tǒng)上實現(xiàn),例如計算機系統(tǒng)102 (參見圖1 )或系統(tǒng)200 (參見圖2)。
在步驟510,實現(xiàn)第一虛擬機,以執(zhí)行第一程序。第一程序是以非動態(tài) 編程語言編寫的。例如,計算機系統(tǒng)102可以實現(xiàn)虛擬機104,以實現(xiàn)非動態(tài)程序106 (參見圖1 )。非動態(tài)編程語言可以是ABAP。
在步驟520,在第一虛擬機中管理第一堆棧。第一程序使用該第一堆棧。 例如,虛擬機104可以管理堆棧108 (參見圖1)。非動態(tài)程序108使用堆棧 108 (參見圖1)。
在步驟530,在第一程序和第二程序之間定義允許的交互路徑。第二程 序是以動態(tài)編程語言編寫的。例如,安全橋模塊436 (參見圖4)定義至少一 些所允許的交互路徑130 (參見圖1 )。
在步驟540,第一程序?qū)崿F(xiàn)第二虛擬機,以使用所允許的交互路徑在第 一虛擬機內(nèi)執(zhí)行第二程序。例如,非動態(tài)程序106實現(xiàn)虛擬機124(參見圖1 )。 虛擬機124使用所允許的交互路徑(參見圖1 )在虛擬機104內(nèi)執(zhí)行動態(tài)程 序126。
在步驟550,第一程序管理第二虛擬機中的第二堆棧。第二程序使用第 二堆棧。例如,非動態(tài)程序106管理虛擬機124中的堆棧128 (參見圖1 )。
圖6是用于實現(xiàn)本發(fā)明的實施例的示例性計算機系統(tǒng)和網(wǎng)絡(luò)1400的框 圖。計算機系統(tǒng)1410包括總線1405或用于傳送信息的其它通信機制;以 及與總線1405耦接以用于處理信息的處理器1401。計算才幾系統(tǒng)1410還包括 耦接到總線1405的存儲器1402,用于存儲要由處理器1401執(zhí)行的信息和指 令,例如,包括用于執(zhí)行上述技術(shù)的信息和指令,包括表示層202的功能(參 見圖2)。該存儲器還可以用于存儲在執(zhí)行要由處理器1401執(zhí)行的指令期間 的臨時變量或其它中間信息。該存儲器的可能實現(xiàn)方式可以是但不限于隨機 存取存儲器(RAM)、只讀存儲器(ROM)或其二者。還提供存儲設(shè)備1403 來存儲信息和指令。存儲設(shè)備的普通形式包括例如硬盤驅(qū)動、磁盤、光盤、 CD-ROM、 DVD、閃存、USB存儲卡或計算機可以讀取的任何其它介質(zhì)。存 儲設(shè)備1403可以包括例如用于執(zhí)行上述技術(shù)或具體化上述構(gòu)造的源代碼、二 進制代碼或軟件文件。
計算才幾系統(tǒng)1410可以經(jīng)由總線1405耦接到諸如陰極射線管(CRT)或 液晶顯示器(LCD)的顯示器1412,顯示器1412用于向計算機用戶顯示信 息。諸如鍵盤和/或鼠標(biāo)的輸入設(shè)備1411耦接到總線1405,用于將來自用戶 的信息和命令選擇傳送給處理器1401。這些組件的組合允許用戶與系統(tǒng)通信。 在一些系統(tǒng)中,可以將總線1405劃分成多個專用總線。
計算機系統(tǒng)1410也包括與總線1405耦接的網(wǎng)絡(luò)接口 1404。網(wǎng)絡(luò)接口1404可以在計算機系統(tǒng)1410和局域網(wǎng)1420之間提供雙向數(shù)據(jù)通信。網(wǎng)絡(luò)接 口 1404可以是數(shù)字用戶線(DSL)或調(diào)制解調(diào)器,以通過例如電話線來提供 數(shù)據(jù)通信連接。網(wǎng)絡(luò)接口的另一示例是局域網(wǎng)(LAN)卡,以向兼容的LAN 提供數(shù)據(jù)通信連接。無線鏈路是另一示例。在任何這樣的實現(xiàn)中,網(wǎng)絡(luò)接口 1404發(fā)送和接收電的、電磁的或光學(xué)的信號,所述信號攜帶表示各種類型的
乂+ A丄厶々丄'L丄F .、A
'! ^ & 戮卞徵f -
計算才幾系統(tǒng)1410可以通過網(wǎng)絡(luò)接口 1404向內(nèi)if關(guān)網(wǎng)或因特網(wǎng)1430發(fā)送和 接收信息,包括消息或其它接口動作。在因特網(wǎng)的示例中,軟件組件或服務(wù) 可以駐留在跨越網(wǎng)絡(luò)的多個不同的計算機系統(tǒng)1410或服務(wù)器1431、 M32、 1433、 1434和1435上。例如,可以在一個或多個服務(wù)器上實現(xiàn)虛擬才幾104 (參見圖1)。服務(wù)器1431可以通過因特網(wǎng)1430、局域網(wǎng)1420和網(wǎng)絡(luò)接口 1404將動作或消息從一個組件發(fā)送到計算機系統(tǒng)1410上的組件。 一般而言, 服務(wù)器1415或1431-1435可以用于實現(xiàn)應(yīng)用層204和數(shù)據(jù)庫層206 (參見圖 2 )。在這樣的情況下,負載平衡器140(參見圖1 )管理服務(wù)器1415或1431-1435 之間的負載平衡。
對于本發(fā)明的某些實施例, 一個特征是其中可以執(zhí)行動態(tài)程序的結(jié)構(gòu)化 環(huán)境。單獨地或者組合地對結(jié)構(gòu)化環(huán)境做出貢獻的本發(fā)明實施例的各方面包 括非動態(tài)編程環(huán)境、所允許的交互路徑、實現(xiàn)非動態(tài)編程環(huán)境的虛擬機、對 象存儲和運行時庫以及操作庫。
對于本發(fā)明的某些實施例,另一特征是線程級隔離。線程級隔離通過約 束除由所允許的交互路徑允許的動態(tài)程序之外的動態(tài)程序,從而有助于實現(xiàn) 魯棒的、結(jié)構(gòu)化的環(huán)境。
如上所述,Java 語言缺少線程級隔離。因而,Java 語言實現(xiàn)不能產(chǎn)生用 于執(zhí)行Ruby程序的魯棒的、結(jié)構(gòu)化的環(huán)境。此外,當(dāng)前不知道向^¥&@添加 線程級隔離的方式。
本發(fā)明的某些實施例的一個優(yōu)點在于它們提供了客戶端側(cè)集成的開發(fā) 環(huán)境。結(jié)構(gòu)化的企業(yè)應(yīng)用環(huán)境確保了對下層業(yè)務(wù)數(shù)據(jù)的魯棒訪問,并且用戶 可以自由地測試和開發(fā)用于訪問下層業(yè)務(wù)數(shù)據(jù)的動態(tài)程序,而不用擔(dān)心造成 破壞。
本發(fā)明的某些實施例的另 一個優(yōu)點在于它們提供了對軟件的平滑壽命周 期管理。例如,用戶可以在與產(chǎn)品系統(tǒng)相同的系統(tǒng)上、 -使用實際的下層業(yè)務(wù)數(shù)據(jù)、利用動態(tài)程序來執(zhí)行快速的測試和開發(fā)。于是,當(dāng)已充分測試動態(tài)程 序后,可以將它作為標(biāo)準(zhǔn)版本的一部分在產(chǎn)品系統(tǒng)上發(fā)布,而不必再執(zhí)行代
碼接口 (porting)或其它過程。
上述描述示出了本發(fā)明的各種實施例以及如何實現(xiàn)本發(fā)明的各方面的示 例。本發(fā)明的上述示例和實施例不應(yīng)被認為僅僅是實施例,而是意圖示出如 下面的權(quán)利要求中所限定的本發(fā)明的靈活性和優(yōu)點。基于上述公開和下面的 權(quán)利要求,在不背離權(quán)利要求定義的本發(fā)明的精神和范圍的情況下,其它布 置、實施例、實現(xiàn)方式和等價物對于本領(lǐng)域技術(shù)人員將是明顯的并且可以被 采用。
權(quán)利要求
1. 一種計算機系統(tǒng),包括用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的軟件,所述軟件包括虛擬機軟件文件,其實現(xiàn)第一虛擬機,以執(zhí)行第一程序,其中所述第一程序是以非動態(tài)編程語言編寫的,其中所述第一虛擬機管理第一堆棧,并且其中所述第一程序使用所述第一堆棧;以及安全橋軟件文件,其定義在所述第一程序和第二程序之間的多個所允許的交互路徑,其中所述第二程序是以動態(tài)編程語言編寫的,其中,所述第一程序在所述第一虛擬機內(nèi)實現(xiàn)第二虛擬機,以利用多個所允許的交互路徑來執(zhí)行所述第二程序,其中所述第一程序管理所述第二虛擬機中的第二堆棧,并且其中所述第二程序使用所述第二堆棧。
2. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述軟件還包括 對象存儲和運行時庫軟件文件,其管理多個對象,其中所述多個對象與所述第二程序相關(guān),其中所述第 一程序使用所述對象存儲和運行時庫軟件文 件來在所述第 一虛擬機中執(zhí)行所述第二虛擬機內(nèi)的所述第二程序。
3. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述軟件還包括 對象存儲和運行時庫軟件文件,其將所迷動態(tài)編程語言的第一組多個對象映射到所述非動態(tài)編程語言的第二組多個對象,其中所述第二虛擬機使用 所述第二組多個對象在所述第 一虛擬機中執(zhí)行所述第二程序。
4. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述軟件還包括 操作庫軟件文件,其實現(xiàn)與所述第二程序相關(guān)的多個操作,其中所述第一程序使用所述操作庫軟件文件,以在所述第一虛擬機中使用所述第二虛擬 機將動態(tài)編程語言中的第 一操作作為非動態(tài)編程語言中的第二操作來執(zhí)行。
5. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述軟件還包括 編譯器軟件文件,其將所述第二程序編譯為經(jīng)編譯的第二程序,其中所述第一程序在所述第一虛擬機中使用所述第二虛擬機來執(zhí)行所述經(jīng)編譯的第 二程序。
6. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中 所述第二虛擬機是多個第二虛擬機中的一個;所述第二程序是以所述動態(tài)編程語言編寫的多個第二程序中的 一 個;所述第二堆棧是多個第二堆棧中的 一個;所述第一程序在所述多個第二虛擬機中的相應(yīng)的一個中管理所述多個第二堆棧中的每一個;所述多個第二程序中各自使用所述多個第二堆棧中的相應(yīng)的一個;并且所述第一程序在所述第一虛擬機中實現(xiàn)所述多個第二虛擬機,以使用多 個所允許的交互路徑執(zhí)行所述多個第二程序,從而使所述多個第二程序中的 每一個第二程序與所述多個第二程序中其它的每一個第二程序彼此隔離。
7. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中所述安全橋軟件文件定義在所述第一程序和第三程序之間的多個所允許 的交互路徑,其中所述第三程序是以動態(tài)編程語言編寫的;并且所述第一程序在所述第一虛擬機中實現(xiàn)第三虛擬機,以使用所述多個所 允許的交互路徑來執(zhí)行所述第三程序,從而使所述第三程序與所述第二程序 隔離,其中所述第一程序管理所述第三虛擬機中的第三堆棧,并且其中所述 第三程序使用所述第三堆棧。
8. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述第二程序是以所述動 態(tài)編程語言編寫的多個第二程序中的一個,還包括多個應(yīng)用服務(wù)器,其經(jīng)由網(wǎng)絡(luò)連接到多個客戶端設(shè)備和多個數(shù)據(jù)庫服務(wù) 器,其中通過增加所述多個應(yīng)用服務(wù)器來提供執(zhí)行所述多個第二程序的可伸 縮性。
9. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述第二虛擬機通過將指 令從所述動態(tài)編程語言翻譯為所述非動態(tài)編程語言來執(zhí)行所述第二程序。
10. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中所述第一程序定義第一組 多個對象,其中所述第二程序定義第二組多個對象,其中所述第一虛擬機對 所述第 一組多個對象進行操作,其中所述第二虛擬機對所述第二組多個對象 進行才乘作,其中,所述軟件還包括垃圾收集器軟件文件, 一旦不再需要所述第一組多個對象和所述第二組 多個對象,則該垃圾收集器軟件文件收回在所述計算機系統(tǒng)中分配給所述第 一組多個對象和所述第二組多個對象的存^f渚空間。
11. 根據(jù)權(quán)利要求1所述的計算機系統(tǒng),其中,所述第二程序是以所述 動態(tài)編程語言編寫的多個第二程序中的一個,還包括多個應(yīng)用服務(wù)器,其經(jīng)由網(wǎng)絡(luò)連接到多個客戶端設(shè)備和多個數(shù)據(jù)庫服務(wù)器;以及負栽平衡器軟件文件,其執(zhí)行在多個應(yīng)用服務(wù)器上所述第一虛擬機和所 述多個第二程序的負載平衡。
12. —種在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的計算機實現(xiàn)的方法,包括步驟 實現(xiàn)第一虛擬機,以執(zhí)行第一程序,其中所述第一程序是以非動態(tài)編程語言編寫的;管理所述第一虛擬機中的第一堆棧,其中所述第一程序使用所述第一堆棧;定義在所述第一程序和第二程序之間的多個所允許的交互路徑,其中所述第二程序是以動態(tài)編程語言編寫的;使用所述第 一程序?qū)崿F(xiàn)第二虛擬機,以使用所述多個所允許的交互路徑在所述第一虛擬機中執(zhí)行所述第二程序;以及使用所述第一程序管理所述第二虛擬機中的第二堆棧,其中所述第二程 序使用所述第二堆棧。
13. 根據(jù)權(quán)利要求12所述的方法,還包括將所述動態(tài)編程語言的第一組多個對象映射到所述非動態(tài)編程語言的第 二組多個對象,其中所述第二虛擬機使用所述第二組多個對象在所述第一虛 擬機中執(zhí)行所述第二程序。
14. 根據(jù)權(quán)利要求12所述的方法,還包括實現(xiàn)與所述第二程序相關(guān)的多個#:作,其中所述第 一程序^f吏用所述多個 操作,以在所述第一虛擬機中使用所述第二虛擬機將動態(tài)編程語言的第一操 作作為非動態(tài)編程語言的第二操作來執(zhí)行。
15. 根據(jù)權(quán)利要求12所述的方法,還包括將所述第二程序編譯為經(jīng)編譯的第二程序,其中所述第一程序在所述第 一虛擬機中使用所述第二虛擬機來執(zhí)行所述經(jīng)編譯的第二程序。
16. 根據(jù)權(quán)利要求12所述的方法,還包括定義所述第一程序和第三程序之間的多個所允許的交互路徑,其中所述 第三程序是以動態(tài)編程語言編寫的;并且使用所述第一程序在所述第一虛擬機中實現(xiàn)第三虛擬機,以使用所述多 個所允許的交互路徑來執(zhí)行所述第三程序,從而使所述第三程序與所述第二 程序隔離,其中所述第一程序管理所述第三虛擬機中的第三堆棧,并且其中所述第三程序使用所述第三堆棧。
17. 根據(jù)權(quán)利要求12所述的方法,還包括將指令從所述動態(tài)編程語言翻譯為所述非動態(tài)編程語言,以便所述第二 虛擬機執(zhí)行所述第二程序。
18. 根據(jù)權(quán)利要求12所述的方法,其中所述第二程序是以所述動態(tài)編程 語言編寫的多個第二程序中的一個,并且其中多個應(yīng)用服務(wù)器經(jīng)由網(wǎng)絡(luò)連接 到多個客戶端設(shè)備和多個數(shù)據(jù)庫服務(wù)器,還包括執(zhí)行在所述多個應(yīng)用服務(wù)器上所述第一虛擬機和所述多個第二程序的負 載平ff。
19. 一種計算機可讀介質(zhì),其上記錄有用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程 序的軟件,所述軟件包括虛擬機軟件文件,其實現(xiàn)第一虛擬機,以執(zhí)行第一程序,其中所述第一 程序是以非動態(tài)編程語言編寫的,其中所述第一虛擬機管理第一堆棧,并且 其中所述第一程序使用所述第一堆棧;以及安全橋軟件文件,其定義所述第一程序和第二程序之間的所允許的交互 路徑,其中所述第二程序是以動態(tài)編程語言編寫的,其中,所述第一程序在所述第一虛擬機內(nèi)實現(xiàn)第二虛擬機,以利用所述 多個所允許的交互路徑來執(zhí)行所述第二程序,其中所述第 一程序管理所述第 二虛擬4幾中的第二堆棧,并且所述第二程序J吏用所述第二堆棧。
20. 根據(jù)權(quán)利要求19所述的計算機可讀介質(zhì),其中,所述第二程序是以 所述動態(tài)編程語言編寫的多個第二程序中的一個,并且其中多個應(yīng)用服務(wù)器 經(jīng)由網(wǎng)絡(luò)連接到多個客戶端設(shè)備和多個數(shù)據(jù)庫服務(wù)器,還包括負載平衡器軟件文件,其執(zhí)行在所述多個應(yīng)用服務(wù)器上所述第一虛擬機 和所述多個第二程序的負載平衡。
全文摘要
本發(fā)明提供一種包括用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的軟件的計算機系統(tǒng)、一種在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的計算機實現(xiàn)的方法以及一種記錄有用于在結(jié)構(gòu)化環(huán)境中執(zhí)行動態(tài)程序的軟件對計算機可讀介質(zhì)。在一個實施例中,本發(fā)明包括執(zhí)行非動態(tài)程序的第一虛擬機,其實現(xiàn)執(zhí)行動態(tài)程序的第二虛擬機。所述動態(tài)程序經(jīng)由各種所允許的交互路徑在非動態(tài)編程語言的結(jié)構(gòu)化環(huán)境中運行。以這種方式,可以在魯棒的企業(yè)應(yīng)用環(huán)境中執(zhí)行動態(tài)程序。
文檔編號G06F9/44GK101430644SQ200810174818
公開日2009年5月13日 申請日期2008年11月5日 優(yōu)先權(quán)日2007年11月5日
發(fā)明者雷納·布倫德爾, 默里·斯波克 申請人:Sap股份公司