亚洲成年人黄色一级片,日本香港三级亚洲三级,黄色成人小视频,国产青草视频,国产一区二区久久精品,91在线免费公开视频,成年轻人网站色直接看

一種Java類依賴關(guān)系的靜態(tài)識別方法與流程

文檔序號:12119823閱讀:289來源:國知局
一種Java類依賴關(guān)系的靜態(tài)識別方法與流程

本發(fā)明涉及一種Java類依賴關(guān)系的靜態(tài)識別方法,可以針對用戶提供的基于Java的Web應(yīng)用,通過靜態(tài)代碼分析,快速地構(gòu)建出所有類、字段之間的依賴關(guān)系,并從中自動識別存在讀寫共享的持久化屬性,這在自動檢測Web應(yīng)用是否可以集群部署,以及Web應(yīng)用的集群遷移方面具有重要作用,屬于軟件應(yīng)用技術(shù)領(lǐng)域。



背景技術(shù):

為了滿足不斷增長的海量信息以及數(shù)據(jù)處理的需求,計(jì)算機(jī)集群技術(shù)應(yīng)運(yùn)而生。集群技術(shù)通過將多臺計(jì)算機(jī)連接在一起,按照一定的規(guī)則進(jìn)行協(xié)同工作來完成單臺計(jì)算機(jī)無法完成的任務(wù)。通過集群,可以以較低的成本搭建擁有強(qiáng)大計(jì)算能力的系統(tǒng),并且其性能、擴(kuò)展性和可用性都得以大大增強(qiáng)。集群對象的共享是集群技術(shù)中的一個關(guān)鍵問題——所謂集群對象,就是那些雖然物理上分布于不同的機(jī)器,但是邏輯上具有同一性的那些對象,在集群外部看來它們表示同一個對象。由于集群對象維護(hù)的是集群中不同服務(wù)器之間的協(xié)同工作的數(shù)據(jù),它們的正確共享是業(yè)務(wù)邏輯正常運(yùn)行的重要保證。

針對Java系統(tǒng),在集群的搭建過程中,為了使普通的Java對象成為集群對象,實(shí)現(xiàn)集群對象的正確共享,需要針對所有共享的Java類進(jìn)行存取方式上的重構(gòu),即,將單機(jī)式的數(shù)據(jù)讀寫方式轉(zhuǎn)換成集群式的數(shù)據(jù)讀寫方式。如果某個共享屬性沒有被正確地重構(gòu),那么它便無法擁有集群的行為。這意味著要從所有的Java類中定位存在讀寫共享的持久化屬性。

在Java系統(tǒng)中,動態(tài)分析,或運(yùn)行時分析,可以在一定程度上解決共享屬性的搜索和推導(dǎo)問題。然而在動態(tài)分析中,系統(tǒng)的運(yùn)行必須要覆蓋所有可能的代碼路徑——包括正常情況和異常情況,否則便無法保證找出的共享屬性的集合的完備性,這就相當(dāng)于要進(jìn)行一次完備的軟件測試,難度相對較大。并且,為了獲取某個Java對象屬性的引用和依賴信息,需要在原系統(tǒng)代碼中插入Java反射機(jī)制的代碼,這無疑給原系統(tǒng)帶來了不少的代碼污染,這些源代碼污染帶來了一定的重構(gòu)風(fēng)險(xiǎn)。

因此,為了更加方便、快捷、高效、完備地進(jìn)行集群對象共享的配置,需要一種Java類依賴關(guān)系的靜態(tài)識別方法,該方法可以覆蓋所有的執(zhí)行路徑,并且避免代碼污染。



技術(shù)實(shí)現(xiàn)要素:

本發(fā)明的目的在于克服現(xiàn)有技術(shù)中存在的問題,提供一種Java類依賴關(guān)系的靜態(tài)識別方法,該方法利用靜態(tài)程序分析技術(shù)對用戶指定的Web應(yīng)用中包含的全部代碼進(jìn)行分析,可以覆蓋所有的執(zhí)行路徑,并且分析過程中無須對原始代碼進(jìn)行插裝,從而不會對原系統(tǒng)造成任何代碼污染。

