黃河清
(福建廣播電視大學(xué) 漳州分校,福建 漳州 363000)
學(xué)習(xí)流引擎(Learning Flow Engine)屬于軟件,它是為學(xué)習(xí)流實(shí)例的執(zhí)行提供運(yùn)行服務(wù)的環(huán)境[1],稱為“引擎” 。學(xué)習(xí)流引擎負(fù)責(zé)在線學(xué)習(xí)(E-learning)過程的定義和控制、學(xué)習(xí)活動的組織及其執(zhí)行順序的安排、學(xué)習(xí)項(xiàng)目的添加、學(xué)習(xí)應(yīng)用工具的調(diào)用、在線學(xué)習(xí)內(nèi)部數(shù)據(jù)的維護(hù)等等。作為學(xué)習(xí)流(Learning Flow)執(zhí)行服務(wù)的實(shí)體,學(xué)習(xí)流執(zhí)行服務(wù)模塊驅(qū)動著整個(gè)學(xué)習(xí)流管理系統(tǒng)的運(yùn)行。因此,學(xué)習(xí)流引擎是E-learning系統(tǒng)的重要部分,它能為E-learning提供學(xué)習(xí)活動和學(xué)習(xí)過程的有效控制,是學(xué)習(xí)流管理系統(tǒng)的核心[2]。
學(xué)習(xí)流引擎(Learning Flow Engine)作為學(xué)習(xí)流(Learning Flow)的核心軟件組元,它決定了整個(gè)學(xué)習(xí)流管理系統(tǒng)(LFMS)的功能和效率。應(yīng)用工作流技術(shù)的基本思想和方法,解決E-learning在大數(shù)據(jù)環(huán)境下的學(xué)習(xí)流程控制問題,進(jìn)行面向大數(shù)據(jù)的學(xué)習(xí)流引擎的模型構(gòu)建及技術(shù)實(shí)現(xiàn)研究,主要有以下幾個(gè)方面:
學(xué)習(xí)流引擎的功能和性能:學(xué)習(xí)流引擎的功能和性能是整個(gè)學(xué)習(xí)流引擎研究中的重點(diǎn)。這方面首先要研究學(xué)習(xí)流程的特點(diǎn),從需求分析的角度,綜合遠(yuǎn)程教育及其項(xiàng)目要求[3]、教學(xué)支持系統(tǒng)架構(gòu)[4]、教育系統(tǒng)及考試系統(tǒng)功能[5]、參考學(xué)習(xí)型組織的特點(diǎn)[6-8]、及各種教育模式(例如:學(xué)歷教育、社區(qū)教育[7-8]、老年教育[9])的不同需求和共同特征,提取其特征和規(guī)律。研究學(xué)習(xí)情況的因素,總結(jié)在線學(xué)習(xí)的屬性和功能,如自主化、個(gè)性化、智能化等,并應(yīng)用建模技術(shù)和軟件方法構(gòu)建所需學(xué)習(xí)模型的功能[10]。性能方面要提高引擎的執(zhí)行效率、以及同時(shí)處理多個(gè)任務(wù)的能力。
分布式學(xué)習(xí)流引擎:分布式學(xué)習(xí)流引擎使得學(xué)習(xí)流管理系統(tǒng)能夠支持大范圍、大數(shù)據(jù)、跨地域的網(wǎng)絡(luò)學(xué)習(xí)。目前在大數(shù)據(jù)、互聯(lián)網(wǎng)、移動通信的環(huán)境下,分布式技術(shù)的支持是E-learning發(fā)展的主流,無論是學(xué)校教育或社區(qū)教育,無論是什么年齡段的人群,都在海量信息中。全民的在線學(xué)習(xí)、智慧學(xué)習(xí)、遠(yuǎn)程教育等等,其核心方法都需要分布式技術(shù)的支持及應(yīng)用。尤其是當(dāng)學(xué)習(xí)流運(yùn)行在大規(guī)模分布式的大數(shù)據(jù)集上時(shí),學(xué)習(xí)流中的數(shù)據(jù)管理需求更加復(fù)雜。
學(xué)習(xí)流數(shù)據(jù)管理:在大數(shù)據(jù)環(huán)境,學(xué)習(xí)流引擎需要對存儲在云中的學(xué)習(xí)資源大數(shù)據(jù)進(jìn)行處理,結(jié)束并行運(yùn)算時(shí),需要對云端產(chǎn)生的數(shù)據(jù)進(jìn)行存儲,還可能要對來自各種環(huán)境和各種學(xué)習(xí)流管理系統(tǒng)的相關(guān)的數(shù)據(jù)進(jìn)行管理。因此需要支持大數(shù)據(jù)學(xué)習(xí)流的數(shù)據(jù)管理方案,可行有效的是采用將數(shù)據(jù)存儲和學(xué)習(xí)流的定義和執(zhí)行分離的方法。
引擎的事務(wù)處理能力:指學(xué)習(xí)流引擎應(yīng)對運(yùn)行時(shí)異常和運(yùn)行時(shí)錯(cuò)誤的能力。在引擎的設(shè)計(jì)過程中[1],必須提供恢復(fù)機(jī)制使得引擎能夠及時(shí)處理異常和錯(cuò)誤并從中恢復(fù),提高引擎的健壯性和穩(wěn)定性。
柔性學(xué)習(xí)流引擎、動態(tài)學(xué)習(xí)流引擎、智能學(xué)習(xí)流引擎等:主要研究如何提高學(xué)習(xí)流引擎的自適應(yīng)能力。學(xué)習(xí)過程及內(nèi)容是復(fù)雜多變的,有時(shí)在學(xué)習(xí)之前并不能獲得完整的過程定義,而只能獲得部分定義;或者在學(xué)習(xí)流運(yùn)行過程中需要根據(jù)實(shí)際需求動態(tài)修改學(xué)習(xí)流過程定義。因此,學(xué)習(xí)流引擎須適應(yīng)流程的動態(tài)增加和修改,使得增加或修改后的流程能夠正常運(yùn)行。
引擎的安全:這方面主要研究如何提高引擎的安全性能,保證在使用學(xué)習(xí)流的過程中,用戶隱私和機(jī)密信息不會泄露,保證用戶數(shù)據(jù)不受到侵犯,還要防范使用大數(shù)據(jù)出現(xiàn)的安全隱患。
在面向大數(shù)據(jù)的需求下,學(xué)習(xí)流中的數(shù)據(jù)管理更加復(fù)雜,需要靈活有效的數(shù)據(jù)管理,用對象存儲的方法構(gòu)建數(shù)據(jù)管理方案,將數(shù)據(jù)存儲與執(zhí)行分離,以支持大數(shù)據(jù)學(xué)習(xí)流,從而使應(yīng)用能在同一時(shí)間對多個(gè)分布式的資源進(jìn)行調(diào)用,實(shí)現(xiàn)能將某個(gè)任務(wù)(TASK)從某個(gè)執(zhí)行點(diǎn)遷移至另一個(gè)執(zhí)行點(diǎn),而不需要移動所有數(shù)據(jù)。
有不少流程應(yīng)用的文件管理系統(tǒng)是基于POSIX ( Portable Operating System Interface),就是說流程中的每個(gè)任務(wù)可打開1個(gè)或多個(gè)輸入文件、進(jìn)行讀和寫等操作,之后關(guān)閉。在這樣的情況下,學(xué)習(xí)流管理系統(tǒng)需要提供可以訪問POSIX 文件系統(tǒng)數(shù)據(jù)的運(yùn)行環(huán)境。云端在計(jì)算節(jié)點(diǎn)附近有對象存儲器,可為多個(gè)文件系統(tǒng)提供服務(wù),如提供存儲、檢索和刪除數(shù)據(jù)對象( 或文件) 等有限的存儲操作。
為了完成學(xué)習(xí)流引擎的設(shè)計(jì)與實(shí)現(xiàn),下面從學(xué)習(xí)流引擎的功能分析與設(shè)計(jì)開始,進(jìn)行系統(tǒng)構(gòu)建和系統(tǒng)實(shí)現(xiàn),并以基于 JVM的技術(shù)為實(shí)例,將 JVM資源分配和任務(wù)調(diào)度處理的理論和方法用于學(xué)習(xí)流引擎的研發(fā)。采用流程管理以過程為中心,協(xié)同平臺以角色為中心的技術(shù)方法[11]。
學(xué)習(xí)流引擎(Learning Flow Engine)的基本功能包括:控制學(xué)習(xí)過程定義及學(xué)習(xí)活動的導(dǎo)航、提供進(jìn)入學(xué)習(xí)活動或退出學(xué)習(xí)活動的觸發(fā)條件以完成狀態(tài)控制、提供流程并行執(zhí)行或者順序執(zhí)行的選項(xiàng)、提供學(xué)習(xí)流管理信息及數(shù)據(jù)的交換、還提供用戶要執(zhí)行的任務(wù)分配、設(shè)計(jì)用戶操作接口、提供有關(guān)的應(yīng)用程序、對整個(gè)系統(tǒng)進(jìn)行管理等等。下面對這些基本功能進(jìn)行分析和設(shè)計(jì)。
過程定義導(dǎo)入/導(dǎo)出接口,是過程建模和學(xué)習(xí)流執(zhí)行服務(wù)之間的接口,該接口具有API調(diào)用功能,能進(jìn)行格式轉(zhuǎn)換,因而它是支持過程定義和信息轉(zhuǎn)換的。學(xué)習(xí)流引擎必須在過程定義轉(zhuǎn)換接口中提供對過程定義進(jìn)行轉(zhuǎn)換的功能,學(xué)習(xí)流引擎的過程定義轉(zhuǎn)換功能有[1]:
第一,對過程及其運(yùn)行環(huán)境之間的一個(gè)分離點(diǎn)進(jìn)行定義,使得采用一種建模工具所產(chǎn)生的過程定義,還可以用于其他的學(xué)習(xí)流的輸入,使得用戶對建模的選擇獨(dú)立于對學(xué)習(xí)流管理軟件種類的選擇。
第二,針對能協(xié)同工作的學(xué)習(xí)流引擎及系統(tǒng),做好提供輸出過程定義的功能,提供分布的運(yùn)行服務(wù)。
使用了過程定義作為接口,并在學(xué)習(xí)流引擎中提供對過程定義進(jìn)行轉(zhuǎn)換的功能。同時(shí)還必須提供一套接口或者API,以實(shí)現(xiàn)各種學(xué)習(xí)過程(例如自主學(xué)習(xí)、培訓(xùn)項(xiàng)目、學(xué)習(xí)型組織等等)的過程定義的解釋和修改等功能[3-5]。
控制過程和活動狀態(tài)是學(xué)習(xí)流引擎最重要的功能。學(xué)習(xí)流的工作過程可用狀態(tài)變遷機(jī)器來表達(dá),在響應(yīng)外部事件,或?qū)W習(xí)流引擎的控制判斷之后,過程或者活動實(shí)例的狀態(tài)隨即發(fā)生變化。
對于過程實(shí)例的基本狀態(tài)變遷[11]如圖1所示,過程定義時(shí),當(dāng)發(fā)生轉(zhuǎn)移的前提條件成立,就發(fā)生狀態(tài)轉(zhuǎn)移(狀態(tài)轉(zhuǎn)移用箭頭表示)。
圖1 學(xué)習(xí)過程基本狀態(tài)變遷圖
圖1所示的學(xué)習(xí)過程里,其基本狀態(tài)變遷共有五個(gè)狀態(tài),首先是"初始化"狀態(tài),此時(shí), 創(chuàng)建過程實(shí)例,創(chuàng)建與過程狀態(tài)相關(guān)的時(shí)間、日期、及各相關(guān)數(shù)據(jù);處于"初始化"時(shí),流程尚未被執(zhí)行,因?yàn)閳?zhí)行的條件尚未滿足。啟動后,當(dāng)條件滿足時(shí),才可以執(zhí)行過程中的活動進(jìn)入“運(yùn)行中”狀態(tài)。例如,過程當(dāng)中的一個(gè)或多個(gè)活動已經(jīng)被執(zhí)行,如果過程里的活動已處于運(yùn)行中,則處于“激活”狀態(tài)。而在過程活動不能執(zhí)行的情況下,則處于“掛起”狀態(tài)。如果過程實(shí)例的結(jié)束條件成立,那么就可以轉(zhuǎn)到“完成”狀態(tài)。如果過程實(shí)例非正常結(jié)束,即中途被停止運(yùn)行,則進(jìn)入“終止”狀態(tài)。
特別注意的是,在此是不允許中斷活動的,學(xué)習(xí)流服務(wù)器開始了某個(gè)活動后,就不允許中途掛起或終止了,如果要中斷,就要等待全部處于運(yùn)行狀態(tài)的活動都結(jié)束以后,過程返回到了正在運(yùn)行中的狀態(tài),才允許中斷、終止、掛起或重啟等等。在具體處理時(shí),可建立 “原子單元”, 一個(gè)單元內(nèi)包括幾個(gè)互為相關(guān)的活動,一個(gè)原子單元內(nèi)的各個(gè)活動,必須全部執(zhí)行完,萬一執(zhí)行出現(xiàn)了意外情況,那么就會返回到始點(diǎn),各個(gè)活動都重新再執(zhí)行。圖2描述了活動實(shí)例的基本狀態(tài)轉(zhuǎn)移[12]。
圖2 活動實(shí)例的基本狀態(tài)轉(zhuǎn)移
圖2所示的活動實(shí)例的基本狀態(tài)有:未激活狀態(tài),此時(shí)活動早就被創(chuàng)建,但活動的進(jìn)入條件尚未滿足,同時(shí)也沒有需要處理的任務(wù)。激活狀態(tài):創(chuàng)建好的任務(wù),分配這個(gè)活動來進(jìn)行任務(wù)的處理。掛起狀態(tài):此時(shí)活動實(shí)例被暫時(shí)調(diào)離,當(dāng)條件允許時(shí),才再被調(diào)回。完成狀態(tài):此時(shí)活動實(shí)例執(zhí)行完成。
所述的基本狀態(tài)及其轉(zhuǎn)移是每個(gè)學(xué)習(xí)流引擎必備的。當(dāng)然不同類型的學(xué)習(xí)流引擎其實(shí)現(xiàn)的狀態(tài)和轉(zhuǎn)移的類型可以不盡相同。
學(xué)習(xí)流的內(nèi)部控制數(shù)據(jù)支持其內(nèi)部狀態(tài)信息,這種控制數(shù)據(jù)是禁止被訪問和轉(zhuǎn)換的。不過為了響應(yīng)某方面的特殊操作,也需要對外部提供一些相關(guān)內(nèi)容及信息。同種的學(xué)習(xí)流執(zhí)行服務(wù)器,可以通過使用內(nèi)部對話在學(xué)習(xí)流機(jī)之間進(jìn)行信息交換。這些數(shù)據(jù)主要有如學(xué)習(xí)流控制數(shù)據(jù)、學(xué)習(xí)流應(yīng)用數(shù)據(jù)等等[1];對于這些數(shù)據(jù)的交換和維護(hù),可以在不同的活動實(shí)例之間、學(xué)習(xí)流引擎與外部應(yīng)用程序之間、學(xué)習(xí)流引擎與學(xué)習(xí)流引擎之間等等,進(jìn)行交互。
學(xué)習(xí)流應(yīng)用程序要實(shí)現(xiàn)相關(guān)數(shù)據(jù)交換,可通過學(xué)習(xí)流引擎的下面三個(gè)接口來處理:一個(gè)是客戶端應(yīng)用程序的接口、二是應(yīng)用程序調(diào)用接口、三是學(xué)習(xí)流機(jī)的協(xié)作接口。
學(xué)習(xí)流引擎能分派任務(wù)和信息給參與者,這個(gè)分派的能力是學(xué)習(xí)流引擎的重要區(qū)分特征。在不同的級別上執(zhí)行分派功能(如:學(xué)習(xí)小組、班級、年級、學(xué)校等),這取決于學(xué)習(xí)流的范圍;還可以使用各種消息傳遞、分布式對象技術(shù)等多種不同的消息機(jī)制。
學(xué)習(xí)流的制定服務(wù)(任務(wù)分配)是核心功能組件,通過引擎的任務(wù)分配接口將任務(wù)提供給用戶、以及分布在學(xué)習(xí)流的范圍內(nèi)的應(yīng)用程序。每一個(gè)這樣的接口都是一個(gè)潛在的、可以與其他學(xué)習(xí)流服務(wù)、其他基礎(chǔ)組件或應(yīng)用程序組件進(jìn)行集成的點(diǎn)[13]。
學(xué)習(xí)系統(tǒng)里,學(xué)習(xí)流的用戶交互是通過已定義的、客戶端應(yīng)用程序和學(xué)習(xí)流引擎之間的接口進(jìn)行的,最終完成各項(xiàng)自主學(xué)習(xí)及規(guī)定考試任務(wù)[3,6]。
學(xué)習(xí)流引擎客戶端應(yīng)用接口應(yīng)提供的功能有[12]:學(xué)習(xí)流定義操作,即對學(xué)習(xí)流過程、對學(xué)習(xí)流屬性的恢復(fù)或者查詢等等給予定義。建立會話,連接或者斷開客戶與學(xué)習(xí)流管理系統(tǒng)之間的會話。過程控制,對過程實(shí)例進(jìn)行創(chuàng)建/開始/結(jié)束、掛起/喚醒等。還有查詢過程狀態(tài)、任務(wù)表/任務(wù)項(xiàng)處理、過程管理、數(shù)據(jù)處理、應(yīng)用程序調(diào)用等。
在學(xué)習(xí)流執(zhí)行的過程中,不可避免地需要調(diào)用外部的應(yīng)用程序,需要對不同平臺及各種環(huán)境下執(zhí)行調(diào)用的邏輯進(jìn)行處理,在大數(shù)據(jù)共享大環(huán)境里,常常要使用公共格式,進(jìn)行各種數(shù)據(jù)或參數(shù)的傳遞。
學(xué)習(xí)流引擎可在本地使用過程定義中的信息來確定活動的性質(zhì)以及要調(diào)用的程序類型及參數(shù)。供調(diào)用的子程序或者存于學(xué)習(xí)流引擎相同的平臺里,也可能存放在諸如各種云中或其他平臺;為了方便調(diào)用,過程定義應(yīng)有具體的尋址信息和應(yīng)用程序類型的數(shù)據(jù)。
其中,學(xué)習(xí)流引擎的應(yīng)用程序調(diào)用接口的主要功能有[12]:首先是能連接/斷開應(yīng)用程序會話,即能夠創(chuàng)建會話;再者是能開始或掛起以及恢復(fù)或放棄活動,能查詢活動的屬性,這是活動管理;還有重要的功能就是數(shù)據(jù)處理,能提供學(xué)習(xí)流的數(shù)據(jù)或者應(yīng)用程序數(shù)據(jù)或者相關(guān)數(shù)據(jù)地址。
作為一個(gè)完整的學(xué)習(xí)流管理系統(tǒng),學(xué)習(xí)流執(zhí)行服務(wù)必須對外界提供一個(gè)用來進(jìn)行系統(tǒng)管理的接口。如果這一接口符合標(biāo)準(zhǔn),則可以開發(fā)統(tǒng)一的管理工具,對不同的學(xué)習(xí)流管理系統(tǒng)進(jìn)行管理[4-5]。
學(xué)習(xí)流引擎的系統(tǒng)接口的基本功能有[2]:用戶及角色的管理、資源與過程的控制、審查管理、查詢過程狀態(tài)。打開及關(guān)閉過程(或者活動)實(shí)例查詢,提取過程(或者活動)實(shí)例的相關(guān)信息。
學(xué)習(xí)流引擎在實(shí)現(xiàn)上述功能的時(shí)候,并不是將所有的功能都實(shí)現(xiàn),一般是根據(jù)需求實(shí)現(xiàn)某幾個(gè)需要的功能,不同的系統(tǒng)往往在功能上相差甚遠(yuǎn)。雖然是面向不同的學(xué)習(xí)用戶及滿足不同的學(xué)習(xí)需求,但是最重要的原因是統(tǒng)一的標(biāo)準(zhǔn)尚缺乏。因此,這些功能只作為參考,對于某個(gè)具體的學(xué)習(xí)流,通常不用全部實(shí)現(xiàn)這些功能。但是,對于模型的解釋和對過程和活動的控制是所有的引擎都必須要實(shí)現(xiàn)的功能,這是學(xué)習(xí)流引擎的核心,不具備這種功能就不能稱為學(xué)習(xí)流引擎。
對于學(xué)習(xí)流參考模型和學(xué)習(xí)流引擎的具體功能,在實(shí)現(xiàn)時(shí)還要考慮很多具體的設(shè)計(jì)問題,需要考慮實(shí)際應(yīng)用中的效率,實(shí)現(xiàn)成本等各種問題。不同的實(shí)現(xiàn)方案各有優(yōu)缺點(diǎn),一般來說,提出一套學(xué)習(xí)流的實(shí)現(xiàn)方案要考慮3個(gè)方面:
首先要確定學(xué)習(xí)流模型,構(gòu)建學(xué)習(xí)流過程描述及其實(shí)現(xiàn)方案。雖然學(xué)習(xí)流模型和實(shí)現(xiàn)方案之間有一定的關(guān)系,但是他們不能相互確定。就是說,一種方案可以執(zhí)行不同的模型,同一種學(xué)習(xí)流模型可以有不同的實(shí)現(xiàn)方案。學(xué)習(xí)流模型所構(gòu)建的是系統(tǒng)對過程的描述,而學(xué)習(xí)流的實(shí)現(xiàn)方案是學(xué)習(xí)流管理系統(tǒng)自身的運(yùn)行機(jī)制。模型與實(shí)現(xiàn)之間無特定的對應(yīng)關(guān)系。
其次是選擇實(shí)現(xiàn)方案采用的技術(shù),主要指底層通信基礎(chǔ)。例如:CORBA, DCOM, MQSERIES,WEB服務(wù)器等等。
再次是確定系統(tǒng)的模塊劃分,確定各個(gè)模塊之間的協(xié)作關(guān)系,以完成學(xué)習(xí)流的運(yùn)轉(zhuǎn)。對于不同的設(shè)計(jì)模式,其模塊和協(xié)作的設(shè)計(jì)都可能不相同。
針對學(xué)習(xí)流管理系統(tǒng)的不同要求,其實(shí)現(xiàn)的軟件體系結(jié)構(gòu)也是不同的。設(shè)計(jì)學(xué)習(xí)流引擎時(shí),根據(jù)數(shù)據(jù)存儲和運(yùn)行環(huán)境的不同要求,構(gòu)建的體系結(jié)構(gòu)相應(yīng)也不同,它們除了具備學(xué)習(xí)流的基本功能外,還可以進(jìn)行應(yīng)用集成,進(jìn)行嵌入式應(yīng)用[13]?;痉椒ㄊ腔诠ぷ髁饕娴膶?shí)現(xiàn)技術(shù),設(shè)計(jì)所需的學(xué)習(xí)流引擎[3]。
從實(shí)現(xiàn)技術(shù)的角度,常見的學(xué)習(xí)流引擎有以下幾種類型:基于Domino的、基于消息中間件的、基于微軟平臺的、基于J2EE的學(xué)習(xí)流引擎。
其中,J2EE采用B/S多層結(jié)構(gòu)的,J2EE技術(shù)架構(gòu)保證了系統(tǒng)能夠進(jìn)行長期穩(wěn)定的功能擴(kuò)展[14],基于J2EE的學(xué)習(xí)流引擎具有實(shí)現(xiàn)簡單、性能優(yōu)良、系統(tǒng)柔性、擴(kuò)展便捷、配置簡化的優(yōu)點(diǎn)??梢允箤W(xué)習(xí)流管理系統(tǒng)具有分布式與跨平臺的特性[15]。因此,基于J2EE的學(xué)習(xí)流引擎是討論的重點(diǎn),下面詳細(xì)討論基于J2EE的學(xué)習(xí)流。
學(xué)習(xí)流引擎用J2EE架構(gòu)實(shí)現(xiàn),結(jié)合JSP、XML與EJB技術(shù)進(jìn)行系統(tǒng)設(shè)計(jì),其核心用EJB和 JSP編寫,使學(xué)習(xí)流管理系統(tǒng)的柔性提高。如圖3所示是一個(gè)基于J2EE的學(xué)習(xí)流引擎的體系架構(gòu)[16]。該引擎主要包括6個(gè)部件:處在頂端的“解析器”、與“解析器”相連的“流程管理”、接著是處于中心的“執(zhí)行器”、以及“任務(wù)分派”部件、“事件服務(wù)器”部件、“時(shí)間服務(wù)器”部件以及“客戶端接口”[2]。
圖3 基于J2EE的學(xué)習(xí)流引擎體系結(jié)構(gòu)
學(xué)習(xí)流引擎的流程管理模塊主要負(fù)責(zé)流程的執(zhí)行控制,包括啟動、掛起、恢復(fù)和終止。作為引擎的核心,執(zhí)行器負(fù)責(zé)流程中節(jié)點(diǎn)實(shí)例的具體執(zhí)行。為了支持有關(guān)事務(wù),執(zhí)行器用EJB定義其相應(yīng)J2EE事務(wù)屬性節(jié)點(diǎn)的方法。引擎通過事件服務(wù)器JMS實(shí)現(xiàn)向外部系統(tǒng)發(fā)送及接收事件。
J2EE通過提供計(jì)算環(huán)境所需的服務(wù),支持多層體系結(jié)構(gòu)的應(yīng)用開發(fā),從而使部署在J2EE上的多層應(yīng)用具有可擴(kuò)展、安全、可靠、易用的特性[16]。用這種方式可以實(shí)現(xiàn)基于Web的管理,能夠把EJB Server集群,還能夠把EJB分發(fā)到不同的Server上,Server還提供連接池和事務(wù)處理,如:外部USER可通過形如get Connection的方法獲取連接,使用完成后再通過形如release Connection的方法將連接返回,返回后連接沒有關(guān)閉,緊接著由連接池管理器進(jìn)行回收,準(zhǔn)備下一次使用。從而使相應(yīng)的學(xué)習(xí)流引擎具有一定的事務(wù)處理功能,提高了系統(tǒng)的處理性能及效率[15]。
設(shè)計(jì)學(xué)習(xí)流引擎時(shí),將工作流技術(shù)和現(xiàn)代教育技術(shù)相結(jié)合,采用JVM WF的實(shí)現(xiàn)機(jī)制,進(jìn)行解決方案的構(gòu)思及引擎的設(shè)計(jì)和實(shí)現(xiàn)。采用將JVM實(shí)現(xiàn)原理中對資源的分配和任務(wù)的調(diào)度處理等理論和方法,構(gòu)建以過程為中心的流程管理和以角色為中心的協(xié)同工作相結(jié)合的學(xué)習(xí)流引擎,充分考慮了學(xué)習(xí)流中的學(xué)習(xí)情況因素,從而保證學(xué)習(xí)流引擎調(diào)度的高效率、高性能以及穩(wěn)定性[12]。
學(xué)習(xí)流引擎的組成包括三大核心模塊:一是過程解釋器、二是引擎控制器,第三是協(xié)同中心。學(xué)習(xí)流引擎的總體架構(gòu)如圖4所示。
圖4 學(xué)習(xí)流引擎的總體架構(gòu)圖
過程解釋器:它是學(xué)習(xí)流引擎的一個(gè)對外接口,引擎通過過程解釋器獲取模型。對學(xué)習(xí)流模型和其他流程模型進(jìn)行解釋,并向引擎控制器和協(xié)同中心傳遞學(xué)習(xí)流模型。
引擎控制器:它是學(xué)習(xí)流引擎的核心部分,位于學(xué)習(xí)流實(shí)例的運(yùn)行中心,各個(gè)重要模塊,包括創(chuàng)建功能、激活功能、掛起功能、終止功能,以及過程實(shí)例的運(yùn)行狀態(tài)間的切換也是由引擎控制器完成的。
協(xié)同中心:處理用戶的協(xié)同、任務(wù)的執(zhí)行,完成引擎控制器所生成的任務(wù)以及資源的協(xié)調(diào)工作。
作為接口工具的過程解釋器,它位于學(xué)習(xí)流建模工具與學(xué)習(xí)流引擎之間,過程解釋器解釋學(xué)習(xí)流模型并傳遞給學(xué)習(xí)流引擎。使用直觀、友好的學(xué)習(xí)流建模工具進(jìn)行學(xué)習(xí)流程建模時(shí),建模工具會自動地將學(xué)習(xí)模型翻譯為學(xué)習(xí)流引擎能夠識別的語言(如APDL)。
如何對一維模型語言進(jìn)行解釋、獲取模型的信息是過程解釋器設(shè)計(jì)的關(guān)鍵??墒褂肵ML語言進(jìn)行模型描述,因此需要使用對XML格式文檔進(jìn)行解釋的技術(shù)。在系統(tǒng)建模中使用XML語言描述學(xué)習(xí)過程模型,對XML的解析有兩種比較常用的方法:SAX(Simple API for XML)和DOM(Document Object Model)[12]。
事件驅(qū)動方法SAX是用于處理 XML 的接口和軟件包,它提供對XML文檔的低級訪問,內(nèi)存消耗小。DOM是以面向?qū)ο?OO)方式描述的文檔模型,其邏輯結(jié)構(gòu)是節(jié)點(diǎn)樹。經(jīng)解析XML文件,其元素經(jīng)過轉(zhuǎn)化成為DOM文檔節(jié)點(diǎn),節(jié)點(diǎn)的類型例子有如Document、Element、Type、Comment等,其中每一個(gè)DOM有一個(gè)Document根節(jié)點(diǎn)。它可以有子節(jié)點(diǎn),或者葉子節(jié)點(diǎn)如Text節(jié)點(diǎn)、Comment節(jié)點(diǎn)等。DOM 和 SAX 的主要差異是它們的 API 結(jié)構(gòu)。SAX 不提供修改 XML 文檔的功能。而 DOM 提供修改XML文檔的功能[12]。
在學(xué)習(xí)流中,引擎控制器完成過程實(shí)例的創(chuàng)建與激活、掛起及終止,并完成過程實(shí)例的運(yùn)行狀態(tài)間的切換,是學(xué)習(xí)流實(shí)例運(yùn)行的中心。在學(xué)習(xí)流引擎中,流程由節(jié)點(diǎn)組成,節(jié)點(diǎn)有兩類節(jié)點(diǎn):原子節(jié)點(diǎn)和流程節(jié)點(diǎn)。所謂原子節(jié)點(diǎn)是不可再細(xì)分的學(xué)習(xí)任務(wù)或?qū)W習(xí)活動;流程節(jié)點(diǎn)可以再細(xì)分成由多個(gè)節(jié)點(diǎn)或流程節(jié)點(diǎn)組成的子流程。
學(xué)習(xí)流引擎控制器包括學(xué)習(xí)流調(diào)度控制、及節(jié)點(diǎn)狀態(tài)控制和節(jié)點(diǎn)執(zhí)行控制三個(gè)控制,學(xué)習(xí)流引擎的核心引擎控制器工作由這三方共同完成。在學(xué)習(xí)流引擎運(yùn)行時(shí),學(xué)習(xí)流調(diào)度對學(xué)習(xí)流節(jié)點(diǎn)實(shí)例進(jìn)行調(diào)度,包括運(yùn)行調(diào)度和資源調(diào)度,需要維護(hù)兩個(gè)隊(duì)列:等待隊(duì)列、流程節(jié)點(diǎn)隊(duì)列。
1. Java容器技術(shù)實(shí)現(xiàn)對象管理。基于WF的學(xué)習(xí)流管理系統(tǒng)的邏輯相當(dāng)復(fù)雜和多變,采用基于關(guān)系數(shù)據(jù)庫的技術(shù)實(shí)現(xiàn)學(xué)習(xí)流的核心邏輯。研究中充分利用Java容器管理系統(tǒng)的實(shí)例對象,而容器間嵌套使用的方式更容易實(shí)現(xiàn)學(xué)習(xí)流元素之間的關(guān)系,圖5表現(xiàn)了這種關(guān)系。
Java提供了豐富的容器API,使用這些容器非常方便簡單,例如過程模型類LfcProcessModel[12]中的數(shù)據(jù)成員關(guān)系可以參看圖6的代碼節(jié)選。
圖5 系統(tǒng)使用的Java容器
Java的對象管理有兩種:克隆及按引用訪問方式,使用克隆,也就是深度復(fù)制,可以產(chǎn)生一個(gè)同原對象完全一樣的副本,方便快捷。而按引用訪問方式,使系統(tǒng)在執(zhí)行對象實(shí)例的操作時(shí),保證對象的訪問不會產(chǎn)生另外的臨時(shí)副本,確保為對象本體的唯一修改版本,實(shí)現(xiàn)了數(shù)據(jù)一致性的保證;使用Java容器技術(shù)時(shí),默認(rèn)情況是按引用管理,以確保數(shù)據(jù)的一致性[12,13]。
圖6 使用容器的代碼示例
2.多線程技術(shù)實(shí)現(xiàn)學(xué)習(xí)流實(shí)例管理。學(xué)習(xí)流管理系統(tǒng)應(yīng)該是支持多任務(wù)的管理系統(tǒng),因此作為學(xué)習(xí)流的核心管理層,過程控制模塊必須提供對多任務(wù)管理的支持。JVM提供了多線程管理機(jī)制,能滿足多任務(wù)的需求[17]。例如已經(jīng)封裝的調(diào)度策略、資源分派策略等等,因?yàn)橐呀?jīng)對外提供了接口,應(yīng)用時(shí)按照標(biāo)準(zhǔn)API對接口操作就可以了,如圖7所示。
圖7 JVM中的多線程管理
多線程能同步完成多項(xiàng)任務(wù),學(xué)習(xí)流在進(jìn)行多線程處理時(shí),需要解決共享公共數(shù)據(jù)區(qū)產(chǎn)生的執(zhí)行同步問題。在Java中,有相應(yīng)的接口和處理策略,采用Java提供的簡單易用的synchronized,對線程之間的協(xié)作關(guān)系進(jìn)行控制。從而達(dá)到提高資源使用效率的目的。
3.序列化機(jī)制為學(xué)習(xí)流執(zhí)行環(huán)境的持久化提供保證。運(yùn)行環(huán)境的保存和恢復(fù)是系統(tǒng)實(shí)現(xiàn)時(shí)要提供的功能之一。研究采用Java的容器技術(shù)來實(shí)現(xiàn)對系統(tǒng)內(nèi)的對象實(shí)例的管理和控制,整個(gè)系統(tǒng)的運(yùn)行環(huán)境是由這些存在于容器中的實(shí)例構(gòu)成的,如何實(shí)現(xiàn)對這些對象的持久性管理,是實(shí)現(xiàn)系統(tǒng)持久性的關(guān)鍵,本研究在程序設(shè)計(jì)中,使用序列化機(jī)制來實(shí)現(xiàn)所需的管理[17]。
序列化機(jī)制包含兩個(gè)過程:第一是把內(nèi)存中的對象永久保存,也就是保存在持久性介質(zhì)中的序列化過程,第二是將持久性介質(zhì)環(huán)境恢復(fù)到內(nèi)存中的反序列化的過程。序列化機(jī)制支持自動嵌套調(diào)用。這適用于本系統(tǒng)內(nèi)部容器之間的嵌套關(guān)系,而且程序上利用Java的接口,容易實(shí)現(xiàn)。序列化與平臺無關(guān)、不需要額外成本。序列化存儲可存于本地環(huán)境、遠(yuǎn)程環(huán)境、異地網(wǎng)絡(luò)、也可以是云存儲,或者其他存儲方式,與平臺無關(guān)。在系統(tǒng)實(shí)施中,零成本,而且序列化保密性能好,速度和效率較高,維護(hù)容易,用戶歡迎[9,18]。
4.標(biāo)準(zhǔn)接口JDBC技術(shù)。JDBC是Java數(shù)據(jù)庫連接(Java Data Base Connectivity)的簡稱,JDBC為各種常用數(shù)據(jù)庫提供無縫聯(lián)接,從而提高了軟件系統(tǒng)的通用性,用戶要訪問什么類型的數(shù)據(jù)庫在網(wǎng)絡(luò)及開放系統(tǒng)是很難預(yù)料的。為了使用方便,有正確的驅(qū)動器組,JDBC就可以訪問其相關(guān)的數(shù)據(jù)庫資源。從而更加體現(xiàn)了平臺無關(guān)的特性,具有可操作性、靈活性和易擴(kuò)展性[15]。
以工作流為基礎(chǔ),進(jìn)行的學(xué)習(xí)流引擎的設(shè)計(jì)與實(shí)現(xiàn)中,解決好引擎的控制調(diào)度問題是關(guān)鍵一環(huán),引擎控制和調(diào)度解決的好壞直接影響到引擎的性能和穩(wěn)定性。學(xué)習(xí)流引擎可以借鑒處理線程的機(jī)制來解決實(shí)例調(diào)度、狀態(tài)控制、多實(shí)例同步和實(shí)例間通信等問題。但它和學(xué)習(xí)流引擎在運(yùn)行機(jī)制和處理問題對象上是不同的,處理的具體問題也不同,此時(shí)需要認(rèn)真考慮以下問題[12]:
第一,管理的對象。學(xué)習(xí)流引擎所管理的資源是作為教學(xué)者的人和作為教學(xué)資源的更為復(fù)雜的資源[4,9],這些資源是很難進(jìn)行精確預(yù)計(jì)的,并且這些資源(如人)的性能是不穩(wěn)定的(如不同的人個(gè)性不同,人在學(xué)習(xí)過程中會受外界、情緒等諸多因素影響)。在學(xué)習(xí)流引擎運(yùn)行過程中無法提供精確的資源情況,因此在需要運(yùn)行時(shí)間等參數(shù)時(shí)必須依靠原有的經(jīng)驗(yàn)?zāi)P鸵约巴ㄟ^多次運(yùn)行后得出的歷史數(shù)據(jù)進(jìn)行不斷修正,才有可能使學(xué)習(xí)流引擎具有更高的性能。
第二,解決問題的復(fù)雜度。例如,JVM所執(zhí)行的線程是由代碼段所組成的計(jì)算機(jī)程序,程序是結(jié)構(gòu)化的事物,在執(zhí)行程序代碼時(shí)是嚴(yán)格按照編程者已經(jīng)編寫的代碼去執(zhí)行的,這些代碼段在不修改代碼和運(yùn)行環(huán)境時(shí),可以保證程序每次執(zhí)行的一致性[17]。對于學(xué)習(xí)流引擎,處理的是學(xué)習(xí)過程流程,其中有結(jié)構(gòu)化的流程同時(shí)也要處理非結(jié)構(gòu)化流程。在引擎執(zhí)行的過程中參與者的執(zhí)行以及參與者執(zhí)行的結(jié)果對引擎的運(yùn)行結(jié)果產(chǎn)生很大的差異,因此引擎對同一個(gè)流程的運(yùn)行由于外界的因素是具有差異性的。為了能控制和管理這種差異性,應(yīng)加強(qiáng)學(xué)習(xí)流引擎對于非結(jié)構(gòu)化流程的處理能力,應(yīng)進(jìn)一步研究學(xué)習(xí)流的仿真和智能化。
[參考文獻(xiàn)]
[1]范玉順.工作流管理技術(shù)基礎(chǔ)[C].北京:清華大學(xué)出版社,施普林格出版社.2001.1.
[2]余陽, 王潁, 劉醒梅,等. 基于社會關(guān)系的工作流任務(wù)分派策略研究[J]. 軟件學(xué)報(bào), 2015, 26(3):562-573.
[3]陳展虹, 李呈林. 教師教育技術(shù)能力培訓(xùn)項(xiàng)目分析[J]. 福建教育學(xué)院學(xué)報(bào), 2011(2): 69-72.
[4]詹立彩,曠玲麗,趙蕓輝,徐鶴.遠(yuǎn)程開放教育教學(xué)支持服務(wù)系統(tǒng)構(gòu)建——以福建開放大學(xué)學(xué)習(xí)平臺建設(shè)為例[J].福建廣播電視大學(xué)學(xué)報(bào),2016(01):1-5.
.[5]陳精珠, 劉朝宗, 林碧群. 開放大學(xué)網(wǎng)絡(luò)考試系統(tǒng)功能論證[J]. 福建廣播電視大學(xué)學(xué)報(bào), 2012(6): 15-18.
[6]王凌宇. 廣播電視大學(xué)創(chuàng)建學(xué)習(xí)型組織問題初探[J]. 福建廣播電視大學(xué)學(xué)報(bào), 2011(5): 50-53.
[7]黃河清.基于云計(jì)算的福建本土化社區(qū)教育新模式——以電大系統(tǒng)智能移動社區(qū)學(xué)習(xí)平臺為例[J].福建廣播電視大學(xué)學(xué)報(bào),2016(03):26-30.
[8]紀(jì)開祝,許沖,陳寶興.復(fù)雜網(wǎng)絡(luò)重疊社區(qū)結(jié)構(gòu)發(fā)現(xiàn)的演化算法研究[J].計(jì)算機(jī)工程與科學(xué),2016,38(10) :2077-2082.
[9]吳東暉, 蔡新霞. 臺灣老年教育發(fā)展理念, 模式及其對大陸的啟示[J]. 河南廣播電視大學(xué)學(xué)報(bào), 2012, 25(3): 80-82.
[10]杜燕軍.基于百會文件構(gòu)建高校學(xué)術(shù)期刊協(xié)同審稿系統(tǒng)[J].中國科技期刊研究,2013,24(02):345-348.
[11]王元.基于JVM機(jī)制和角色協(xié)同的工作流引擎研究和實(shí)現(xiàn)[D]. 廣州:中山大學(xué),2004.
[12]郭威.學(xué)習(xí)流引擎的設(shè)計(jì)與實(shí)現(xiàn)[J].現(xiàn)代計(jì)算機(jī)(專業(yè)版),2010(06): 130-132 +135.
[13]Tristan Glatard,Marc-étienne Rousseau,Sorina Camarasu-Pop,Reza Adalat,Natacha Beck,Samir Das,Rafael Ferreira da Silva,Najmeh Khalili-Mahani,Vladimir Korkhov,Pierre-Olivier Quirion,Pierre Rioux,Sílvia D. Olabarriaga,Pierre Bellec,Alan C. Evans. Software architectures to integrate workflow engines in science gateways[J]. Future Generation Computer Systems,2017(10):239-255.
[14]倪曌,白利芳,董奧冬.一種面向業(yè)務(wù)規(guī)則和流程的推理引擎架構(gòu)[J].計(jì)算機(jī)應(yīng)用與軟件,2017,34(03):98-102+153.
[15]黃河清.基于云計(jì)算的“智慧漳州”關(guān)鍵問題及模型構(gòu)建[J]. 龍巖學(xué)院學(xué)報(bào), 2015,33(3): 96-100.
[16]徐建軍, 譚慶平, 楊艷萍. 一種基于J2EE的工作流引擎體系結(jié)構(gòu)[J]. 計(jì)算機(jī)應(yīng)用, 2005,25(2):469-471.
[17]林榮輝. 基于JVM的工作流管理開發(fā)平臺研究與實(shí)現(xiàn)[D]. 廣州:中山大學(xué), 2005.
[18]Huang H. Efficient all-to-all broadcast algorithm in torus networks[C] . IEEE International Conference on Intelligent Computing and Intelligent Systems?(Vol.3, pp.911-916).IEEE, 2010.