趙 喆,卞藝杰,李亞冰,鄒銀馬
(河海大學(xué)商學(xué)院,江蘇 南京 211100)
科技查新自20世紀(jì)80年代產(chǎn)生至今,對(duì)推動(dòng)我國科技事業(yè)的發(fā)展發(fā)揮了重大作用。但在發(fā)展過程中,也存在查新機(jī)構(gòu)分布不均衡、查新收費(fèi)標(biāo)準(zhǔn)不一和查新員工作量大等問題[1]。針對(duì)這些問題,筆者提出基于SaaS(software-as-service)模式的科技查新管理平臺(tái),使具有查新資格的查新機(jī)構(gòu)通過統(tǒng)一的門戶,訪問所租賃的服務(wù),將查新機(jī)構(gòu)和委托方在網(wǎng)絡(luò)環(huán)境下集成一體,為查新機(jī)構(gòu)及查新用戶提供一個(gè)基于互聯(lián)網(wǎng)的工作平臺(tái),方便查新用戶選擇查新機(jī)構(gòu),進(jìn)行查新委托,輔助查新員開展業(yè)務(wù),查新機(jī)構(gòu)更好地進(jìn)行任務(wù)分配、協(xié)作審核、網(wǎng)上費(fèi)用管理及其他管理,從而提升管理效益。平臺(tái)充分利用SOA架構(gòu)松散耦合的優(yōu)勢(shì),采用ExtJS框架和輕量級(jí)架構(gòu)S2SH實(shí)現(xiàn)相應(yīng)業(yè)務(wù)模塊,采用Axis2將各個(gè)業(yè)務(wù)模塊封裝成服務(wù)并提供相應(yīng)的服務(wù)接口,較好地解決了分布式平臺(tái)的互操作和緊耦合問題。
SOA采用面向服務(wù)的軟件封裝技術(shù),以服務(wù)接口和服務(wù)實(shí)現(xiàn)的方式呈現(xiàn),將應(yīng)用程序的不同功能單元(稱為服務(wù))通過服務(wù)之間的接口和契約聯(lián)系起來[2]。SOA主要包含3種角色,如圖1所示。該角色分別是服務(wù)提供者(services provider)、服務(wù)使用者(servicesconsumer)和服務(wù)注冊(cè)中心(services registry),它們各自承擔(dān)著服務(wù)注冊(cè)發(fā)布(publish)、服務(wù)查找(find)和服務(wù)綁定(bind invoke)的工作。
圖1 SOA的架構(gòu)體系
科技查新管理平臺(tái)總體業(yè)務(wù)不復(fù)雜,流程比較規(guī)范,數(shù)據(jù)量也不大,并且信息服務(wù)機(jī)構(gòu)運(yùn)營的預(yù)算較少,也缺少大型維護(hù)的技術(shù)人員。因此一個(gè)主要基于開源的、輕量級(jí)的架構(gòu)是查新平臺(tái)首選的技術(shù)架構(gòu)?;赟2SH的框架具有開發(fā)穩(wěn)定、層次之間低耦合、業(yè)務(wù)邏輯和表示層分離等優(yōu)點(diǎn)[3],對(duì)于查新平臺(tái)主要業(yè)務(wù)模塊的開發(fā),筆者采用基于Struts2、Spring和Hibernate的整合框架。
Struts2作為表示層的主要框架,由4個(gè)部分組成,分別為核心控制器Filter Dispatcher、業(yè)務(wù)控制器、模型組件和視圖組件。其中核心控制器Filter Dispatcher是Struts2框架的基礎(chǔ),包含了框架內(nèi)部的控制流程和處理機(jī)制,它將業(yè)務(wù)邏輯與持久化和表示層分離,形成了模型 Model、視圖View、控制器Controller的結(jié)構(gòu),并為其提供了各個(gè)部分的實(shí)現(xiàn)組件[4]。同時(shí)Struts2還提供了功能強(qiáng)大的標(biāo)簽庫,便于團(tuán)隊(duì)協(xié)作開發(fā),有效提高開發(fā)效率。
Spring是一個(gè)輕量級(jí)的控制反轉(zhuǎn)(inversion of control,IOC)和切面編程(aspect oriented programming,AOP)容器框架,主要負(fù)責(zé)管理業(yè)務(wù)邏輯層。作為輕量級(jí)框架最主要的表現(xiàn)是,基于Spring開發(fā)系統(tǒng)中的對(duì)象一般不依賴于Spring的API(application programming interface)[5];Spring 的 IOC控制反轉(zhuǎn)機(jī)制能夠減輕組件之間的依賴關(guān)系,提高組件的可移植性;Spring的AOP思想通過將業(yè)務(wù)邏輯從系統(tǒng)服務(wù)中分離出來,實(shí)現(xiàn)了內(nèi)聚開發(fā)。
Hibernate作為優(yōu)秀的持久層框架,利用對(duì)象/關(guān)系映射(object/relation mapping,ORM)的機(jī)制解決了業(yè)務(wù)邏輯與數(shù)據(jù)訪問相分離的問題。Hibernate對(duì)JDBC(java data base connectivity)進(jìn)行輕量級(jí)封裝,并提供了功能強(qiáng)大的查詢語言(hibernate query language,HQL)和更加面向?qū)ο蟮腁PI,方便開發(fā)人員對(duì)數(shù)據(jù)庫的訪問,使系統(tǒng)開發(fā)更加簡單和高效[6]。
SOA的實(shí)質(zhì)是要實(shí)現(xiàn)服務(wù)與技術(shù)的完全分離,從而達(dá)到服務(wù)的可重用性。輕量級(jí)框架S2SH開發(fā)項(xiàng)目架構(gòu)清晰,高內(nèi)聚,低耦合,可擴(kuò)展性強(qiáng)[7],這符合SOA的設(shè)計(jì)思想。圖2是一個(gè)基于SOA的ExtJS+S2SH的框架結(jié)構(gòu)模型圖,其內(nèi)容為:
(1)表示層。表示層在客戶端主要采用ExtJS框架,能夠簡化Ajax開發(fā),響應(yīng)速度快,實(shí)現(xiàn)無需刷新頁面便可向服務(wù)器傳輸或讀寫數(shù)據(jù),并實(shí)現(xiàn)與服務(wù)器的異步通信。同時(shí)ExtJS在客戶端與Struts2框架的整合,可以彌補(bǔ)Struts2標(biāo)簽之間缺少交互的弊端[8],也可以應(yīng)用ExtJS自有的組件使頁面更加美觀。Struts2獲得客戶端發(fā)送的請(qǐng)求,調(diào)用相對(duì)應(yīng)的Action來處理請(qǐng)求,最后將執(zhí)行結(jié)果返回客戶端。
(2)控制中介層??刂浦薪閷又饕峭ㄟ^Struts2框架來實(shí)現(xiàn)。Struts2中的Filter Dispatchar管理每一個(gè)Action,對(duì)它們進(jìn)行上下文的控制和轉(zhuǎn)換,并通過調(diào)用控制中介層的Action和服務(wù)調(diào)用層進(jìn)行交互獲取相應(yīng)服務(wù)。
(3)服務(wù)調(diào)用層。服務(wù)調(diào)用代碼對(duì)控制中介層的服務(wù)請(qǐng)求進(jìn)行處理,用來與服務(wù)進(jìn)行交互,從而向系統(tǒng)內(nèi)增加、更新或者檢索信息。服務(wù)調(diào)用代碼的編寫需要依據(jù)從服務(wù)總線獲得的服務(wù)WSDL描述文件。企業(yè)服務(wù)總線(enterpriseservicebus,ESB)[9]作為服務(wù)請(qǐng)求者與服務(wù)提供者之間的中介,對(duì)服務(wù)進(jìn)行集中管理。在ESB的作用下,服務(wù)請(qǐng)求不是直接傳遞給服務(wù)提供者,而是經(jīng)ESB轉(zhuǎn)發(fā)給服務(wù)提供者,在得到返回消息后,ESB再轉(zhuǎn)給服務(wù)請(qǐng)求者。
圖2 基于SOA的ExtJs+S2SH框架模型圖
(4)業(yè)務(wù)邏輯層。使用Spring框架的輕量級(jí)容器IOC機(jī)制支持AOP,提供簡單統(tǒng)一的控制文件。Web Service作為服務(wù)的提供者,對(duì)服務(wù)進(jìn)行封裝,主要提供粗粒度的服務(wù),與業(yè)務(wù)邏輯相對(duì)應(yīng)。利用Spring框架對(duì)會(huì)話及事物進(jìn)行封裝和管理,向上為上層提供功能接口,向下通過DAO(data access object)與Hibernate數(shù)據(jù)持久層進(jìn)行交互,調(diào)用數(shù)據(jù)庫完成業(yè)務(wù)處理。
(5)數(shù)據(jù)持久層。數(shù)據(jù)持久層使用Hibernate框架,使用ORM功能,通過Hibernate提供的HQL操作實(shí)體對(duì)象,直接與底層關(guān)系數(shù)據(jù)庫(relational data base management system,RDBMS)進(jìn)行交互。
查新業(yè)務(wù)作為工作平臺(tái)的主體部分,基本流程是在一般科技查新工作流程的基礎(chǔ)之上,盡可能地簡化查新工作人員的工作量,實(shí)現(xiàn)事務(wù)處理信息化,在平臺(tái)基礎(chǔ)上采用數(shù)據(jù)庫技術(shù)來實(shí)現(xiàn)規(guī)范化管理和程序化操作??萍疾樾聟f(xié)作單位以及查新工作人員必須嚴(yán)格遵守《科技查新規(guī)范》所規(guī)定的行為進(jìn)行操作。查新流程主要有:查新合同提交及審核,分配查新任務(wù),查新報(bào)告提交及審核,查新報(bào)告查收,用戶意見反饋等。具體的工作流程如圖3所示。
圖3 平臺(tái)工作流程圖
科技查新工作平臺(tái)包括3個(gè)部分,分別為查新機(jī)構(gòu)管理、委托方管理和平臺(tái)管理,功能結(jié)構(gòu)圖如圖4所示。
圖4 系統(tǒng)功能結(jié)構(gòu)圖
(1)查新機(jī)構(gòu)管理。查新機(jī)構(gòu)管理主要是為在平臺(tái)注冊(cè)的查新機(jī)構(gòu)所搭建的,主要包括查新機(jī)構(gòu)基本信息管理、人員權(quán)限管理、查新項(xiàng)目管理、機(jī)構(gòu)門戶網(wǎng)站及對(duì)應(yīng)的后臺(tái)維護(hù)4個(gè)部分。其中人員權(quán)限管理是核心,查新機(jī)構(gòu)可以根據(jù)工作人員工作性質(zhì)的不同,動(dòng)態(tài)分配員工權(quán)限,如查新員、審核員等不同權(quán)限設(shè)置。
(2)委托方管理。委托方管理即委托方個(gè)人用戶中心,主要分為個(gè)人基本信息管理和委托項(xiàng)目管理兩部分。其中委托項(xiàng)目管理模塊又包括合同管理、賬務(wù)管理以及查新報(bào)告管理。委托用戶登錄用戶中心后,可添加修改個(gè)人信息,在線填寫查新合同,也可查看、跟進(jìn)委托項(xiàng)目狀態(tài),并能向查新機(jī)構(gòu)提出相關(guān)意見。
(3)平臺(tái)管理??萍疾樾缕脚_(tái)管理主要分為門戶管理和用戶管理兩部分。其中門戶管理主要對(duì)查新平臺(tái)相關(guān)信息模塊進(jìn)行管理,包括平臺(tái)簡介、查新知識(shí)、查新案例、注冊(cè)登錄、最新動(dòng)態(tài)和機(jī)構(gòu)查詢等基本模塊。各模塊都具有增加、修改、刪除、查詢等基本操作,方便平臺(tái)管理員維護(hù)更新。用戶管理主要是SaaS平臺(tái)用戶以及機(jī)構(gòu)用戶的信息,包括租戶注冊(cè),租戶審核(主要針對(duì)查新機(jī)構(gòu)租戶,審核機(jī)構(gòu)合法性),提供租戶信息的增加、修改、刪除、查詢基本操作功能,并對(duì)租戶所租用或購買的服務(wù)進(jìn)行管理,設(shè)定權(quán)限。
在網(wǎng)絡(luò)工作平臺(tái)設(shè)計(jì)中,數(shù)據(jù)庫設(shè)計(jì)對(duì)于數(shù)據(jù)安全、數(shù)據(jù)速度、空間節(jié)約等都非常重要。如果設(shè)計(jì)不合理,不僅會(huì)導(dǎo)致增加、查找等數(shù)據(jù)庫操作困難,而且會(huì)影響到整個(gè)平臺(tái)的工作效率??萍疾樾缕脚_(tái)采用MySql數(shù)據(jù)庫,整個(gè)平臺(tái)在數(shù)據(jù)庫中定義了多個(gè)數(shù)據(jù)庫表以保證平臺(tái)的正常運(yùn)行,數(shù)據(jù)庫表主要分為機(jī)構(gòu)表、范本表(如查新合同,查新報(bào)告等)、人員相關(guān)信息表、門戶網(wǎng)站模塊表4大類共55張表。列出幾個(gè)主要的數(shù)據(jù)庫表分別描述為:①查新機(jī)構(gòu)表(TInstitution),包括ID,機(jī)構(gòu)名稱,機(jī)構(gòu)代碼,通信地址,郵編,電子郵箱,機(jī)構(gòu)負(fù)責(zé)人,負(fù)責(zé)人電話,機(jī)構(gòu)傳真,機(jī)構(gòu)聯(lián)系人,機(jī)構(gòu)聯(lián)系人電話,機(jī)構(gòu)擅長領(lǐng)域,機(jī)構(gòu)簡介等;②委托合同表(TContract),包括ID,合同編號(hào),查新項(xiàng)目的ID,查新點(diǎn)與查新要求,查新的科學(xué)技術(shù)要點(diǎn),參考文獻(xiàn),中文檢索式,英文檢索式,中文檢索詞,英文檢索詞,分類號(hào),專利號(hào),合同訂立時(shí)間,合同履行期限,合同履行地點(diǎn),合同履行方式,保密及法律責(zé)任,查新費(fèi)用,費(fèi)用支付方式,違約賠償金相關(guān)事項(xiàng),爭議解決辦法,名詞術(shù)語解釋,保存時(shí)間等;③委托方基本信息表(TClient),包括ID,委托人名稱,密碼,單位名稱,通信地址,郵政編碼,電子郵箱,負(fù)責(zé)人,負(fù)責(zé)人電話,負(fù)責(zé)人傳真等;④查新方網(wǎng)站基本信息表(TIntroduce),包括ID,模塊名稱,標(biāo)題,內(nèi)容,發(fā)布人,發(fā)布日期,發(fā)布單位等。
科技查新工作平臺(tái)頁面采用ExtJS框架,應(yīng)用ExtJS不需要其他配置,只需要在頁面head中引入ExtJS的樣式及ExtJS庫文件即可。在平臺(tái)開發(fā)過程中,綜合運(yùn)用了ExtJS所提供的面板、窗口、對(duì)話框、選項(xiàng)板、工具欄、表格、表單、按鈕等組件,真正實(shí)現(xiàn)了頁面美觀,交互性強(qiáng)的設(shè)計(jì)。Web.xml中Struts2的配置描述如下:
Strusts2、Spring和Hibernate框架的應(yīng)用需要把各自的庫文件加載到當(dāng)前應(yīng)用的類庫編譯路徑下。應(yīng)用Struts2框架首先要在Web.xml里進(jìn)行配置,代碼如上。應(yīng)用 Spring框架需要配置Spring配置的路徑以及加載Spring上下文的監(jiān)聽器,清單如下:
Web Service作為SOA最好的實(shí)現(xiàn)手段之一[10],能夠較好地解決分布式平臺(tái)的互操作和緊耦合問題,實(shí)現(xiàn)方式有多種,如Xfire、Axis等。筆者提出的科技查新工作平臺(tái)采用Axis2作為Web Servsice的實(shí)現(xiàn)工具。
應(yīng)用Axis2首先需要將Axis2相關(guān)的Jar包導(dǎo)入到Web-inf中的lib里面,在Web.xml中添加servlet的配置和部署信息,清單如下:
Spring提供了封裝良好的 AOP,在完成Spring和Hibernate框架整合后,完成聲明式事務(wù)管理只需要修改Spring的配置文件,清單如下:
清單中所示配置文件總共完成了3件事情,分別是給事務(wù)管理器注入session Factory、定義事務(wù)語義和定義切面以便把事務(wù)行為切入到類中。第一個(gè)標(biāo)簽<bean>把Hibernate的session Factory通過IOC機(jī)制注入Spring提供的事務(wù)管理器HibernateT-ransactionManager;第二個(gè)標(biāo)簽<tx:advice>用來封裝需要施加的事務(wù)語義;第三個(gè)標(biāo)簽<aop:config>用來配置AOP的增強(qiáng)規(guī)則,把事務(wù)行為插入指定的類中。首先通過<aop:pointcut>定義一個(gè)切入點(diǎn),讓AOP框架知道事務(wù)規(guī)則插入的類的位置;其次通過<aop:advisor>定義一個(gè)切面,這里定義了兩個(gè)屬性,第一個(gè)屬性advice-ref是把上面定義的<tx:advice>指定到這個(gè)切面上,第二個(gè)屬性pointcut-ref用來指定這個(gè)切面需要切入的地方。
通過Spring的事務(wù)管理方案,事務(wù)管理從代碼中獨(dú)立出來,使整個(gè)系統(tǒng)更簡潔明了,同時(shí)也提高了團(tuán)隊(duì)的開發(fā)效率。
基于SaaS模式的科技查新管理平臺(tái)是根據(jù)查新工作需要,通過SOA的架構(gòu)體系對(duì)查新工作松散耦合的粗粒度服務(wù)進(jìn)行設(shè)計(jì)、組合和應(yīng)用。平臺(tái)基本業(yè)務(wù)模塊基于ExtJS和S2SH框架開發(fā),通過Axis2實(shí)現(xiàn)Web Service,充分利用了各個(gè)框架的優(yōu)勢(shì),具有高效可靠、安全穩(wěn)定等優(yōu)點(diǎn)。所開發(fā)的工作平臺(tái)優(yōu)化了查新站的工作流程,建立了新的服務(wù)模式,充分體現(xiàn)了多元化、網(wǎng)絡(luò)化、數(shù)字化,不僅方便了科技查新用戶,而且提高了查新工作效率和服務(wù)水平,為科技查新工作的科學(xué)化、規(guī)范化、標(biāo)準(zhǔn)化提供了實(shí)現(xiàn)基礎(chǔ)。
[1] 董月玲,張麗英,季淑娟.我國高??萍疾樾鹿ぷ鞯默F(xiàn)狀分析及研究[J].圖書館,2011(3):108-110.
[2] 葉宇風(fēng).基于SOA的企業(yè)應(yīng)用集成研究[J].微電子學(xué)與計(jì)算機(jī),2006,23(5):211 -213.
[3] 彭寶琴,羅曉沛.基于J2EE輕量級(jí)框架組合的消費(fèi)信貸系統(tǒng)的實(shí)現(xiàn)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(3):647-649.
[4] 王春超.基于J2EE架構(gòu)的SSH組合框架的研究[D].長春:長春理工大學(xué)圖書館,2010.
[5] 李天鳴,何月順.基于ExtJS技術(shù)與SSH框架的權(quán)限管理研究[J].計(jì)算機(jī)應(yīng)用與軟件,2011,28(5):165-167.
[6] 王磊杰,崔軍波,韓紅宇,等.Java EE開發(fā)指南:基于Spring/Struts/Hibernate的實(shí)現(xiàn)[M].北京:人民郵電出版社,2007:347-367.
[7] 楊鐘鳴.基于SSH框架的社區(qū)管理信息系統(tǒng)設(shè)計(jì)[J]. 東華理工大學(xué)學(xué)報(bào):自然科學(xué)版,2010,33(4):378-383.
[8] 朱彬,王安保,王娜.用Struts框架建立JavaWeb應(yīng)用程序[J].計(jì)算機(jī)輔助工程,2005,14(2):45-48.
[9] 蔡昭權(quán).基于ESB的異構(gòu)系統(tǒng)集成實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用,2008,28(2):538-540.
[10] 翟峰,郝克剛,葛瑋.基于 SOAP構(gòu)建 Axis上的Web Services[J].計(jì)算機(jī)應(yīng)用與軟件,2008,25(1):156-158.