本發(fā)明適用于自動檢測Web應(yīng)用是否可以集群部署,并可用于指導(dǎo)開發(fā)人員對Web應(yīng)用進(jìn)行集群遷移,可以提高Web應(yīng)用集群遷移的整體效率。

為了實(shí)現(xiàn)本發(fā)明的目的,采用的技術(shù)方案概述如下:

一種基于靜態(tài)程序分析的共享持久化屬性識別方法,如圖1所示,包括以下步驟:

步驟1:分析用戶指定的目標(biāo)Web應(yīng)用的代碼,從中識別目標(biāo)Web應(yīng)用的入口方法,并將識別得到的入口方法置入待分析方法集合中;

步驟2:依次分析待分析方法集合中的每個入口方法,建立入口方法內(nèi)部定義的變量、引用的屬性和被調(diào)用的方法間的依賴關(guān)系,得到入口方法內(nèi)部的依賴關(guān)系圖;并利用相同的步驟對入口方法調(diào)用的其他方法進(jìn)行分析;分析完成后,將所有被分析的被調(diào)用方法置如已分析方法集合中;

步驟3:依次分析已分析方法集合中的每個被調(diào)用方法,對于被調(diào)用方法的每次調(diào)用,建立方法調(diào)用時傳入的實(shí)際參數(shù)和被調(diào)用方法定義的形式參數(shù)間的依賴關(guān)系,從而得到完整的依賴關(guān)系圖;

步驟4:遍歷步驟3得到的依賴關(guān)系圖,從中搜索持久化結(jié)點(diǎn),并將其對應(yīng)的元素置于持久化元素集合中;持久化元素指在Java中被聲明為靜態(tài)的屬性、變量或方法,但在依賴關(guān)系圖中被非靜態(tài)的屬性、變量或方法依賴的元素;

步驟5:依次以步驟4得到的持久化元素集合中的元素為起點(diǎn),對步驟3得到的依賴關(guān)系圖進(jìn)行遍歷,位于2個持久化元素之間的屬性即被識別為持久化屬性,將識別得到的持久化屬性置于持久化屬性集合中,并最終輸出。

所述步驟1中,由用戶提供目標(biāo)Web應(yīng)用程序源碼,初始化待分析方法集合Su為空;遍歷程序源碼,從中識別系統(tǒng)的入口方法,入口方法包括所有實(shí)現(xiàn)了標(biāo)準(zhǔn)Servlet接口的Java類中的doGet、doPost方法,并將這些方法置入待分析方法集合Su中。

所述步驟2具體包括以下步驟,

(1)初始化已分析方法集合Sa為空;

(2)從待分析方法集合Su中取出一個方法M,

(2.1)如果方法M不是靜態(tài)方法,即M沒有被聲明為stat ic的,則按照如下規(guī)則依次對方法包含的每條指令進(jìn)行分析:

o)如果當(dāng)前指令是屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P;

p)如果當(dāng)前指令是靜態(tài)屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P,并設(shè)置P為持久化元素;

q)如果當(dāng)前指令是屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M;

r)如果當(dāng)前指令是靜態(tài)屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M,并設(shè)置P為持久化元素;

s)如果當(dāng)前指令是賦值指令,一側(cè)操作元素為變量L,另一側(cè)操作元素集合為Rs,且Rs中包括靜態(tài)屬性集合Rsp,則添加依賴關(guān)系L依賴于Rs,L依賴于M,并設(shè)置Rsp中元素為持久化元素;

t)如果當(dāng)前指令是返回指令,返回元素為R,R是非靜態(tài)屬性或變量,則添加依賴關(guān)系M依賴于R;

u)如果當(dāng)前指令是返回指令,返回元素為R,R是靜態(tài)屬性,則添加依賴關(guān)系M依賴于R,并設(shè)置R為持久化元素;

v)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法N是非靜態(tài)方法,則添加依賴關(guān)系M依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sc中;

w)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法N是靜態(tài)方法,則添加依賴關(guān)系M靜態(tài)依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sn中,并設(shè)置N為持久化元素;

(2.2)如果方法M是靜態(tài)方法,則按照如下規(guī)則依次對方法包含的每條指令進(jìn)行分析:

