專利名稱:用于處理電信網(wǎng)絡中的事件的設備和方法
技術領域:
本發(fā)明涉及用于處理電信網(wǎng)絡中的事件的設備和方法,并且具體地涉及諸如Java 企業(yè)版(JEE)處理平臺之類的電信處理平臺中用于同步與應用會話相關聯(lián)的事件的處理的方法和設備。
背景技術:
在電信網(wǎng)絡中,為了提供除常規(guī)電話呼叫之外的額外功能,存在許多應用和服務。 這些應用和服務通常運行在連接到電信網(wǎng)絡的不同服務器上。這些服務器通常運行在與電信網(wǎng)絡自身不同的平臺上。一種這樣的平臺是Java企業(yè)版(JEE)平臺,其是標準Java平臺的發(fā)展。JEE是針對Java編程語言中的服務器編程的廣泛使用的平臺。JEE平臺與標準Java平臺的不同在于其添加了主要基于運行在應用服務器上的模塊化組件來部署容錯的分布式多層Java軟件的功能的庫。JEE平臺的特征在于其允許多個處理線程并行地運行,由此提高任務執(zhí)行的
吞吐量。盡管JEE平臺適合于許多應用,但是如下所述,對于某些電信服務可能是不可行的。電信協(xié)議的處理通常要求使用與應用會話相關聯(lián)的狀態(tài)機。對于這些狀態(tài)機,必須一次僅接收一個消息,使得不會破壞狀態(tài)。因此,JEE平臺不提供用于一次一個地處理特定應用會話上的消息的裝置。相反,JEE平臺通常會啟動與要處理的消息一樣多的并行線程。圖1示出了典型的JEE簇1,包括多個處理器3。處理器3可以是相同的,并且分享JEE簇1的負載。當用作電信處理平臺時,每個處理器3通常將包括若干容器,例如 Enterprise Java Beans 5 (EJB)、HTTP 服務程序(servlet) 7、會話發(fā)起協(xié)議(SIP)服務程序9或者其他執(zhí)行單元13,如用于與傳統(tǒng)系統(tǒng)通信的其他資源適配器。圖1示出的架構包括線程池19。線程池19包括一個或多個處理線程、至tN,用于使得處理器3能夠并行地執(zhí)行多任務。線程池19還包括任務隊列21,任務隊列21包含線程、至tN要執(zhí)行的任務的集合。每個處理線程、至tN —次執(zhí)行一個任務。如上面提到的,JEE平臺配置為并行地嘗試和執(zhí)行與系統(tǒng)中定義的線程一樣多的任務。這在下述情況下可能出現(xiàn)問題如圖1所示的JEE平臺被用于處理電信應用和服務, 其中當多個線程、至tN并行地執(zhí)行與應用會話相關聯(lián)的多個事件時,會話狀態(tài)變?yōu)闊o效。 換言之,應用會話中的事件并發(fā)地更新相同的會話狀態(tài)。確保事件同步的一種方法是使用鎖或旗語(semaphore)來防止應用會話中的事件并發(fā)地更新相同的會話狀態(tài)。如此,當一個線程、至tN在處理與特定應用會話相關聯(lián)的事件時,所有其他線程必須等待直到所述一個線程結束。其缺點在于使許多線程、至tN 等待,這不是對系統(tǒng)資源的最佳使用,并且通常與JEE平臺原理相沖突。確保事件同步的另一方法是向每個應用會話僅分配所述多個線程、至tN中的一個線程。如此,每個應用會話具有用于處理其事件的專用線程。然而,這樣的解決方案具有上述線程池機制的缺點,以及因此違背了支配所有資源(包括線程)必須被管理的重要JEE 平臺原理。該解決方案還具有以下缺點使用比所需的線程多得多的線程、至tN,由此資源效率不高。根據(jù)上文應該理解,在不損害資源效率的情況下實現(xiàn)事件同步存在問題。
發(fā)明內容
本發(fā)明的目的在于提供一種用于以資源高效的方式同步在電信網(wǎng)絡中使用的處理平臺中的事件處理的方法和設備。根據(jù)本發(fā)明的一個方面,提供了一種在電信處理平臺中同步與應用會話相關聯(lián)的事件的處理的方法,其中所述電信處理平臺具有用于并行地處理多個任務的多個處理線程,以及其中所述任務存儲在任務隊列中。所述方法包括以下步驟在與特定應用會話相關聯(lián)的事件隊列中存儲一個或多個事件,以及向特定應用會話的事件隊列中的僅一個事件分配所述任務隊列中的任務。本發(fā)明具有以下優(yōu)點避免了并發(fā)地處理事件,因為特定應用會話的事件隊列中僅一個事件分配有任務。本發(fā)明還具有以下優(yōu)點不需要對現(xiàn)有線程池本身執(zhí)行任務隊列中的任務的處理的方式進行任何修改。在事件隊列中存儲事件可以包括以下步驟確定所述事件是否是事件隊列中的第一事件,如果是,則向該特定事件分配任務隊列中的任務。從事件隊列中移除已處理的事件可以包括以下步驟確定事件隊列是否為空,如果不為空,則向事件隊列中的另一事件分配任務隊列中的任務。該分配任務的步驟可以包括向事件隊列中的下一個事件分配任務的步驟。在事件隊列中存儲事件以及確定所述事件是否是事件隊列中的第一事件的步驟可以作為不可分割的動作來執(zhí)行。這具有避免競態(tài)條件的優(yōu)點。從事件隊列中移除事件以及確定事件隊列是否為空的步驟可以作為不可分割的動作來執(zhí)行。這也具有避免競態(tài)條件的優(yōu)點。根據(jù)本發(fā)明的一個方面,可以提供鎖,以執(zhí)行所述不可分割的動作。備選地,可以使用原子計數(shù)器來執(zhí)行所述不可分割的動作。該原子計數(shù)器具有在相應的存儲或移除步驟期間遞增或遞減的計數(shù)值,所述計數(shù)值指示事件隊列是否為空,或者事件是否是事件隊列中的第一事件。所述方法可以用在具有Java企業(yè)版(JEE)處理平臺的電信處理平臺中。根據(jù)本發(fā)明的另一方面,提供了一種在具有用于并行地處理多個任務的多個處理線程的電信處理平臺中使用的資源適配器,所述任務存儲在任務隊列中。所述資源適配器包括一個或多個事件隊列。每個事件隊列與應用會話相關聯(lián),并且適于存儲與其對應應用會話相關聯(lián)的一個或多個事件。所述資源適配器包括同步單元,用于同步事件隊列中的事件的處理,所述同步單元配置為向事件隊列中的僅一個事件分配任務隊列中的任務。根據(jù)本發(fā)明的另一方面,提供了一種JEE簇,所述JEE簇包括如所附權利要求所述的資源適配器,或者適于執(zhí)行如所附權利要求所述的方法。本發(fā)明具有如下優(yōu)點有效地使用線程池來處理來自多個隊列的事件,不會不必要地阻止線程,而且同時并行處理盡可能多的事件(來自不同應用會話)。此外,本發(fā)明無死鎖和活鎖。
為了更好地理解本發(fā)明,以及更清楚地示出如何實現(xiàn)本發(fā)明,現(xiàn)在將參考作為示例的附圖,在附圖中圖1示出了已知JEE簇的典型架構;圖2示出了具有用于處理應用會話的資源適配器的JEE架構;圖3示出了根據(jù)本發(fā)明的實施例的資源適配器;圖4示出了根據(jù)本發(fā)明的實施例的方法中執(zhí)行的步驟;圖5示出了根據(jù)本發(fā)明的一個方面的方法中執(zhí)行的步驟;圖6示出了根據(jù)本發(fā)明的另一方面執(zhí)行的步驟;圖7示出了根據(jù)本發(fā)明的另一方面執(zhí)行的步驟;圖8示出了根據(jù)本發(fā)明的另一方面的執(zhí)行的步驟;以及圖9至12提供了根據(jù)本發(fā)明可以如何處理多個事件的示例。
具體實施例方式下面將在JEE平臺的上下文中描述的本發(fā)明。然而,應該理解,本發(fā)明還可應用于與線程池結合來執(zhí)行對事件和會話的處理的平臺的其他形式,即通過利用事件處理的任何會話框架。此外,盡管本發(fā)明是在電信環(huán)境的上下文中描述的,但是本發(fā)明還可應用于具有類似問題的其他應用。根據(jù)本發(fā)明,通過提供特別設計用于處理應用會話的資源適配器,通過將事件排隊在與特定應用會話相關聯(lián)的事件隊列中,以及一次僅將一個任務調度用于處理來自該隊列的事件,實現(xiàn)了事件同步。例如,事件可以排隊在FIFO隊列中,并且一次僅調度一個任務用于處理事件隊列中的第一事件。圖2示出了 JEE簇1,包括多個處理器3,每個處理器3通常包括若干容器,例如 Enterprise Java Beans 5 (EJB)、HTTP服務程序7、會話發(fā)起協(xié)議(SIP)服務程序9或者其他執(zhí)行單元13,如用于與傳統(tǒng)系統(tǒng)通信的資源適配器。圖2的架構還示出為包括會話資源適配器11,會話資源適配器11提供用于處理應用會話。資源適配器11包括一個或多個應用會話S1至&。每個應用會話S1至&包括會話狀態(tài)15以及事件隊列17,事件隊列17包含針對應用會話S1至&中的特定應用會話要執(zhí)行的事件的列表。作為示例,可以在電信系統(tǒng)中發(fā)起新呼叫時創(chuàng)建“應用會話”。由此,應用會話可以是與發(fā)起的呼叫相關聯(lián)的服務(例如用于向呼叫方播放通告)的形式。此外, 僅作為示例,“事件”是與呼叫期間出現(xiàn)的事件相關聯(lián)的術語,例如是被叫方應答呼叫、被叫方在其電話上鍵入信息,等等。應該注意,這些僅是可以被視為會話或事件的示例,本發(fā)明旨在包括可以處理的任何形式的應用會話或事件,并且包括基于電信、SIP或網(wǎng)絡的會話和事件。資源適配器11使用線程池19。線程池19可以在資源適配器11中提供,或者與系統(tǒng)中的其他組件共享。線程池19包括一個或多個處理線程、至tN,用于使得處理器3能夠并行地執(zhí)行多個任務。線程池19還包括任務隊列21,任務隊列21包含線程、至tN要執(zhí)行的任務的隊列。每個處理線程、至、一次處理一個任務。注意,在典型的電信應用中, 線程、至tN的數(shù)目通常比應用會話S1至&的數(shù)目少得多。如上所述,JEE平臺配置為并行地嘗試和執(zhí)行與系統(tǒng)中定義的線程一樣多的任務。 這在下述情況下可能出現(xiàn)問題如圖2所示的JEE平臺被用于處理電信服務,因為當多個線程、至tN并行地執(zhí)行來自特定應用會話S1至&的多個事件時,會話狀態(tài)會變?yōu)闊o效。換言之,應用會話中的事件并發(fā)地更新相同的會話狀態(tài)。如上面參考圖1所述,確保事件同步的一種方法將是使用鎖或旗語來創(chuàng)建特定應用會話S1至&的事件隊列17上的互斥。如此,當一個線程、至tN正在訪問特定應用會話 Sx的事件隊列17時(即,處理下一個事件),所有其他線程必須等待直到所述一個線程結束。其缺點在于使許多線程、至、等待,由此不是最佳地使用系統(tǒng)資源,這與JEE平臺原理相沖突。前面還提到,確保事件同步的另一方法將是向每個應用會話S1至&僅分配多個線程、至tN中的一個線程。如此,每個應用會話S1至&具有用于處理來自其事件隊列17的事件的專用線程。然而,這樣的解決方案具有上述線程池機制的缺點,以及因此違背了支配所有資源(包括線程)必須被管理的重要JEE平臺原理。該解決方案還具有以下缺點使用比所需的線程多得多的線程、至tN,以及由此資源效率不高。圖3示出了與本發(fā)明的實施例一起使用的架構。如圖2示出的,JEE平臺包括JEE 簇1,JEE簇1具有多個處理器3。處理器3可以是相同的,盡管并不一定如此,以及處理器 3可以分享JEE簇1的負載。處理器3可以包括一個或多個容器,例如Enterprise Java Beans 5 (EJB)、HTTP服務程序7、會話發(fā)起協(xié)議(SIP)服務程序9或者其他執(zhí)行單元13,如用于與傳統(tǒng)系統(tǒng)通信的其他資源適配器。如圖2示出的,處理器還可以包括會話資源適配器Ilo在圖3示出的架構中,用于處理應用會話的資源適配器11包括一個或多個應用會話S1至&。每個應用會話S1至&包括會話狀態(tài)15以及事件隊列17,事件隊列17包含針對應用會話S1至&中的特定應用會話要執(zhí)行的事件的集合。會話狀態(tài)15和事件隊列17存儲在存儲器中。根據(jù)一個實施例,會話狀態(tài)可以保存在發(fā)起應用會話的(以及相關聯(lián)的通信會話通常駐留的)處理器上的存儲器中。使用這種處理器親合關系(affinity)的形式具有以下優(yōu)點事件不需要不必要地(通過本地網(wǎng)絡) 從一個處理器路由到另一個處理器。而且,會話狀態(tài)不需要在簇上分發(fā),并且當所其駐留的處理器崩潰時,將自動停止存在會話狀態(tài)。注意,在不偏離本發(fā)明的范圍的情況下,會話狀態(tài)和事件隊列可以存儲在其他地方。在圖3示出的實施例中,資源適配器11還包括線程池19。線程池19包括一個或多個處理線程、至tN,用于使得處理器3能夠并行地執(zhí)行多個任務。線程池19還包括任務隊列21,任務隊列21包含處理線程、至tN要執(zhí)行的任務。每個處理線程、至tN —次處理一個任務。處理器可以具有任意數(shù)目的應用會話S1至&以及任意數(shù)目的線程、至tN。 注意,線程池19可以專用于資源適配器11,或者可以與處理器3上的其他組件共享。另外, 應該注意,盡管圖3中線程池19示為資源適配器11的一部分,但是線程池19還可以駐留在系統(tǒng)中的其他地方,即資源適配器11共享駐留在其他地方的線程池19的使用。
根據(jù)本發(fā)明,資源適配器11包括同步單元23,用于控制來自線程池的多個線程、 至tN如何處理多個應用會話S1至&中的事件。在另一個實施例中,每個應用會話可以包括用于防止競態(tài)條件或者使得特定步驟能夠以不可分割的方式執(zhí)行的裝置25,例如使用計數(shù)器25,如原子計數(shù)器,其將稍后在參考圖7和8的應用中描述。如上面參考圖2提到的,沒有圖3的同步單元23,JEE平臺對線程池19中的處理線程、至tN沒有控制,這將導致線程池19使用盡可能多的可用線程、至tN來盡可能快地消耗應用會話S1至&的多個事件隊列17,因此存在并行地處理來自特定應用會話的事件隊列17的多個事件的風險。然而,根據(jù)本發(fā)明的同步單元23配置為使得不是針對相關聯(lián)的應用會話的事件隊列17中的每個事件來調度任務。而是同步單元23配置為使得來自應用會話S1至&的事件隊列17的僅一個事件分配有任務。例如,當事件存儲在先入先出FIFO隊列形式的事件隊列17中時,同步單元23配置為控制資源適配器11的操作,使得僅事件隊列17中的第一事件具有在與線程池19相關聯(lián)的任務隊列21中調度的任務。圖4示出了本發(fā)明的實施例執(zhí)行的步驟。在步驟401中,在與應用會話相關聯(lián)的事件隊列中存儲一個或多個事件。如步驟402所示,僅針對特定應用會話的事件隊列中的一個事件分配任務隊列中的任務。下面描述可以如何實現(xiàn)該步驟的示例。當同步單元23確保來自事件隊列17的僅一個事件分配有任務時,存在兩種主要的情況。一個這樣的情況涉及事件被添加到事件隊列(即存儲或插入到事件隊列)時。另一個情況涉及從事件隊列移除事件時(即來自事件隊列的事件已經(jīng)被線程處理之后)。圖5示出了在事件隊列中插入事件時執(zhí)行的步驟。在步驟501,確定新事件要被插入特定應用會話的事件隊列。在步驟503,同步單元23配置為首先在存儲隊列中存儲該事件。隨后,在步驟505,同步單元23配置為確定所插入的事件是否是事件隊列中的第一事件。如果不是,則同步單元23不針對該特定事件來調度任務隊列中的任務。然而,如果在步驟505中確定該事件是隊列中的第一事件,則在步驟507中同步單元23針對該事件來調度任務隊列中的任務。如此,應該理解,僅事件隊列中的第一事件分配有任務隊列中的任務。如本申請的后面描述的,優(yōu)選地,將事件插入或存儲到隊列中的步驟(步驟503) 和確定該事件是否是隊列中的第一事件的步驟(步驟505)是不可分割的動作。換言之,這些步驟以下述方式執(zhí)行使得它們在系統(tǒng)中的任何其他線程不會對它們的執(zhí)行有任何影響的情況下執(zhí)行。圖6示出了在處理來自事件隊列的事件時執(zhí)行的步驟以及后續(xù)的處理步驟。應該理解,如上面參考圖5描述的,一個或多個事件已經(jīng)插入事件隊列。在步驟601,由線程處理分配有任務隊列中的任務的事件,即事件隊列中的第一事件。在處理該事件之后,在步驟 603從事件隊列中移除該事件。接著,在步驟605,同步單元23確定事件隊列是否為空。如果在步驟605確定事件隊列不為空,則在步驟607中同步單元23配置為針對為事件隊列中的另一事件(例如,下一個事件)來調度新任務。圖6示出的過程繼續(xù)在步驟601中由另一線程(或相同線程)處理事件隊列中的第一事件,直到在步驟605中確定事件隊列中不再存在任何事件時為止,在該情況下處理結束,不調度新任務(即,因為事件隊列中未留有要調度任務的任何事件)。
從上文可以看出,僅在已經(jīng)完全處理了第一事件之后,才可以處理來自特定事件隊列的第二事件。具體地,僅在已經(jīng)從隊列中移除了第一事件之后(在該時刻,第二事件已經(jīng)變成了第一事件),才可以處理第二事件。為了使得能夠實現(xiàn)期望的功能,在事件已經(jīng)被處理之后,從事件隊列中移除該事件。如在本申請中稍后描述的,優(yōu)選地,從事件隊列中移除事件的步驟(步驟603)和確定事件隊列是否為空的步驟(步驟605)是不可分割的動作。換言之,這些步驟以下述方式執(zhí)行使得它們在系統(tǒng)中的任何其他線程不會對它們的執(zhí)行有任何影響的情況下執(zhí)行。同步單元23的配置方式說明在線程處理的任務和事件處理例程之間進行區(qū)分, 而所述線程處理的任務和事件處理例程通常情況下是相同的。根據(jù)圖6,應該理解,根據(jù)3個不同步驟來調度任務。第一是僅針對隊列中的第一事件執(zhí)行事件處理例程。然后將該事件從其隊列中移除,接著執(zhí)行檢查以確定隊列是否具有更多事件,如果有,則針對事件隊列創(chuàng)建新任務,并且將該任務提供給線程池。因此,將觀察到存在將任務調度給線程池的任務隊列的兩個不同位置。針對事件隊列中“第一事件”的任務總是由插入事件的線程提供給線程池。針對“下一個事件”的任務總是由處理“第一事件”的線程提供給線程池。這可能導致競態(tài)條件的出現(xiàn),在競態(tài)條件中兩個線程均必須判定隊列何時為空執(zhí)行插入的線程必須在其插入事件之前判定隊列是否為空(S卩,因為如果隊列為空,則需要調度任務);執(zhí)行移除的線程必須在其已經(jīng)移除事件之后判定隊列是否為空(即,因為如果隊列不為空則需要調度新任務)。有可能出現(xiàn)下述情況在插入之前,事件隊列包含一個事件(正被處理的事件), 該事件在執(zhí)行插入的線程可以插入其事件之前被執(zhí)行處理的線程移除。因為插入線程沒有看到空隊列,所以其將不調度任務并且將不再處理任何事件。還可能出現(xiàn)下述情況存在兩個(或更多的)執(zhí)行插入的線程,兩者在插入事件之前都發(fā)現(xiàn)隊列為空。因為兩者都看到空隊列,所以兩者都將調度任務,從而將同時處理兩個事件。上面描述的競態(tài)條件可以通過將在事件隊列中插入或存儲事件的步驟和確定該事件是否是事件隊列中的第一事件的步驟作為不可分割的動作執(zhí)行來解決。類似地,競態(tài)條件可以通過將從事件隊列移除事件的步驟和確定該事件隊列是否為空的步驟作為不可分割的動作執(zhí)行來解決。這些不可分割的動作在圖5和6中分別示出為步驟509和609。圖7和8描述了為了避免上述競態(tài)條件而具有原子計數(shù)器的本發(fā)明的另一實施例的操作。在該另一實施例中,可以通過對事件隊列的原子計數(shù)器來實現(xiàn)不可分割的動作。 執(zhí)行處理的線程遞減原子計數(shù)器,以及所有執(zhí)行插入的線程遞增原子計數(shù)器。因為遞增和遞減是返回先前值的原子的或不可分割的操作,線程可以安全地確定隊列現(xiàn)在或過去是否為空。圖7示出了在將事件插入事件隊列時執(zhí)行的步驟。在步驟701,確定新事件要被插入到特定應用會話的事件隊列。在步驟703,同步單元23配置為首先在事件隊列中存儲事件。在步驟704,同步單元23配置為遞增計數(shù)器,指示另一個事件已經(jīng)被加入事件隊列。 在步驟706,同步單元23進一步配置為通過檢查在遞增計數(shù)值之前計數(shù)值是否為零(即,通過檢查事件隊列是否為空)來確定該事件是否是事件隊列中的第一事件。如果確定該事件
9不是事件隊列中的第一事件,即因為先前的計數(shù)值不為零,則同步單元23不針對該特定事件來調度任務隊列中的任務。如果在步驟706中確定該事件是第一事件,即因為先前的計數(shù)器值是零,則同步單元23針對該事件來調度任務隊列中的任務。如此,應該認識到,當將新事件插入事件隊列時遞增計數(shù)器提供了關于事件隊列是否為空的清楚指示。圖8示出了在處理來自事件隊列的事件時執(zhí)行的步驟以及后續(xù)處理步驟。應該理解,如上面參考圖7所描述的,在事件隊列中已經(jīng)插入了一個或多個事件,以及因此計數(shù)器具有非零的值。在步驟801,處理在分配有任務隊列中的任務的事件(即事件隊列中的第一事件)。在處理之后,在步驟803,從事件隊列中移除該事件。根據(jù)本發(fā)明的該實施例,在步驟804,同步單元配置為遞減計數(shù)器25,計數(shù)器25指示事件隊列是否為空。接著,在步驟806,同步單元確定事件隊列是否為空,即通過檢查計數(shù)器25的計數(shù)值來確定計數(shù)值是否為零。如果在步驟806確定事件隊列不為空,則在步驟 807同步單元23配置為針對事件隊列中的另一事件(例如下一事件)來調度新任務。在新任務的輪次,在來自線程池的新線程中,該新任務執(zhí)行與圖8中描述的步驟相同的步驟。該過程繼續(xù),直到在步驟806中確定事件隊列中不再有更多事件(即計數(shù)值為零) 時為止,在該情況下處理結束。應該理解,在從事件隊列中移除事件時遞減計數(shù)器提供了關于事件隊列是否為空的清楚指示。盡管已經(jīng)將計數(shù)器描述為用于指示事件隊列是否為空從而提供圖5、6、7和8示出的步驟的不可分割性的實現(xiàn)的裝置,但是應該理解,可以使用其他裝置來提供該指示以及因此避免競態(tài)條件,例如鎖的使用,例如旗語。應該理解,上面描述的本發(fā)明具有以下優(yōu)點有效地使用線程池來處理來自多個隊列的事件,不會不必要地阻止線程,而且同時并行處理盡可能多的事件(來自不同會話)。此外,所描述的系統(tǒng)無死鎖和活鎖。圖9-12提供用于說明根據(jù)本發(fā)明如何同步事件的處理。在該示例中,描述了四個應用會話S1至S4,以及具有兩個處理線程、、t2的線程池。參考圖9,應用會話SpS2A3和 、示出為分別具有三個事件(ela,elb,elC)、兩個事件(eh,e2b)、一個事件(e3a)和兩個事件。線程、和t2示出為都是空閑的,并且已經(jīng)針對應用會話S” S2和&調度了任務。圖10示出此時將發(fā)生的情況。線程、執(zhí)行針對應用會話S1的任務,以及因此執(zhí)行針對來自應用會話S1的事件隊列的事件ela的事件處理例程。并行地,線程t2執(zhí)行針對應用會話&的任務,以及因此執(zhí)行針對來自應用會話&的事件隊列的事件eh的事件處理例程。立即從任務隊列移除這些任務,在任務隊列中僅留下針對應用會話&的任務。因為僅存在兩個線程、、t2,所以針對應用會話&的任務必須等待線程、、t2之一變?yōu)榭臻e。參考圖11,假設某個其他線程現(xiàn)在將事件Ma插入針對應用會話\的事件隊列。 因為針對應用會話、的事件隊列為空,同步單元在線程池的任務隊列中調度針對應用會話 、的新任務。還假設此后線程、完成其對事件e2a的處理。然后線程t2從應用會話&的事件隊列中移除事件e2a。因為應用會話&的事件隊列不為空,所以同步單元在任務隊列中調度針對應用會話&的新任務。具體地,同步單元將針對來自應用會話&的事件隊列的下一個事件e2b的任務調度進任務隊列。此外,因為線程t2現(xiàn)在空閑,因此線程t2將開始執(zhí)行針對應用會話&的任務,該任務是先前在任務隊列中等待處理的(如上文參考圖9討論的),以及因此處理事件e3a。
參考圖12,現(xiàn)在假設線程、完成處理事件ela。線程、由此從應用會話S1的事件隊列中移除事件ela,因為應用會話Si的事件隊列不為空,所以同步單元將針對來自應用會話S1的事件elb的新任務調度到任務隊列。因為線程、是空閑的,因此線程、將開始執(zhí)行針對應用會話、的任務,從圖11可以看出,針對應用會話、的任務在任務隊列中等待處理。如此,線程、處理事件e4a。假設不久之后,線程t2結束對來自應用會話&的事件 e3a的處理。線程t2從應用會話&的事件隊列中移除事件e3a。因為應用會話&的事件隊列是空的,所以同步單元不提供針對應用會話&的新任務。因為線程、是空閑的,所以線程t2開始執(zhí)行針對應用會話&的任務,由此處理來自應用會話&的事件e2b。圖9-12描述的過程繼續(xù),其中同步單元確保在任何特定時刻每個隊列僅一個事件被調度為任務隊列中的任務。因此,上面描述的本發(fā)明實現(xiàn)了通過確保針對每個應用會話一次僅處理一個事件,使得能夠提供事件同步。上述方法的使用大大簡化了 JEE平臺上電信服務的編寫。該方法具有下述優(yōu)點 解決了與事件同步相關聯(lián)的問題,不會變得資源低效,同時允許管理所有資源。盡管上述實施例涉及使用其自己的線程池19的資源適配器11,但是資源適配器 11還可以使用平臺的線程池。這允許管理這些系統(tǒng)資源。此外,因為該框架獨立于任何技術,所以可以與眾多技術結合使用,例如EJB、服務程序以及其他資源適配器。注意,該方法優(yōu)選地實現(xiàn)為使用JEE連接器架構(JCA)的資源適配器11。JCA被提供用于與傳統(tǒng)系統(tǒng)通信,但是適合于實現(xiàn)在整個JEE平臺上使用本發(fā)明的事件同步。本發(fā)明具有下述優(yōu)點不以任何方式改變與線程池相關聯(lián)的控制軟件——線程池將如其標準行為一樣繼續(xù)嘗試盡可能快地執(zhí)行來自任務隊列的任務。然而,本發(fā)明的會話資源適配器中的同步單元(在事件隊列和線程池之間提供)管理每個事件隊列最多僅一個任務。在傳統(tǒng)的系統(tǒng)中,不存在這樣的機制,并且每個事件將等于任務。注意,盡管提到了在計數(shù)值為零時計數(shù)器為空,但是應該理解可以選擇任何值作為參考來指示計數(shù)器為空。注意,盡管流程圖示出某些步驟以特定順序執(zhí)行,但是這些步驟中的一些步驟可以用不同的順序來執(zhí)行,而不會偏離所附權利要求定義的本發(fā)明的范圍。應該注意,上述實施例用于說明本發(fā)明,而不是限制本發(fā)明,以及本領域技術人員將能夠在不偏離所附權利要求的范圍內設計出多種備選實施例?!鞍ā币辉~不排除存在與權利要求中列出的單元或步驟不同的單元或步驟,“一”或“一個”不排除多個,以及單個處理器或其他單元可以實現(xiàn)權利要求中記載的若干單元的功能。權利要求中的任何參考標記不應該解釋為限制其范圍。
權利要求
1.一種在電信處理平臺中同步與應用會話相關聯(lián)的事件的處理的方法,所述電信處理平臺具有用于并行地處理多個任務的多個處理線程,所述任務存儲在任務隊列中,所述方法包括以下步驟在與特定應用會話相關聯(lián)的事件隊列中存儲一個或多個事件,以及向特定應用會話的事件隊列中的僅一個事件分配所述任務隊列中的任務。
2.根據(jù)權利要求1中所述的方法,其中,在事件隊列中存儲事件的步驟包括以下步驟 確定所述事件是否是所述事件隊列中的第一事件,如果是,則向該特定事件分配所述任務隊列中的任務。
3.根據(jù)權利要求1或2所述的方法,還包括從事件隊列中移除已處理的事件的步驟,其中,從事件隊列中移除已處理的事件的步驟包括以下步驟確定所述事件隊列是否為空,如果不為空,則向所述事件隊列中的另一事件分配所述任務隊列中的任務。
4.根據(jù)權利要求3所述的方法,其中,分配任務的步驟包括以下步驟向事件隊列中的下一個事件分配任務。
5.根據(jù)權利要求2所述的方法,其中,存儲步驟和確定步驟作為不可分割的動作來執(zhí)行。
6.根據(jù)權利要求3或4所述的方法,其中,移除步驟和確定步驟作為不可分割的動作來執(zhí)行。
7.根據(jù)權利要求5或6所述的方法,還包括以下步驟使用鎖來執(zhí)行所述不可分割的動作。
8.根據(jù)權利要求5或6所述的方法,還包括以下步驟使用原子計數(shù)器來執(zhí)行所述不可分割的動作。
9.根據(jù)權利要求8所述的方法,其中,所述原子計數(shù)器具有在相應的存儲或移除步驟期間遞增或遞減的計數(shù)值,所述計數(shù)值指示所述事件隊列是否為空或者事件是否是事件隊列中的第一事件。
10.根據(jù)權利要求1至9中任一項所述的方法,其中,所述電信處理平臺是Java企業(yè)版 JEE處理平臺。
11.一種在具有用于并行地處理多個任務的多個處理線程的電信處理平臺中使用的資源適配器,所述任務存儲在任務隊列中,所述資源適配器包括一個或多個事件隊列,每個事件隊列與應用會話相關聯(lián),并且適于存儲與其對應應用會話相關聯(lián)的一個或多個事件;以及同步單元,用于同步事件隊列中的事件的處理,所述同步單元配置為向所述事件隊列中的僅一個事件分配所述任務隊列中的任務。
12.根據(jù)權利要求11所述的資源適配器,其中,所述同步單元配置為在將事件存儲到事件隊列中時,確定所述事件是否是要插入事件隊列的第一事件;如果是,則向該特定事件分配所述任務隊列中的任務。
13.根據(jù)權利要求11或12所述的資源適配器,其中,所述同步單元配置為在從事件隊列中移除事件時,確定所述事件隊列是否為空,如果不為空,則向所述事件隊列中的另一事件分配所述任務隊列中的任務。
14.根據(jù)權利要求13所述的資源適配器,其中,所述同步單元適于向所述事件隊列中的下一個事件分配任務。
15.根據(jù)權利要求11至14中任一項所述的資源適配器,還包括原子計數(shù)器,所述原子計數(shù)器具有指示對應事件隊列是否為空的計數(shù)值。
16.根據(jù)權利要求15所述的資源適配器,其中,所述同步單元配置為在所述事件隊列中存儲事件時遞增所述原子計數(shù)器的計數(shù)值。
17.根據(jù)權利要求15或16所述的資源適配器,其中,所述同步單元配置為在從所述事件隊列中移除事件時遞減所述原子計數(shù)器的計數(shù)值。
18.根據(jù)權利要求11至17中任一項所述的資源適配器,其中,所述事件隊列包括先入先出隊列。
19.根據(jù)權利要求11至18中任一項所述的資源適配器,其中,所述電信處理平臺是 Java企業(yè)版JEE處理平臺。
20.一種JEE簇,包括根據(jù)權利要求11至19中任一項所述的資源適配器,或者適于執(zhí)行權利要求1至10中所述的方法。
全文摘要
處理平臺,例如Java企業(yè)版(JEE)平臺,包括具有多個處理器(3)的JEE簇,所述多個處理器包括用于處理與一個或多個應用會話Si至Sn相關聯(lián)的事件的資源適配器(11)。每個應用會話Si至Sn包括會話狀態(tài)(15)和事件隊列(17),事件隊列(17)包含針對會話S1至Sn中的特定會話要執(zhí)行的事件的列表。線程池(19)包括一個或多個處理線程t1至tN,用于使得處理器(3)能夠并行地執(zhí)行多個任務。線程池(19)包括任務隊列(21),所述任務隊列(21)包含處理線程t1至tN要執(zhí)行的任務。資源適配器(11)包括同步單元(23),用于控制來自線程池的多個線程t1至tN如何處理多個應用會話Si至Sn中的事件。具體地,同步單元(23)配置為使得排隊在事件隊列(17)中的僅一個事件調度有任務隊列(21)中的任務,由此防止并行地執(zhí)行來自應用會話的特定事件隊列的多于一個事件。
文檔編號G06F9/46GK102473107SQ200980160635
公開日2012年5月23日 申請日期2009年7月28日 優(yōu)先權日2009年7月28日
發(fā)明者弗雷德里克·胡戈·芝瓦爾 申請人:瑞典愛立信有限公司