專利名稱:在普適計算環(huán)境中重構(gòu)應(yīng)用程序的方法及系統(tǒng)的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及一種用于重構(gòu)應(yīng)用程序的方法,更具體地講,本發(fā)明涉及一種用于響應(yīng)于普適計算環(huán)境的上下文改變來透明地重構(gòu)應(yīng)用程序的方法。
背景技術(shù):
由于網(wǎng)絡(luò)和計算裝置的普遍存在,在不久的將來,普適計算環(huán)境將變成現(xiàn)實。普適計算的一個目標(biāo)是一種透明地支持用戶的系統(tǒng),從而雖然上下文由于各種原因發(fā)生改變,但是用戶仍可以以最小花費繼續(xù)執(zhí)行他的/她的當(dāng)前任務(wù)。
為了支持這種透明性,當(dāng)用戶運(yùn)動到一個新環(huán)境中時,普適計算系統(tǒng)必須預(yù)知用戶的需求并且使用可用服務(wù)來重構(gòu)應(yīng)用程序。
傳統(tǒng)的系統(tǒng)支持普適環(huán)境中的動態(tài)應(yīng)用程序重構(gòu)。具有代表性的系統(tǒng)為Gaia和Aura。這些傳統(tǒng)的系統(tǒng)的目的在于根據(jù)應(yīng)用程序和任務(wù)的轉(zhuǎn)移來支持應(yīng)用程序重構(gòu)。這些系統(tǒng)的主要思想是從環(huán)境中抽象地和獨立地描述應(yīng)用程序,因此使得該應(yīng)用程序能夠適合于任何其它不同的環(huán)境。
Gaia系統(tǒng)處理包括各種異質(zhì)性的裝置的活動空間之間的應(yīng)用程序轉(zhuǎn)移。在該活動空間中的應(yīng)用程序被構(gòu)造為分布組件的結(jié)合,并且被描述為獨立于該活動空間的應(yīng)用程序分類描述(AGD)。該應(yīng)用程序被初始化并且由將AGD描述為在每個環(huán)境中可使用的資源的應(yīng)用程序定制描述(ACD)執(zhí)行。Gaia系統(tǒng)嘗試解決各種環(huán)境的異質(zhì)性的問題,但是最終集中在解決裝置的異質(zhì)性而不是服務(wù)的異質(zhì)性。換句話說,Gaia系統(tǒng)假設(shè)在所有的活動空間中,用作應(yīng)用程序的組件的服務(wù)都是可用的。
但是,這種假設(shè)不適用于普適計算環(huán)境。即,存在對這樣的系統(tǒng)的需求,即使在新環(huán)境中不可使用相同的服務(wù),該系統(tǒng)也使得應(yīng)用程序能被動態(tài)地適應(yīng),并且該系統(tǒng)解決服務(wù)的異質(zhì)性的問題。但是Gaia系統(tǒng)并不考慮服務(wù)的異質(zhì)性。
Aura系統(tǒng)支持任務(wù)轉(zhuǎn)移。這里,任務(wù)指各種抽象服務(wù)的聯(lián)合形成的單元,并且獨立于環(huán)境被描述。服務(wù)在每個環(huán)境中實現(xiàn)并且支持任務(wù)。例如,任務(wù)‘寫編輯’由Windows環(huán)境中的MSWord或者Notepad執(zhí)行,并且被Unix環(huán)境或者Linux環(huán)境中的Vi或者Emace執(zhí)行。Aura系統(tǒng)嘗試解決服務(wù)點和操作系統(tǒng)的同質(zhì)性問題。但是,Aura系統(tǒng)忽略服務(wù)之間的功能相似性或者功能一致性問題。例如,Notepad不提供與MSWord的功能一樣的功能。另外,Aura系統(tǒng)的缺點在于用戶必須單獨地并且自適應(yīng)地使用兩個不具有功能一致性的服務(wù),并且也不保證可替代的服務(wù)之間的功能一致性。
Gaia和Aura系統(tǒng)中使用的方法存在的問題是當(dāng)用戶運(yùn)動到新環(huán)境中時,用戶不能找到相同的服務(wù)。尤其是,當(dāng)用戶運(yùn)動到新環(huán)境時,用戶只想尋找與現(xiàn)有服務(wù)相同的服務(wù)或者相似的服務(wù)。但是,如果沒有相同的服務(wù),但是用戶想要尋找相同的服務(wù),這些系統(tǒng)不能重構(gòu)應(yīng)用程序。這意味著用戶直接選擇服務(wù)來重構(gòu)應(yīng)用程序。如果用相似的服務(wù)替代現(xiàn)有服務(wù),則這些系統(tǒng)不能保證替代的服務(wù)提供用戶期望的相同的功能。
同時,基于組件的軟件工程(CBSE)領(lǐng)域已經(jīng)提出各種方法來支持不同環(huán)境中的柔性服務(wù)自適應(yīng)。通過分析和比較服務(wù)的意義,CBSE領(lǐng)域使用尋找可替代的服務(wù)的方法以重構(gòu)應(yīng)用程序組件。這種方法適于寬范圍領(lǐng)域并且非常靈活,但是需要服務(wù)提供者明確描述服務(wù)的操作?!宇愋汀糜谔娲F(xiàn)有組件。‘行為子類型’的概念描述了服務(wù)的操作,因此可以在語義上替代‘子類型’和‘父類型’的操作。
當(dāng)尋找可替代的服務(wù)時,傳統(tǒng)的基于‘行為子類型’的方法沒有在服務(wù)之間的層次關(guān)系上設(shè)置限制。即,即使沒有所需服務(wù)的子類型,傳統(tǒng)方法也尋找具有相似操作的服務(wù)。該方法也需要服務(wù)提供者明確描述服務(wù)的操作。另外,仍然遺留這樣的問題替代的服務(wù)相對于現(xiàn)有服務(wù)的完全功能一致性得不到保證。
發(fā)明內(nèi)容
本發(fā)明的闡述性、非限制性的實施例可解決上述缺點和其他沒有描述的缺點。另外,本發(fā)明沒有被要求克服上述缺點,并且本發(fā)明的闡述性、非限制性的實施例可能不能克服上述所有的問題。
本發(fā)明提供一種根據(jù)在普適計算環(huán)境中的上下文改變而透明地重構(gòu)應(yīng)用程序的方法及系統(tǒng)。
根據(jù)本發(fā)明的一方面,提供了一種用于在普適計算環(huán)境中重構(gòu)應(yīng)用程序的方法,包括根據(jù)上下文的改變,接收對預(yù)定應(yīng)用程序重構(gòu)的重構(gòu)請求;響應(yīng)于上下文的改變,關(guān)于構(gòu)成預(yù)定應(yīng)用程序的至少一個服務(wù)組件中的每個來搜索服務(wù);基于搜索到的服務(wù)重構(gòu)預(yù)定應(yīng)用程序。
優(yōu)選地但不是必要地,服務(wù)搜索操作包括搜索提供與服務(wù)組件的操作相同的操作的服務(wù);如果沒有提供與服務(wù)組件的操作相同的操作的服務(wù),則搜索可替代的服務(wù)。
優(yōu)選地但不是必要地,可替代的服務(wù)基于“行為子類型”概念,并且該可替代的服務(wù)根據(jù)用子類型替代的方法、用父類型替代的方法和用父類型強(qiáng)制轉(zhuǎn)換的方法中的一個被確定。
優(yōu)選地但不是必要地,上下文的改變的出現(xiàn)是由于用戶運(yùn)動到新環(huán)境中、裝置的動態(tài)出現(xiàn)以及服務(wù)的動態(tài)出現(xiàn)之一而引起。
根據(jù)本發(fā)明的另一方面,提供了一種應(yīng)用程序重構(gòu)系統(tǒng),其根據(jù)普適計算環(huán)境中上下文的改變而重構(gòu)應(yīng)用程序,該系統(tǒng)包括服務(wù)容器,存儲關(guān)于構(gòu)成預(yù)定應(yīng)用程序的至少一個服務(wù)組件的信息;替代策略確定部分,響應(yīng)于上下文的改變而關(guān)于所述服務(wù)組件搜索服務(wù)信息;映射表,存儲服務(wù)組件和相應(yīng)的服務(wù)信息之間的映射關(guān)系。
優(yōu)選地但不是必要地,該應(yīng)用程序重構(gòu)系統(tǒng)還包括用于存儲搜索服務(wù)信息的必要的信息的類型倉庫。
優(yōu)選地但不是必要地,該應(yīng)用程序重構(gòu)系統(tǒng)還包括事件轉(zhuǎn)換模塊,其用于根據(jù)存儲在映射表中的映射信息處理執(zhí)行預(yù)定應(yīng)用程序的請求。
優(yōu)選地但不是必要地,所述替代策略確定部分搜索提供與服務(wù)組件的操作相同的操作的服務(wù),如果沒有提供與服務(wù)組件的操作相同的操作的服務(wù),則搜索可替代的服務(wù)。
優(yōu)選地但不是必要地,所述可替代的服務(wù)基于‘行為子類型’概念,并且該可替代的服務(wù)根據(jù)用子類型替代的方法、用父類型替代的方法和用父類型強(qiáng)制轉(zhuǎn)換的方法中的一個被確定。
優(yōu)選地但不是必要地,上下文的改變的出現(xiàn)是由于用戶運(yùn)動到新環(huán)境中、裝置的動態(tài)出現(xiàn)以及服務(wù)的動態(tài)出現(xiàn)之一而引起。
通過以下參照附圖對示例性實施例進(jìn)行的詳細(xì)描述,本發(fā)明的上述和/或其他方面將會變得清楚和更加容易理解,其中圖1是表示根據(jù)本發(fā)明示例性實施例的應(yīng)用程序重構(gòu)系統(tǒng)的方框圖;圖2是表示用于解釋根據(jù)本發(fā)明示例性實施例重構(gòu)應(yīng)用程序的方法的消息轉(zhuǎn)移處理的流程圖;圖3是在根據(jù)本發(fā)明的示例性實施例的應(yīng)用程序重構(gòu)系統(tǒng)中使用的全部類圖;圖4是圖1的事件轉(zhuǎn)換模塊的類圖;圖5是顯示圖1的事件轉(zhuǎn)換部分模塊的消息轉(zhuǎn)移處理的流程圖;圖6是圖1的類型倉庫的類圖;圖7和圖8是表示通過示例的方式將根據(jù)本發(fā)明示例性實施例的用于重構(gòu)應(yīng)用程序的方法應(yīng)用于智能電子燈的圖。
具體實施例方式
在下文中,將參照附圖更加詳細(xì)地描述本發(fā)明的示例性實施例。
根據(jù)用于重構(gòu)應(yīng)用程序的傳統(tǒng)方法,如果在新環(huán)境中沒有與請求的服務(wù)相同的服務(wù),則用戶尋找相似服務(wù)或者直接選擇應(yīng)用程序的服務(wù)。根據(jù)本發(fā)明示例性實施例的用于重構(gòu)應(yīng)用程序的方法使用柔性服務(wù)重構(gòu)技術(shù),該技術(shù)采用‘行為子類型’概念,為替代的服務(wù)被選擇的情況做準(zhǔn)備來保證功能一致性。如果新上下文不具有與現(xiàn)有服務(wù)相同的服務(wù),則‘行為子類型’使得可以用子類型或者父類型來替代現(xiàn)有服務(wù)。
從而,應(yīng)用程序靈活地連接到在該環(huán)境中可使用的相同類型的服務(wù),并且也接收功能一致性的保證。為了放松約束,服務(wù)提供者被允許在設(shè)計新服務(wù)的過程中使用‘行為子類型’的強(qiáng)概念或者弱概念。這意味著新添加到子類型的功能可否被父類型操作的組合替代。
如果在新環(huán)境中不存在請求的服務(wù),則提出適應(yīng)服務(wù)的以下三種方法。第一種方法是用子類型替代請求的服務(wù)。子類型提供與所有的父類型操作對應(yīng)的操作,從而可提供請求的服務(wù)的所有操作。換句話說,所有的子類型都具有與父類型的功能一致性,這在以下被稱作‘子類型替代’。
第二種方法是用父類型替代請求的服務(wù)。當(dāng)在新環(huán)境中不存在請求的服務(wù)的子類型時使用第二種方法。第二種方法被分為兩個進(jìn)一步的方法。一個進(jìn)一步的方法是用父類型替代請求的服務(wù)。子類型的附加操作被父類型的操作的組合替代。這在下文中被稱作‘父類型替代’。另一個進(jìn)一步的方法是強(qiáng)制子類型的附加操作轉(zhuǎn)變?yōu)楦割愋偷奶囟ú僮?。?dāng)服務(wù)提供者將新的操作添加到子類型但是該新的操作不能用父類型操作的組合替代時,該服務(wù)提供者強(qiáng)制該組合轉(zhuǎn)變?yōu)楦割愋偷牧硪徊僮鱽斫邮展δ芤恢滦缘谋WC。這被稱作‘父類型強(qiáng)制轉(zhuǎn)變’。由服務(wù)提供者描述關(guān)于用父類型操作來替代子類型附加操作還是強(qiáng)制子類型附加操作轉(zhuǎn)變?yōu)楦割愋筒僮鞯男畔ⅰ?br>
即,當(dāng)設(shè)計新服務(wù)時,服務(wù)提供者必須描述這種信息。本發(fā)明提供用于描述這種信息的方法,從而可將請求的服務(wù)轉(zhuǎn)換成父類型。但是,是否將請求的服務(wù)轉(zhuǎn)換成父類型的是由應(yīng)用程序的策略確定的,這是因為雖然用戶并不想強(qiáng)制將請求的服務(wù)轉(zhuǎn)變成父類型的另一操作,但是請求的服務(wù)可能被強(qiáng)制轉(zhuǎn)變成父類型的另一操作。另外,如果請求的服務(wù)被轉(zhuǎn)換成另一種服務(wù),則必須提供關(guān)于替代的子類型或者父類型或者強(qiáng)制轉(zhuǎn)變的父類型的操作的映射信息。這是為了透明地將請求的信息轉(zhuǎn)換成三種類型,即,‘子類型替換’、‘父類型替換’和‘父類型強(qiáng)制轉(zhuǎn)變’。
如果基于現(xiàn)有服務(wù)設(shè)計新服務(wù),則必須將以下信息添加到由服務(wù)提供者提供的服務(wù)描述中以支持透明服務(wù)自適應(yīng)性。第一信息描述類型之間的關(guān)系,即,描述哪個服務(wù)是父類型。第一信息對于制造類型層次樹是必要的。第二信息描述替代要求的服務(wù)的操作的服務(wù)的操作。該信息關(guān)于當(dāng)要求的服務(wù)被轉(zhuǎn)換為父類型時,附加操作是用父類型操作替代還是強(qiáng)制轉(zhuǎn)變成父類型操作。第三信息描述服務(wù)的操作的每個的前續(xù)條件和后續(xù)條件,并且這幫助服務(wù)提供者在設(shè)計新環(huán)境期間描述可替代的服務(wù)。上述三種類型的信息與服務(wù)的功能描述一起在服務(wù)描述中被描述,并且被存儲在類型倉庫150中,將在之后描述類型倉庫150。
在下文中,假設(shè)關(guān)于應(yīng)用程序組件的信息,即,關(guān)于哪些分布的服務(wù)組件構(gòu)成應(yīng)用程序以及關(guān)于服務(wù)組件怎樣互相交互的信息,被發(fā)送到用戶運(yùn)動到的新環(huán)境中。組件間的交互表現(xiàn)為例如公布/訂閱的基于消息的系統(tǒng),這是因為基于消息的系統(tǒng)適于普適環(huán)境。
圖1是表示根據(jù)本發(fā)明的示例性實施例的應(yīng)用程序重構(gòu)系統(tǒng)的方框圖。參照圖1,應(yīng)用程序重構(gòu)系統(tǒng)包括服務(wù)自適應(yīng)管理器器部分100和類型倉庫150。服務(wù)自適應(yīng)管理器部分100包括服務(wù)容器110、替代策略確定部分120、映射表130和事件轉(zhuǎn)換模塊140。服務(wù)自適應(yīng)管理器部分100從應(yīng)用程序框架90接收對應(yīng)用程序重構(gòu)的請求,并且處理該請求。替代策略確定部分120包括取回部分122。
服務(wù)容器110按照直接指示組件的信息的形式而不是按照其自身的對象的形式存儲關(guān)于應(yīng)用程序的信息,即,關(guān)于哪些服務(wù)組件構(gòu)成應(yīng)用程序的信息。針對組件的身份,假設(shè)應(yīng)用程序和它的每個服務(wù)都具有唯一的標(biāo)識符(ID)。服務(wù)容器110在應(yīng)用程序重構(gòu)之后存儲關(guān)于替代的服務(wù)的標(biāo)識符信息,從而在執(zhí)行服務(wù)期間,系統(tǒng)可透明地改變用戶請求的消息。
替代策略確定部分120執(zhí)行行為子類型的概念。更具體地講,替代策略確定部分120使用從服務(wù)容器110接收的關(guān)于應(yīng)用程序的信息,在用戶運(yùn)動到的當(dāng)前環(huán)境中尋找該應(yīng)用程序的服務(wù)組件。針對此,取回部分122從類型倉庫150中提取關(guān)于可替代的服務(wù)的信息。這里,假設(shè)存在能夠確定在每個環(huán)境中是否存在本地服務(wù)的服務(wù)發(fā)現(xiàn)部分80。
替代策略確定部分120執(zhí)行三步處理。第一步處理是服務(wù)發(fā)現(xiàn)部分80確定在用戶運(yùn)動到的當(dāng)前環(huán)境中是否存在與所請求的服務(wù)相同的服務(wù)。如果沒有相同的服務(wù),則取回部分122從類型倉庫150中提取關(guān)于子類型或者父類型的信息,并且確定在當(dāng)前環(huán)境中是否存在請求的服務(wù)或者其是否是可替代的。系統(tǒng)首先嘗試著用子類型替代請求的服務(wù),然后嘗試用父類型替代請求的服務(wù)。最終,關(guān)于替代的服務(wù)的信息被存儲在映射表130中。此時,為了明確地描述請求的服務(wù)的操作,考慮使用相同的功能名稱但是使用不同的參數(shù)的‘操作重載’。如果通過上述三步處理不能找到可替代的服務(wù),則系統(tǒng)嘗試著尋找另一個子類型來替代請求的服務(wù)或者再次嘗試用父類型替代請求的服務(wù)。如果沒有可替代的服務(wù),則系統(tǒng)無法重構(gòu)應(yīng)用程序。
映射表130存儲現(xiàn)有服務(wù)和替代的服務(wù)之間的映射信息,作為執(zhí)行替代策略確定部分120的結(jié)果。存儲的信息指示哪個服務(wù)用于替代請求的服務(wù)或者哪個操作用于替代請求的服務(wù)或者強(qiáng)制變成請求的服務(wù)。前者定義為‘服務(wù)映射信息’,后者定位為‘操作映射信息’。如果請求的服務(wù)被子類型替代,則只有服務(wù)映射信息被存儲,這是因為子類型提供父類型的所有操作。即,如果請求的服務(wù)被子類型替代,則子類型可響應(yīng)于用戶的任何請求,從而其僅僅被要求改變消息的目的地。但是,如果請求的服務(wù)用父類型替代,則必須不僅存儲服務(wù)映射信息還必須存儲操作映射信息,這是因為父類型并不提供子類型的附加操作。因此,如果請求的服務(wù)被父類型替代,則映射表130必須存儲關(guān)于子類型的附加操作映射到父類型的哪個操作的信息。
如上所述,根據(jù)請求的服務(wù)被轉(zhuǎn)換成子類型還是父類型以及要被改變的信息是否不同,不同的信息被存儲在映射表130中。因此,為了取回操作的效率和系統(tǒng)管理的效率,設(shè)置兩個倉庫分別存儲不同的信息。映射信息在事件轉(zhuǎn)換模塊140中被使用。
事件轉(zhuǎn)換模塊140在執(zhí)行期間處理對顯現(xiàn)為消息的各個組件的服務(wù)操作的請求。如果某個消息請求對于被子類型或者父類型所替代的服務(wù)的操作,則事件轉(zhuǎn)換模塊140從映射表130中讀取信息并且透明地將該信息轉(zhuǎn)換成消息。將信息轉(zhuǎn)換為消息的不同的方法以逐例為基礎(chǔ)被使用。如果請求的服務(wù)沒有被替代,則事件轉(zhuǎn)換模塊140簡單地將消息發(fā)送到目的地。即,事件轉(zhuǎn)換模塊140透明地處理來自用戶的請求,而不管請求的服務(wù)是否被替代。
類型倉庫150提取服務(wù)信息。類型倉庫150不僅提取關(guān)于請求的服務(wù)的類型的信息還提取關(guān)于子類型或者父類型的信息。服務(wù)的信息是關(guān)于服務(wù)提供的所有功能方面以及關(guān)于操作的行為。為了表示信息,類型倉庫150創(chuàng)建服務(wù)層次樹。當(dāng)現(xiàn)有服務(wù)被子類型或者父類型替代時,服務(wù)層次樹允許系統(tǒng)創(chuàng)建映射信息。
由類型倉庫150管理的服務(wù)層次樹存儲服務(wù)之間的關(guān)系還存儲關(guān)于服務(wù)的信息。這里,服務(wù)層次樹并不意味著裝置的層次樹,這是因為單個裝置可提供多種服務(wù)。因此,服務(wù)具有它們各自的層次樹。當(dāng)由服務(wù)提供者在類型倉庫150中注冊新服務(wù)時,基于對服務(wù)的分析而創(chuàng)建服務(wù)層次樹。
存在用于支持根據(jù)本發(fā)明示例性實施例的應(yīng)用程序重構(gòu)方法的附加請求。首先,系統(tǒng)必須描述哪個服務(wù)是父類型的。其次,為了給請求的服務(wù)被父類型替代的情況做準(zhǔn)備,系統(tǒng)必須描述父類型的哪個操作替代服務(wù)的附加操作或者被強(qiáng)制變成服務(wù)的附加操作。最后,系統(tǒng)必須描述前續(xù)條件和后續(xù)條件以在設(shè)計新服務(wù)的階段幫助服務(wù)提供者描述附加操作的可替代的操作。第一個要求和第二個要求基于對操作的描述。
顯示關(guān)于存儲在服務(wù)層次樹中的服務(wù)的信息。這種信息當(dāng)應(yīng)用程序被重構(gòu)時從替代策略確定部分120中被提取并且被用于創(chuàng)建映射表130。
在[表1]中,可替代的操作*字段是可選字段,如果現(xiàn)有服務(wù)在新環(huán)境中被父類型替代,則該字段存儲關(guān)于父類型的哪個操作可替代或者更換現(xiàn)有服務(wù)的信息。因為其它操作可由父類型提供,所以該字段只描述子類型的附加操作。如上所述,由于可使用‘替代’和‘強(qiáng)制轉(zhuǎn)變’,所以可替代的操作*的字段的值描述了哪種情況被選擇,是‘替代’還是‘強(qiáng)制轉(zhuǎn)變’,這是因為事件轉(zhuǎn)換模塊140基于情況的不同支持不同處理。另外,可替代的操作*的字段描述了替代的操作的名稱和恢復(fù)值。即使描述了關(guān)于替代的操作的信息,用戶也可能不希望該操作被降低,因此,如果請求的服務(wù)被父類型替代或者被強(qiáng)制轉(zhuǎn)變成父類型,則系統(tǒng)遵照應(yīng)用程序策略。其它字段的信息表示如其名稱所代表的服務(wù)的各個操作。
圖2是表示消息轉(zhuǎn)移處理的流程圖,用以解釋根據(jù)本發(fā)明示例性實施例的重構(gòu)應(yīng)用程序的方法。當(dāng)用戶運(yùn)動到新環(huán)境或者裝置或者服務(wù)動態(tài)出現(xiàn)時,出現(xiàn)這種消息轉(zhuǎn)移。
以下是用子類型替代請求的服務(wù)的處理。在操作S200,當(dāng)用戶運(yùn)動到新環(huán)境時,服務(wù)自適應(yīng)管理器部分100從應(yīng)用程序框架90接收應(yīng)用程序重構(gòu)的請求。在操作S205,服務(wù)自適應(yīng)管理器部分100將服務(wù)組件列表從服務(wù)容器110發(fā)送到替代策略確定部分120。服務(wù)組件列表包括關(guān)于應(yīng)用程序的信息,即,關(guān)于哪些服務(wù)組件構(gòu)成應(yīng)用程序的信息。
替代策略確定部分120在操作S210中參照發(fā)送的服務(wù)組件列表,并且在操作S215中使用類型倉庫150確定服務(wù)組件的每個是否都是可替代的,并且接收由類型倉庫150取回的服務(wù)組件信息。如果相同類型的服務(wù)不可使用,則取回部分122分析類型倉庫150的服務(wù)層次關(guān)系并且找到子類型。子類型的優(yōu)先級通過考慮服務(wù)之間的相似性而確定。與現(xiàn)有服務(wù)最相似的子類型具有優(yōu)先級。替代策略確定部分120使用服務(wù)發(fā)現(xiàn)部分80檢查最相似的子類型是否存在于當(dāng)前環(huán)境中。如果不存在最相似的子類型,則系統(tǒng)嘗試著尋找另一個子類型。這種處理一直繼續(xù)直到找到最相似的子類型為止,并且在操作S220中確定可替代的服務(wù)。
在操作S225中,替代策略確定部分120將替代結(jié)果,即現(xiàn)有服務(wù)和替代的服務(wù)之間的映射信息存儲到映射表130中。操作S210到S225相對于所有組件執(zhí)行,并且當(dāng)操作被完成時,替代策略確定部分120在操作S230中將替代的服務(wù)列表存儲到應(yīng)用程序框架90中。
映射表130只存儲關(guān)于哪個子類型用于替代請求的服務(wù)的信息。如果當(dāng)前環(huán)境中不存在子類型,則替代策略確定部分120嘗試著將請求的服務(wù)用父類型替代或者強(qiáng)制轉(zhuǎn)換成父類型。如果在當(dāng)前環(huán)境中不存在父類型,則系統(tǒng)無法重構(gòu)應(yīng)用程序。如上所述,根據(jù)服務(wù)提供者提供的策略,確定請求的服務(wù)由父類型替代還是強(qiáng)制轉(zhuǎn)換成父類型。針對所述替代,在處理的開始執(zhí)行相同的處理,但是確定由父類型替代還是強(qiáng)制轉(zhuǎn)換成父類型的不同的處理則根據(jù)服務(wù)層次樹的可替代的操作的描述來執(zhí)行。
為了用父類型替代請求的服務(wù),取回部分122分析服務(wù)層次關(guān)系并且尋找請求的服務(wù)的父類型。與轉(zhuǎn)換成子類型的處理不同,這種處理只獲得請求的服務(wù)的直接上層父類型。這是因為服務(wù)提供者只描述關(guān)于直接上層父類型的操作映射信息。當(dāng)類型倉庫150傳遞父類型時,服務(wù)發(fā)現(xiàn)部分80確定在當(dāng)前環(huán)境中是否存在父類型。
如果替代策略確定部分120確定現(xiàn)有服務(wù)的附加操作由父類型替代,則附加操作的可替代的操作字段被描述為父類型功能的組合。對該字段的描述被存儲在映射表130中。
如果替代策略確定部分120確定現(xiàn)有服務(wù)的附加操作不能被父類型替代,則附加操作的可替代的操作字段被描述為父類型的另一個操作。即,請求的服務(wù)被強(qiáng)制轉(zhuǎn)換成不同的操作,在這種情況下,對該字段的描述被存儲在映射表130中。
為了從在服務(wù)層次樹中取回的服務(wù)中尋找可替代的操作,替代策略確定部分120使用兩種取回方法。一種取回方法是基于名稱的方法,其從可替代的服務(wù)中尋找具有相同名稱的操作。這被稱為“句法匹配”。如果服務(wù)具有相同的名稱、參數(shù)和恢復(fù)值,則服務(wù)具有相同的操作。如果基于名稱的取回方法沒有尋找到可替代的操作以用父類型替代或者強(qiáng)制轉(zhuǎn)換成父類型,則使用基于含義的取回方法。基于含義的取回方法檢查可替代的操作字段的信息并且尋找附加操作將轉(zhuǎn)變成哪個操作。
在將應(yīng)用程序重構(gòu)到用戶運(yùn)動到的新環(huán)境中之后,在執(zhí)行該應(yīng)用程序的期間用戶請求轉(zhuǎn)換消息的處理。在轉(zhuǎn)換消息的期間,為了透明地傳輸用戶請求的消息,服務(wù)容器110確定請求的服務(wù)是否在新環(huán)境中被替代。如果請求的服務(wù)沒有被替代,則用戶的請求被發(fā)送到事件轉(zhuǎn)換模塊140中,并且事件轉(zhuǎn)換模塊140公布事件。但是,如果請求的服務(wù)被另一個服務(wù)替代,則請求的服務(wù)被發(fā)送到映射表130,從而映射表130可確定是哪個服務(wù)替代了請求的服務(wù)。映射表130將信息發(fā)送到事件轉(zhuǎn)換模塊140。消息的目的地,必要的話,連同消息本身根據(jù)從事件轉(zhuǎn)換模塊140發(fā)送的信息被轉(zhuǎn)換成另一個消息,并且轉(zhuǎn)換的消息被發(fā)送到改變后的目的地。
當(dāng)然,用戶對服務(wù)的特定操作的請求被包括在所述消息中。事件轉(zhuǎn)換模塊140根據(jù)映射表130描述的內(nèi)容執(zhí)行以下三步處理。如果請求的服務(wù)被子類型替代,則只改變發(fā)送的事件的目的地。如果請求的服務(wù)被父類型替代,則所述目的地只關(guān)于父類型和原始服務(wù)所支持的操作而改變。但是,如果請求現(xiàn)有服務(wù)的附加操作,則根據(jù)映射表130的描述按照次序處理父類型操作的組合,以保持在操作執(zhí)行之前和操作被執(zhí)行之后服務(wù)條件相同,即為了保持服務(wù)的前續(xù)條件和后續(xù)條件。如果請求的服務(wù)被父類型替代,則請求的服務(wù)根據(jù)映射表130簡單地轉(zhuǎn)換成父類型操作中的一種。
例如,假設(shè)在當(dāng)前環(huán)境中存在被稱做“燈”的服務(wù)。則服務(wù)“燈”是被稱做“智能燈”的服務(wù)的父類型,并且執(zhí)行“打開”和“關(guān)閉”兩個操作。服務(wù)“智能燈”擴(kuò)展了服務(wù)“燈”,因此提供了功能“昏暗”。功能“昏暗”通過將參數(shù)“昏暗等級”添加到操作“打開”中來實現(xiàn)。如果在用戶運(yùn)動到的新環(huán)境中,服務(wù)“燈”不存在,并且只存在服務(wù)“智能燈”,則服務(wù)“燈”由服務(wù)“智能燈”替代。
如果用戶請求服務(wù)“燈”的操作“打開”和“關(guān)閉”,則這兩個操作被透明地由服務(wù)“智能燈”的操作“打開”和“關(guān)閉”替代。另一方面,假設(shè)用戶在現(xiàn)有環(huán)境中使用服務(wù)“智能燈”。
如果用戶運(yùn)動到只有服務(wù)“燈”可用的新環(huán)境中,則假設(shè)在新環(huán)境中不存在服務(wù)“智能燈”并且服務(wù)“智能燈”的子類型不存在的情況下,服務(wù)“智能燈”由服務(wù)“燈”替代。服務(wù)“智能燈”的功能“昏暗”被強(qiáng)制轉(zhuǎn)變成服務(wù)“燈”的功能“打開”,這是因為功能“昏暗”不能由服務(wù)“燈”的功能的組合所替代。用戶請求的服務(wù)“智能燈”的功能“昏暗”被透明地轉(zhuǎn)換成服務(wù)“燈”的操作“打開”。
根據(jù)本發(fā)明示例性實施例的應(yīng)用程序重構(gòu)系統(tǒng)由Java實現(xiàn)。類型倉庫150使用Java和可擴(kuò)展標(biāo)記語言(XML)實現(xiàn)。在本發(fā)明中,在只提供操作描述的網(wǎng)絡(luò)服務(wù)描述語言(WSDL)中添加標(biāo)簽,并且該服務(wù)被按照與WSDL相似的語言進(jìn)行描述。WSDL的優(yōu)點在于通過將一些標(biāo)簽添加到WSDL中,根據(jù)本發(fā)明示例性實施例的方法被容易地應(yīng)用到用現(xiàn)有WSDL描述的服務(wù)中。服務(wù)描述導(dǎo)致存儲服務(wù)的關(guān)系和信息的服務(wù)層次樹。為了分析服務(wù)描述,Java WSDL(WSDL解析器)被擴(kuò)展。當(dāng)服務(wù)在類型倉庫中被注冊時,擴(kuò)展的JWSDL分析服務(wù)的信息。為了清楚顯示在服務(wù)層次樹中的服務(wù)之間的關(guān)系,使用文檔對象模型(DOM)。DOM清楚地顯示了層次關(guān)系模型并且提供平臺和中性語言接口。
圖3是根據(jù)本發(fā)明示例性實施例的應(yīng)用程序重構(gòu)系統(tǒng)中使用的全部類圖。應(yīng)用程序框架90通過調(diào)用服務(wù)自適應(yīng)管理器部分100的重構(gòu)而創(chuàng)建對應(yīng)用程序重構(gòu)的請求。此時,替代策略確定部分120使用搜索服務(wù)的功能從類型倉庫150中讀取關(guān)于各服務(wù)的信息,并且識別在當(dāng)前環(huán)境中是否存在可替代的服務(wù)。這個處理被重復(fù)與應(yīng)用程序的組件的數(shù)量相應(yīng)的預(yù)定次數(shù)。在重構(gòu)之后,通過使用setSubstitutionInfo函數(shù)將替代的服務(wù)的列表存儲在服務(wù)容器110中。
基于哪個服務(wù)替代請求的服務(wù),映射表130可通過兩個哈希表中的一個實現(xiàn)。這兩個哈希表存儲關(guān)于請求的服務(wù)被子類型替代的情況的信息和關(guān)于請求的服務(wù)被父類型替代的情況的信息。子類型哈希表存儲與替代現(xiàn)有服務(wù)的鍵對應(yīng)的服務(wù)值。由于父類型表必須存儲例如替代操作的參數(shù)或者恢復(fù)值的附加信息,所以其存儲抽象類,在所述抽象類中現(xiàn)有服務(wù)作為鍵插入,并且替代的服務(wù)的操作被存儲為一個值。
圖4是圖1的事件轉(zhuǎn)換模塊140的類圖。如圖4所示,事件轉(zhuǎn)換模塊140可被實現(xiàn)在代理模塊中。這兩個類實現(xiàn)可替代接口的處理事件接口,從而使用戶通過尋呼(paging)過程事件接口而能夠在新環(huán)境中透明地驅(qū)動應(yīng)用程序,盡管用戶不知道服務(wù)是否被替代。
當(dāng)用戶通過處理事件接口將事件發(fā)送到事件轉(zhuǎn)換代理時,所述類檢查事件的內(nèi)容,并且如果請求的服務(wù)沒有被替代,則迅速發(fā)送事件,如果請求的服務(wù)被替代,則產(chǎn)生默認(rèn)真實主體(subject),并且將事件處理移交給默認(rèn)真實主體。默認(rèn)真實主體根據(jù)映射表的描述改變事件的內(nèi)容,并且發(fā)送改變的內(nèi)容。所述兩個類多線程方法中被實現(xiàn),用以實時地同時處理許多請求。即,針對用戶的每個請求以及事件的處理產(chǎn)生一個線程。圖5是表示圖1的事件轉(zhuǎn)換模塊的消息傳遞處理的流程圖。參照圖5,在操作S300,服務(wù)容器110確定請求的服務(wù)是否可替代。即,為了透明地發(fā)送用戶請求的消息,服務(wù)容器110確定請求的服務(wù)在新環(huán)境中是否可被替代。
如果替代不可用,則在操作S305中服務(wù)容器110將事件發(fā)送到事件轉(zhuǎn)換模塊140。也就是說,如果請求的服務(wù)在新環(huán)境中不可替代,則服務(wù)容器110將用戶的請求發(fā)送到事件轉(zhuǎn)換模塊140。
在操作S310中,事件轉(zhuǎn)換模塊140產(chǎn)生線程并且將接收的事件發(fā)送到目標(biāo)目的地。即,事件轉(zhuǎn)換模塊140檢查事件的內(nèi)容,并且如果請求的信息不可能被替代,則將用戶請求的信息迅速發(fā)送到目標(biāo)目的地。
如果替代可用,則在操作S320中服務(wù)容器110將事件發(fā)送到映射表130。即,服務(wù)容器110將事件發(fā)送到映射表130來確定哪個服務(wù)替代請求的服務(wù)。
在操作S325中,映射表130檢查接收的事件的內(nèi)容并且檢查用戶請求的服務(wù)是否被替代。
在操作S330中,映射表130將關(guān)于替代的功能的信息發(fā)送到事件轉(zhuǎn)換模塊140。
在操作S340中,事件轉(zhuǎn)換模塊140產(chǎn)生默認(rèn)真實主體并且將事件發(fā)送到默認(rèn)真實主體中。
在操作S345中,默認(rèn)真實主體檢查可替代的情況,產(chǎn)生線程并且根據(jù)可替代的情況發(fā)送事件。即,默認(rèn)真實主體根據(jù)映射表130的描述改變事件的內(nèi)容并且發(fā)送改變的內(nèi)容。
圖6是圖1的類型倉庫150的類圖。類型倉庫150具有兩個解析器一個解析器分析服務(wù)層次樹;另一個解析器分析擴(kuò)展的WSDL并且通過擴(kuò)展JWSDL被實現(xiàn)。類型倉庫150具有將服務(wù)名稱和服務(wù)的索引存儲在服務(wù)層次樹中的哈希表,用以減少分析服務(wù)層次樹中的服務(wù)信息所需的時間。由于哈希表的存在,所以即使服務(wù)的種類增加,取回服務(wù)也只花費恒定的時間量。圖6的類圖表示類型倉庫150提供的應(yīng)用程序接口。
圖7和圖8是表示根據(jù)本發(fā)明示例性實施例的將應(yīng)用程序重構(gòu)的方法應(yīng)用到智能燈服務(wù)的示例情況的圖。圖7表示當(dāng)使用智能燈服務(wù)的用戶從環(huán)境A運(yùn)動到新環(huán)境B中時應(yīng)用程序重構(gòu)的處理。圖8表示在用戶從環(huán)境A運(yùn)動到環(huán)境B并且應(yīng)用程序被重構(gòu)之后,環(huán)境A和環(huán)境B之間的交互。
如上述示例中所述,根據(jù)本發(fā)明示例性實施例的應(yīng)用程序重構(gòu)方法只使用了服務(wù)類型之間的層次關(guān)系來有效地尋找可替代的服務(wù)。即,當(dāng)尋找可替代的服務(wù)時,只考慮服務(wù)之間的關(guān)系。因此根據(jù)本發(fā)明示例性實施例的方法不需要對服務(wù)的詳細(xì)描述并且有效地對系統(tǒng)編程。另外,本發(fā)明與用于擴(kuò)展子類型的概念的傳統(tǒng)方法的不同點在于請求的服務(wù)基于在各個環(huán)境中服務(wù)的有效性而被子類型和父類型兩者替代。
根據(jù)上述本發(fā)明的示例性實施例,達(dá)到了普適計算的主要目的,從而為了方便用戶,系統(tǒng)被調(diào)整以動態(tài)地改變環(huán)境,因此使得用能夠可專心于他/她自己的工作。為此,當(dāng)用戶運(yùn)動到其他的環(huán)境或者裝置或者服務(wù)動態(tài)地出現(xiàn)時,普適環(huán)境的應(yīng)用程序適合于動態(tài)地和透明地調(diào)整以適應(yīng)上下文的改變。根據(jù)本發(fā)明的示例性實施例,即使在用戶運(yùn)動到的新環(huán)境中沒有相同的服務(wù),應(yīng)用程序也基于“子類型”的概念被用于替代請求的服務(wù)的子類型或者父類型透明地重構(gòu)。另外,根據(jù)本發(fā)明的方法應(yīng)用“行為子類型”的概念,因此保證了靈活性和功能一致性。
上述實施例和優(yōu)點只是示例性的并且不應(yīng)該被理解為限制本發(fā)明。對本發(fā)明的描述只是闡述性的,并且不限制權(quán)利要求的范圍。許多變更、修改和變化對于本領(lǐng)域技術(shù)人員將是清楚的。
權(quán)利要求
1.一種用于在普適計算環(huán)境中重構(gòu)應(yīng)用程序的方法,該方法包括根據(jù)上下文的改變,接收對預(yù)定應(yīng)用程序重構(gòu)的重構(gòu)請求;響應(yīng)于上下文的改變,關(guān)于構(gòu)成預(yù)定應(yīng)用程序的至少一個服務(wù)組件中的每個來搜索服務(wù);基于搜索到的服務(wù)重構(gòu)預(yù)定應(yīng)用程序。
2.如權(quán)利要求1所述的方法,其中,搜索服務(wù)的步驟包括搜索提供與服務(wù)組件的操作相同的操作的服務(wù);如果沒有提供與服務(wù)組件的操作相同的操作的服務(wù),則搜索可替代的服務(wù)。
3.如權(quán)利要求2所述的方法,其中,可替代的服務(wù)基于“行為子類型”概念,并且該可替代的服務(wù)根據(jù)用子類型替代的方法、用父類型替代的方法和用父類型強(qiáng)制轉(zhuǎn)換的方法中的一個被確定。
4.如權(quán)利要求1所述的方法,其中,上下文的改變的出現(xiàn)是由于用戶運(yùn)動到新環(huán)境中、裝置的動態(tài)出現(xiàn)以及服務(wù)的動態(tài)出現(xiàn)之一而引起的。
5.一種應(yīng)用程序重構(gòu)系統(tǒng),其根據(jù)普適計算環(huán)境中上下文的改變而重構(gòu)應(yīng)用程序,該系統(tǒng)包括服務(wù)容器,存儲關(guān)于構(gòu)成預(yù)定應(yīng)用程序的至少一個服務(wù)組件的信息;替代策略確定部分,響應(yīng)于上下文的改變而關(guān)于所述至少一個服務(wù)組件搜索服務(wù)信息;映射表,存儲服務(wù)組件和相應(yīng)的服務(wù)信息之間的映射關(guān)系。
6.如權(quán)利要求5所述的應(yīng)用程序重構(gòu)系統(tǒng),還包括用于存儲搜索服務(wù)信息的必要的信息的類型倉庫。
7.如權(quán)利要求5所述的應(yīng)用程序重構(gòu)系統(tǒng),還包括事件轉(zhuǎn)換模塊,其用于根據(jù)存儲在映射表中的映射信息處理執(zhí)行預(yù)定應(yīng)用程序的請求。
8.如權(quán)利要求5所述的應(yīng)用程序重構(gòu)系統(tǒng),其中,替代策略確定部分搜索提供與服務(wù)組件的操作相同的操作的服務(wù),如果沒有提供與服務(wù)組件的操作相同的操作的服務(wù),則搜索可替代的服務(wù)。
9.如權(quán)利要求5所述的應(yīng)用程序重構(gòu)系統(tǒng),還包括服務(wù)發(fā)現(xiàn)部分,其確定用戶運(yùn)動到的新位置是否具有與用戶所在的先前位置的服務(wù)組件相同的服務(wù)組件。
10.如權(quán)利要求8所述的應(yīng)用程序重構(gòu)系統(tǒng),其中,可替代的服務(wù)基于‘行為子類型’概念,并且該可替代的服務(wù)根據(jù)用子類型替代的方法、用父類型替代的方法和用父類型強(qiáng)制轉(zhuǎn)換的方法中的一個被確定。
11.如權(quán)利要求5所述的應(yīng)用程序重構(gòu)系統(tǒng),其中,上下文的改變的出現(xiàn)是由于用戶運(yùn)動到新環(huán)境中、裝置的動態(tài)出現(xiàn)以及服務(wù)的動態(tài)出現(xiàn)之一而引起的。
全文摘要
一種用于在普適計算環(huán)境中重構(gòu)應(yīng)用程序的方法,包括根據(jù)上下文的改變,接收預(yù)定應(yīng)用程序重構(gòu)的重構(gòu)請求;響應(yīng)于上下文的改變,關(guān)于構(gòu)成預(yù)定應(yīng)用程序的至少一個服務(wù)組件中的每個來搜索服務(wù);基于搜索到的服務(wù)重構(gòu)預(yù)定應(yīng)用程序。
文檔編號G06F17/30GK1821958SQ20061000739
公開日2006年8月23日 申請日期2006年2月13日 優(yōu)先權(quán)日2005年2月14日
發(fā)明者樸慶豪, 姜友植, 李京珉, 韓承賢, 李東萬 申請人:三星電機(jī)株式會社