x)如果當(dāng)前指令是屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P;

y)如果當(dāng)前指令是屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M;

z)如果當(dāng)前指令是賦值指令,一側(cè)操作元素為變量L,另一側(cè)操作元素集合為Rs,則添加依賴關(guān)系L依賴于Rs,L依賴于M;

aa)如果當(dāng)前指令是返回指令,返回元素為R,則添加依賴關(guān)系M依賴于R;

bb)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法為N,則添加依賴關(guān)系M依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sc中;

(3)將方法M置入已分析方法集合Sa中;

(4)返回步驟(2)繼續(xù)處理Su,直到Su為空。

所述步驟3具體包括以下步驟:

(1)從已分析方法集合Sa中取出一個方法M;

(2)獲取M的調(diào)用集合Sc;

(3)從調(diào)用集合Sc中取出一次調(diào)用指令C;

(4)建立調(diào)用指令C中傳入的實(shí)際參數(shù)和方法M定義的形式參數(shù)間的依賴關(guān)系,對于調(diào)用指令C中的每個實(shí)際參數(shù)A,找出其對應(yīng)的形式參數(shù)P;如果A是對象的靜態(tài)屬性,則添加依賴關(guān)系P靜態(tài)依賴于A,否則添加依賴關(guān)系P依賴于A;

(5)返回步驟(3)繼續(xù)處理Sc,直到集合Sc為空;

(6)返回步驟(1)繼續(xù)處理Sa,直到集合Sa為空。

所述步驟4具體包括以下步驟:

(1)初始化持久化結(jié)點(diǎn)集合Ns為空;

(2)獲取步驟3構(gòu)建的屬性依賴圖中的結(jié)點(diǎn)集合Ne;

(3)從結(jié)點(diǎn)集合Ne中取出一個結(jié)點(diǎn)n,如果n是持久化結(jié)點(diǎn),則將n置入持久化結(jié)點(diǎn)集合Ns中;

(4)返回步驟(3)繼續(xù)處理Ne,直到集合Ne為空。

所述步驟5具體包括以下步驟:

(1)初始化輸出屬性集合S為空;

(2)從步驟4得到的持久化結(jié)點(diǎn)集合Ns中取出一條結(jié)點(diǎn)n1;

(3)以n1為起點(diǎn),對依賴圖進(jìn)行無重復(fù)結(jié)點(diǎn)的深度遍歷,直到遇到下一個持久化結(jié)點(diǎn)n2或沒有下一個無重復(fù)結(jié)點(diǎn);當(dāng)遇到持久化結(jié)點(diǎn)n2時,則將n1與n2之間的屬性結(jié)點(diǎn)置入輸出屬性集合S中;

(4)返回步驟(2)繼續(xù)處理Ns,直到Ns為空;

(5)輸出最終結(jié)果S。

與現(xiàn)有的技術(shù)相比較,本發(fā)明具有如下的優(yōu)勢:

(1)本發(fā)明完全依靠靜態(tài)代碼分析技術(shù)實(shí)現(xiàn),分析過程覆蓋原始Web應(yīng)用的所有代碼,因此可以覆蓋所有可能的執(zhí)行路徑;

(2)本發(fā)明的分析過程無須對原始代碼進(jìn)行插裝,因此避免了運(yùn)行時分析引入的代碼污染。

附圖說明

圖1為本發(fā)明方法在實(shí)施例中的實(shí)現(xiàn)的總體流程圖;

圖2為本發(fā)明步驟2的實(shí)現(xiàn)過程圖;

圖3為本發(fā)明步驟3的實(shí)現(xiàn)過程圖;

圖4為本發(fā)明步驟5的實(shí)現(xiàn)過程圖;

圖5為本發(fā)明方法在實(shí)施例中構(gòu)造的依賴關(guān)系圖。

具體實(shí)施方式

如圖1所示,本發(fā)明一種基于靜態(tài)程序分析的共享持久化屬性識別方法,其輸入為一個基于Java的Web應(yīng)用的字節(jié)碼文件,輸出為可能存在共享的持久化屬性集合,包括以下步驟:

