摘要:Sakai是國(guó)外著名大學(xué)合作開(kāi)發(fā)的一款優(yōu)秀學(xué)習(xí)平臺(tái)。它充分體現(xiàn)了自由、合作、分享等開(kāi)源精神。文中對(duì)Sakai學(xué)習(xí)平臺(tái)的實(shí)現(xiàn)技術(shù)進(jìn)行了簡(jiǎn)要分析,主要包括基本開(kāi)發(fā)環(huán)境、項(xiàng)目管理、數(shù)據(jù)庫(kù)技術(shù)、表現(xiàn)層技術(shù)以及Sakai的工具等。
關(guān)鍵詞:Sakai;開(kāi)源;學(xué)習(xí)平臺(tái);Maven;數(shù)據(jù)庫(kù);表現(xiàn)層技術(shù);工具
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A文章編號(hào):1009-3044(2009)26-7353-03
Technical Analysis of Sakai Open Source LMS
HE Chao
(East China Normal University, Shanghai 200062, China)
Abstract: Sakai is a good LMS, developed by some famous foreign University. It fully embodies the spirit of open source: freedom, cooperation and sharing. It is briefly analyzed the programming technology used in the Sakai open source LMS in this paper, including the development environment, project management, database technology, presentation layer technology, as well as the Sakaitools.
Key words: Sakai; open source; LMS; database; presentation layer; tools
1 Sakai學(xué)習(xí)平臺(tái)簡(jiǎn)介
隨著社會(huì)開(kāi)源軟件的不斷發(fā)展,開(kāi)源軟件以其獨(dú)特的優(yōu)勢(shì)(免費(fèi)使用,維護(hù)費(fèi)用低;靈活、可移植性好等)贏得了越來(lái)越多的用戶的青睞。近年來(lái),在教育領(lǐng)域內(nèi)也涌現(xiàn)出了許多優(yōu)秀的開(kāi)源軟件,例如:Moodle、Sakai等等。其中,Sakai是由美國(guó)印地安那大學(xué)、密西根大學(xué)、斯坦福大學(xué)和麻省理工學(xué)院于2004年共同發(fā)起的一項(xiàng)開(kāi)源CMS計(jì)劃,它得到了梅隆基金的支持。Sakai項(xiàng)目的主要目標(biāo)是開(kāi)發(fā)Sakai程序的系統(tǒng)架構(gòu),將之與已有各種CMS工具和組件整合為一體。這些工具與組件既可用于課程管理,同時(shí)也可作為原有CMS模型的擴(kuò)展插件。更為重要的是Sakai也將支持研究性協(xié)作學(xué)習(xí)。
作為一款開(kāi)源的軟件,要得到Sakai平臺(tái)的代碼是很容易的,然而,要真正的用好Sakai平臺(tái),我們還必須得對(duì)其進(jìn)行一些本地化工作,有時(shí)候還需要將一些已有的系統(tǒng)整合到Sakai平臺(tái)中去,這就要求我們對(duì)Sakai系統(tǒng)的實(shí)現(xiàn)技術(shù)有一定的了解了。在本文中將嘗試對(duì)Sakai系統(tǒng)的一些實(shí)現(xiàn)技術(shù)進(jìn)行分析,希望能對(duì)Sakai的應(yīng)用推廣起到一定的作用。
2 Sakai系統(tǒng)的實(shí)現(xiàn)技術(shù)分析
Sakai是一款使用Java語(yǔ)言開(kāi)發(fā)的B/S模式的平臺(tái),它很好的實(shí)現(xiàn)了各模塊的組件化,以及模塊之間的松散耦合,它的實(shí)現(xiàn)技術(shù)中實(shí)現(xiàn)了許多現(xiàn)在流行的技術(shù),例如:Spring,Hibernate,Velocity,JSF等等,本文將在Sakai2.5版本的基礎(chǔ)上進(jìn)行分析。
2.1 Sakai的基本開(kāi)發(fā)環(huán)境
表1為Sakai的基本開(kāi)發(fā)環(huán)境。
2.2 Sakai的項(xiàng)目管理與構(gòu)建
對(duì)于一個(gè)大型項(xiàng)目,特別是由眾多開(kāi)發(fā)人員分別開(kāi)發(fā)的項(xiàng)目來(lái)說(shuō),一個(gè)優(yōu)秀的項(xiàng)目管理與構(gòu)建工具是非常重要的,它可以使項(xiàng)目管理與構(gòu)建變得簡(jiǎn)單。在Sakai2.5中,使用的項(xiàng)目管理與構(gòu)建工具是Maven2,它是由apache軟件基金會(huì)支持的一個(gè)開(kāi)源項(xiàng)目。使用Maven,我們就只需要在自己的項(xiàng)目中維護(hù)一個(gè)pom.xml文件即可,該文件是Maven的核心文件,它指示了Maven如何工作。這使得Maven的組件和工具開(kāi)發(fā)人員只需要關(guān)注自己模塊的開(kāi)發(fā)與部署即可,極大的減少了工作量。
在Sakai的構(gòu)建中常用的Maven命令如表2[2]。
此外,要使用Maven正確的構(gòu)建Sakai,還需要在系統(tǒng)環(huán)境變量中添加如下參數(shù):MAVEN_OPTS=-Xms256m-Xmx512m-XX:PermSize=64m -XX:MaxPermSize=128m,該參數(shù)指定了Maven在構(gòu)建時(shí)所需要的最小內(nèi)存和最大內(nèi)存。
2.3 Sakai的數(shù)據(jù)庫(kù)技術(shù)
Sakai使用數(shù)據(jù)庫(kù)來(lái)存儲(chǔ)持久信息,例如注冊(cè)的用戶信息,建立的站點(diǎn)的信息以及各種資源的信息等。Sakai支持的數(shù)據(jù)庫(kù)包括Hypersonic SQL(推薦只在開(kāi)發(fā)時(shí)使用)、Mysql和Oracle[3],此外,對(duì)于Mssql、db2,Sakai也提供了很好的支持。
通過(guò)分析代碼我們發(fā)現(xiàn),Sakai的數(shù)據(jù)庫(kù)技術(shù)的核心代碼是在db、db-impl和db-util三個(gè)模塊中實(shí)現(xiàn)的。其中,db模塊提供了api接口,而在db-impl中則是這些接口的基本實(shí)現(xiàn),在其它模塊中進(jìn)行數(shù)據(jù)庫(kù)操作時(shí)主要會(huì)使用到這兩個(gè)模塊的代碼。
在db-impl模塊中提供了兩種訪問(wèn)數(shù)據(jù)庫(kù)的方式:a.使用Hibernate進(jìn)行數(shù)據(jù)庫(kù)操作;b.不是用Hibernate,直接使用jdbc進(jìn)行數(shù)據(jù)庫(kù)操作。使用前一種方式進(jìn)行數(shù)據(jù)持久化,開(kāi)發(fā)者只需要提供Hibernate映射文件以及Pojo對(duì)象,然后通過(guò)配置Spring的配置文件即可完成。對(duì)于后一種方式,相對(duì)要復(fù)雜許多,需要開(kāi)發(fā)者自己進(jìn)行sql語(yǔ)句的編寫以及查詢結(jié)果的處理,db-impl模塊只提供連接和管理以及查詢的實(shí)際執(zhí)行,使用此種方法的好處是sql語(yǔ)句的編寫可以進(jìn)行優(yōu)化,更加靈活。
在Sakai的核心集中,使用第二種方式的情況較多,然而在自己開(kāi)發(fā)Sakai工具的時(shí)候使用第一種方式更加簡(jiǎn)單,而且難度較低,這也是Subclipse(Sakai的Eclipse插件)中推薦使用的方式。
2.4 Sakai的表現(xiàn)層技術(shù)
表現(xiàn)層技術(shù)就是用于生成用戶界面的技術(shù),Sakai中使用到的表現(xiàn)層技術(shù)主要包括Java Servlet、JSP、JSF、RSF和Velocity這幾種。這幾種技術(shù)各有其優(yōu)缺點(diǎn)[4]:
1)Java Servlet
① 所有的事情都必須手動(dòng)處理,開(kāi)發(fā)者難以用它進(jìn)行工作;
② 代碼和HTML混合在同一個(gè)Java文件中,設(shè)計(jì)難以進(jìn)行頁(yè)面設(shè)計(jì);
③ 沒(méi)有真正的和Sakai集成(但是可以使用)。
2)JSP
① 對(duì)于開(kāi)發(fā)者來(lái)說(shuō),這是一種極其容易入門的技術(shù),難度低;
② 代碼和用戶界面完全混合在同一個(gè)文件中,沒(méi)有任何的分離;
③ 沒(méi)有真正的和Sakai集成(但是可以使用)。
3)JSF
① 有很高的學(xué)習(xí)門檻并且難以使用;
② 在模板中并未使用HTML并且可以在UI中編寫代碼,UI設(shè)計(jì)者難以使用;
③ 很好的集成到了Sakai中,并且當(dāng)前仍在持續(xù)更新。
4)RSF
① 有一定的學(xué)習(xí)難度,但熟悉之后很容易使用;
② 代碼和UI很好的被分離,而且使用純粹的XHTML模板;
③ 當(dāng)前和Sakai集成的很一般,但是仍在快速發(fā)展中。
5)Velocity
① 有很好的文檔,開(kāi)發(fā)者可以很容易的入門;
② 代碼分離程度一般,UI設(shè)計(jì)者使用其工作不是很容易;
③ 當(dāng)前已經(jīng)很好的集成到Sakai中;
④ 這是當(dāng)前Sakai中使用最多的表現(xiàn)層技術(shù)。
2.5 Sakai的國(guó)際化與本地化
國(guó)際化指的是設(shè)計(jì)和編寫應(yīng)用程序以便可以在全球或多國(guó)環(huán)境中使用的過(guò)程。國(guó)際化程序能夠支持不同的語(yǔ)言以及不同格式的日期、時(shí)間、貨幣和其它值,而無(wú)須軟件修改。通常,我們將國(guó)際化(internationalization)簡(jiǎn)寫為 I18N,原因是 internationalization 一詞開(kāi)始的I和最后的N之間有18個(gè)字母。
Sakai的國(guó)際化利用了Java語(yǔ)言提供的基于unicode的國(guó)際化支持。通過(guò)Locale對(duì)象定義地區(qū)、語(yǔ)言、操作系統(tǒng)等信息,調(diào)用ResourceBundle的getBundle方法實(shí)現(xiàn)資源文件的數(shù)據(jù)綁定,輕松本地化不同的語(yǔ)言版本。
這樣,在對(duì)Sakai進(jìn)行本地化(漢化)時(shí),主要的工作就是編寫屬于自己語(yǔ)言的資源文件了。通常,Sakai中的資源文件位于bundles目錄下,且按照如下規(guī)則命名:文件名+國(guó)家地區(qū)編碼+.properties。
到目前為止,Sakai支持的語(yǔ)言與地區(qū)包括:English (US UK), Japanese, Korean, Dutch, Simplified Chinese, Spanish, French (France Canada), Catalan, Swedish, Arabic, Russian, Portuguese (Portugal Brazil)[5]。
2.6 Sakai的工具(tools)
Sakai的工具指的是那些用來(lái)生成用戶界面(發(fā)送到瀏覽器的html或者可以通過(guò)瀏覽器下載的任意媒體類型的字節(jié)流)。Sakai的工具可以被多種導(dǎo)航系統(tǒng)調(diào)用,通常作為站點(diǎn)的一個(gè)功能模塊呈現(xiàn)給用戶,另外,一個(gè)工具還可以作為“幫助者(helper)”被其它的工具調(diào)用。通常,任何基于Servlets或者JSP或者JSF技術(shù)的web應(yīng)用都可以經(jīng)過(guò)少量的修改成為一個(gè)Sakai工具。這主要包括兩個(gè)步驟:
1)編寫工具注冊(cè)配置文件
這個(gè)工具注冊(cè)配置文件是一個(gè)xml文檔,主要包括:工具的id(用于引用該工具,必須在系統(tǒng)中是唯一的);工具的默認(rèn)配置信息和其它一些會(huì)被工具調(diào)用者使用到的元數(shù)據(jù)信息。假如現(xiàn)在有一個(gè)名為TaskList的web應(yīng)用,那么該文件必須被放置在TaskList/tools目錄下,通常采用和工具id相同的名稱來(lái)命名。下面是一個(gè)典型的工具注冊(cè)配置文件的內(nèi)容:
accessSecurity=\"tool\">
其中,tool元素的id屬性的值就是該工具在Sakai中的唯一id;category元素用于將工具分類,指明其可使用的站點(diǎn)類型,在上面的例子中,該工具將在course和project類型的站點(diǎn)內(nèi)使用;configuration元素用于配置一些額外的信息。
2) 修改web.xml配置文件
任何Sakai工具都必須包含ToolListener(Sakai用來(lái)發(fā)現(xiàn)并處理注冊(cè)配置文件的監(jiān)聽(tīng)器類),具體的操作只需要將如下代碼添加了web.xml配置文件里即可。其中org.sakaiproject.util.ToolListener是tool-registration模塊提供的。該類將在Sakai工具啟動(dòng)時(shí)被調(diào)用,負(fù)責(zé)工具的注冊(cè)以及一些參數(shù)的初始化工作。
(in file /WEB-INF/web.xml in webapp TaskList.war)
通過(guò)以上工作,一個(gè)web應(yīng)用就被發(fā)布成為Sakai系統(tǒng)的工具了。
3 結(jié)束語(yǔ)
Sakai是一個(gè)復(fù)雜的、功能強(qiáng)大的、開(kāi)源的教學(xué)管理平臺(tái)。它是由許多的國(guó)外的著名大學(xué)共同開(kāi)發(fā)的,充分的體現(xiàn)了開(kāi)放、自由、協(xié)作的思想。通過(guò)對(duì)其使用的實(shí)現(xiàn)技術(shù)進(jìn)行分析,我們可以從中學(xué)習(xí)到許多很好的教學(xué)平臺(tái)設(shè)計(jì)思想和代碼實(shí)現(xiàn)方法,而且,只有真正的理解了其實(shí)現(xiàn)技術(shù),才能更好的促進(jìn)Sakai平臺(tái)的本地化,才能更好的用好這個(gè)平臺(tái)。本文正是基于這樣一種想法,對(duì)Sakai的部分實(shí)現(xiàn)技術(shù)進(jìn)行了一些介紹,還有許多未能涉及的地方與不足之處,還需要進(jìn)一步的研究。
參考文獻(xiàn):
[1] Development Environment Setup Walkthrough[EB/OL].http://confluence.sakaiproject.org/display/BOOT/Development+Environment+Setup+Walkthrough.
[2] Using Maven 2.x to build and deploy Sakai[EB/OL].http://confluence.sakaiproject.org/display/BOOT/Using+Maven+2.x+to+build+and+deploy+Sakai.
[3] Database Documentation[EB/OL].http://confluence.sakaiproject.org/display/DOC/Database+Documentation.
[4] Comparing Sakai Display Technologies[EB/OL].http://confluence.sakaiproject.org/display/BOOT/Comparing+Sakai+Display+Technologies.
[5] Internationalization (I18N) Localization (L10N)[EB/OL].http://confluence.sakaiproject.org/display/I18N/Home.