步驟1:從用戶指定的目標(biāo)Web應(yīng)用中識別入口方法集合,記為Su;

步驟2:依次分析每個入口方法和入口方法直接或間接調(diào)用的其他方法,為每個入口方法和被調(diào)用的方法構(gòu)建方法內(nèi)部的依賴關(guān)系圖;并將完成分析的被調(diào)用方法置入已分析方法集合中,記為Sa;同時記錄每個被調(diào)用方法被調(diào)用時的調(diào)用信息,置入該方法的調(diào)用集合中,記為Sc;

步驟3:根據(jù)每個被調(diào)用方法的調(diào)用信息構(gòu)建方法調(diào)用時傳入的實(shí)際參數(shù)和被調(diào)用方法定義的形式參數(shù)之間的依賴關(guān)系,從而構(gòu)建完整的依賴關(guān)系圖;

步驟4:從完整的依賴關(guān)系圖中識別持久化元素集合,記為Ns;

步驟5:基于持久化元素,從依賴關(guān)系圖中識別持久化屬性集合,記為S。

此處的屬性依賴關(guān)系用以描述Java語言的三種元素,即對象中的方法、屬性和變量,之間的依賴關(guān)系。

如果元素A的功能的正常運(yùn)行需要元素B的服務(wù)的保證,則稱元素A依賴于元素B(記作A->B)。本方法定義這兩種語言元素應(yīng)有如下的四種依賴關(guān)系:

1.方法對方法的依賴:假如方法A調(diào)用了方法B,則定義方法A依賴于方法B,同時方法B依賴于方法A。

2.方法對屬性或變量的依賴:假如方法A的返回值是一個屬性或變量B,則定義方法A依賴于屬性或變量B。

3.屬性或變量對方法的依賴:假如方法A中存在一條賦值語句,等號左邊是屬性或變量B,則定義屬性或變量B依賴于方法A;如果等號右邊是一個方法調(diào)用C,則同時定義屬性或變量B依賴于方法C。

4.屬性或變量對屬性或變量的依賴:假如方法A中存在一條賦值語句,等號左邊是屬性或變量B,并且等號右邊是另一個屬性或變量C,則定義屬性或變量B依賴于屬性或變量C。

基于以上定義,所述步驟1具體包括以下步驟:

(1)由用戶提供目標(biāo)Web應(yīng)用程序源碼,并初始化待分析方法集合Su為空;

(2)遍歷程序源碼,從中識別系統(tǒng)的入口方法,例如所有實(shí)現(xiàn)了標(biāo)準(zhǔn)Servlet等接口的Java類中的doGet、doPost等方法,并將這些方法置入待分析方法集合Su中。

步驟2具體包括以下步驟,如圖2所示:

(1)初始化已分析方法集合Sa為空;

(2)從待分析方法集合Su中取出一個方法M,

(2.1)如果方法M不是靜態(tài)方法,即M沒有被聲明為static的,則按照如下規(guī)則依次對方法包含的每條指令進(jìn)行分析:

a)如果當(dāng)前指令是屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P;

b)如果當(dāng)前指令是靜態(tài)屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P,并設(shè)置P為持久化元素;

c)如果當(dāng)前指令是屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M;

d)如果當(dāng)前指令是靜態(tài)屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M,并設(shè)置P為持久化元素;

e)如果當(dāng)前指令是賦值指令,左側(cè)操作元素為變量L,右側(cè)操作元素集合為Rs,且Rs中包括靜態(tài)屬性集合Rsp,則添加依賴關(guān)系L依賴于Rs,L依賴于M,并設(shè)置Rsp中元素為持久化元素;

f)如果當(dāng)前指令是返回指令,返回元素為R,R是非靜態(tài)屬性或變量,則添加依賴關(guān)系M依賴于R;

g)如果當(dāng)前指令是返回指令,返回元素為R,R是靜態(tài)屬性,則添加依賴關(guān)系M依賴于R,并設(shè)置R為持久化元素;

h)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法N是非靜態(tài)方法,則添加依賴關(guān)系M依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sc中;

i)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法N是靜態(tài)方法,則添加依賴關(guān)系M靜態(tài)依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sn中,并設(shè)置N為持久化元素;

(2.2)如果方法M是靜態(tài)方法,則按照如下規(guī)則依次對方法包含的每條指令進(jìn)行分析:

j)如果當(dāng)前指令是屬性讀指令,操作屬性為P,則添加依賴關(guān)系M依賴于P;

k)如果當(dāng)前指令是屬性寫指令,操作屬性為P,則添加依賴關(guān)系P依賴于M;

l)如果當(dāng)前指令是賦值指令,左側(cè)操作元素為變量L,右側(cè)操作元素集合為Rs,則添加依賴關(guān)系L依賴于Rs,L依賴于M;

m)如果當(dāng)前指令是返回指令,返回元素為R,則添加依賴關(guān)系M依賴于R;

n)如果當(dāng)前指令是方法調(diào)用指令,被調(diào)用的方法為N,則添加依賴關(guān)系M依賴于N,并將方法N至于待分析方法集合Su中,同時將該條調(diào)用指令置入方法N的調(diào)用集合Sc中;

(3)將方法M置入已分析方法集合Sa中;

(4)返回2繼續(xù)處理Su,直到Su為空。

步驟3具體包括以下步驟,如圖3所示:

(1)從全部方法集合Sa中取出一個方法M;

(2)獲取M的調(diào)用集合Sc;

(3)從調(diào)用集合Sc中取出一次調(diào)用指令C;

(4)建立調(diào)用指令C中傳入的實(shí)際參數(shù)和方法M定義的形式參數(shù)間的依賴關(guān)系,對于調(diào)用指令C中的每個實(shí)際參數(shù)A,找出其對應(yīng)的形式參數(shù)P;如果A是對象的靜態(tài)屬性,則添加依賴關(guān)系P靜態(tài)依賴于A,否則添加依賴關(guān)系P依賴于A;

(5)返回步驟(3)繼續(xù)處理Sc,直到集合Sc為空;

(6)返回步驟(1)繼續(xù)處理Sa,直到集合Sa為空。

步驟4具體包括以下步驟:

(1)初始化持久化結(jié)點(diǎn)集合Ns為空;

(2)獲取步驟3構(gòu)建的屬性依賴圖中的結(jié)點(diǎn)集合Ne;

(3)從結(jié)點(diǎn)集合Ne中取出一個結(jié)點(diǎn)n,如果n是持久化結(jié)點(diǎn),則將n置入持久化結(jié)點(diǎn)集合Ns中;

(4)返回(3)繼續(xù)處理Ne,直到集合Ne為空。

步驟5具體包括以下步驟,如圖4所示:

(1)初始化輸出屬性集合S為空;

(2)從步驟4得到的持久化結(jié)點(diǎn)集合Ns中取出一條結(jié)點(diǎn)n1;

(3)以n1為起點(diǎn),對依賴圖進(jìn)行無重復(fù)結(jié)點(diǎn)的深度遍歷,直到遇到下一個持久化結(jié)點(diǎn)n2或沒有下一個無重復(fù)結(jié)點(diǎn);當(dāng)遇到持久化結(jié)點(diǎn)n2時,則將n1與n2之間的屬性結(jié)點(diǎn)置入輸出屬性集合S中;

(4)返回步驟(2)繼續(xù)處理Ns,直到Ns為空;

(5)輸出最終結(jié)果S。

下面結(jié)合具體實(shí)施例對本發(fā)明進(jìn)行詳細(xì)描述。以一段簡單的代碼作為待測程序?yàn)槔?,說明本發(fā)明的工作流程,如下:

其中,ExampleServlet是Web應(yīng)用的入口,其作用是顯示當(dāng)前應(yīng)用的訪問計(jì)數(shù);CountFilter是請求攔截器,對該應(yīng)用的每次請求都會使計(jì)數(shù)器加一;Counter是計(jì)數(shù)器,用以保存計(jì)數(shù)器的取值。具體Java語言描述如下:

本發(fā)明方法的具體實(shí)施過程如下,如圖1所示:

1初始化,設(shè)置待分析方法集合Su={},全部方法集合Sa={},共享持久化屬性集合Sr={};

2從源代碼中識別應(yīng)用入口方法,并將其放入待分析方向集合Su中;本實(shí)施例中的入口函數(shù)為集成了javax.servlet.HttpServlet類的ExampleServlet的doGet方法和實(shí)現(xiàn)了javax.servlet.Filter接口的CountFilter的doFilter方法,本步結(jié)果為,Su={ExampleServlet.doGet,CountFilter.doFilter};

3依次對待分析方法集合Su中的方法進(jìn)行分析,分析過程為:

3.1分析ExampleServlet.doGet方法,指令:

int count=Counter.getCount();

根據(jù)4.1中的規(guī)則f,ExampleServlet.doGet.count依賴于Counter.getCount,且Counter.getCount為持久化元素;

根據(jù)4.1中的規(guī)則j,ExampleServlet.doGet依賴于Counter.getCount,且Counter.getCount為持久化元素,修改Su={CounterFileter.doFilter,Counter.getCount};

修改Sa={ExampleServlet.doGet};

3.2分析CounterFilter.doFilter方法,指令:

Counter.increase();

根據(jù)4.1中的規(guī)則j,CounterFilter.doFilter依賴于Counter.increase,且Counter.increase為持久化元素,修改Su={Counter.getCount,Counter.increase};

修改Sa={ExampleServlet.doGet,CounterFilter.doFilter};

3.3分析Counter.getCount方法,指令:

return count;

根據(jù)4.2中的規(guī)則n,Counter.getCount方法依賴于Counter.count,修改Su={Counter.increase};

修改Sa={ExampleServlet.doGet,CounterFilter.doFilter,Counter.getCount};

3.4分析Counter.increase方法,指令:

count++;

根據(jù)4.2中的規(guī)則m,Counter.count依賴于Counter.increase,修改Su={};

修改Sa={ExampleServlet.doGet,CounterFilter.doFilter,Counter.getCount,Counter.increase};

4構(gòu)建函數(shù)調(diào)用時實(shí)際參數(shù)與形式參數(shù)間的依賴關(guān)系,依次對Sa中的方法進(jìn)行分析,得到依賴關(guān)系圖,如圖5所示,具體分析過程為:

4.1分析ExampleServlet.doGet,沒有被調(diào)用,無須額外處理,修改Sa={CounterFilter.doFilter,Counter.getCount,Counter.increase};

4.2分析CounterFilter.doFilter,沒有被調(diào)用,無須額外處理,修改Sa={Counter.getCount,Counter.increase};

4.3分析Counter.getCount,被ExampleServlet.doGet調(diào)用,但沒有傳入?yún)?shù),無須額外處理,修改Sa={Counter.increase};

4.4分析Counter.increase,被CountFilter.doFilter調(diào)用,但沒有傳入?yún)?shù),無須額外處理,修改Sa={};

5遍歷得到的依賴關(guān)系圖,獲取所有持久化元素集合Se={Counter.getCount,Counter.increase};

6以持久化元素集合Se中的結(jié)點(diǎn)為起點(diǎn),對依賴關(guān)系圖進(jìn)行遍歷,并對遍歷得到的路徑進(jìn)行分析:

6.1對于結(jié)點(diǎn)Counter.getCount,遍歷得到路徑Counter.getCount->Counter.count->Counter.increase,遍歷該條路徑,得到其中的屬性結(jié)點(diǎn)Counter.count,并將其置于共享持久化屬性集合Sr中,即Sr={Counter.count};

6.2對于結(jié)點(diǎn)Counter.increase,遍歷無法得到從Counter.increase觸發(fā)的路徑;

7分析完成,得到最終結(jié)果Sr={Counter.count}。

提供以上實(shí)施例僅僅是為了描述本發(fā)明的目的,而并非要限制本發(fā)明的范圍。本發(fā)明的范圍由所附權(quán)利要求限定。不脫離本發(fā)明的精神和原理而做出的各種等同替換和修改,均應(yīng)涵蓋在本發(fā)明的范圍之內(nèi)。

當(dāng)前第1頁1 2 3 
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點(diǎn)贊!
1