劉坤彪 姜 玲
(1.武漢城市職業(yè)學(xué)院,湖北 武漢 430064;2.武漢交通職業(yè)學(xué)院,湖北 武漢 430065)
隨著市場(chǎng)競(jìng)爭(zhēng)的日益激烈,我國(guó)廣大中小企業(yè)正普遍面臨產(chǎn)品研發(fā)能力不足、經(jīng)營(yíng)管理水平落后、產(chǎn)業(yè)鏈協(xié)作能力低下等嚴(yán)峻挑戰(zhàn),迫切需要利用信息化技術(shù)來提升企業(yè)的綜合競(jìng)爭(zhēng)能力。近年來,隨著云計(jì)算、物聯(lián)網(wǎng)等技術(shù)的發(fā)展和日趨成熟,一種網(wǎng)絡(luò)化制造新模式——云制造應(yīng)運(yùn)而生。中小企業(yè)云制造服務(wù)平臺(tái)主要包括統(tǒng)一用戶管理、制造資源注冊(cè)發(fā)布、制造需求發(fā)布、制造服務(wù)注冊(cè)中心、制造服務(wù)撮合管理、制造服務(wù)交易管理、制造服務(wù)業(yè)務(wù)管理、業(yè)務(wù)信用評(píng)估與分析、行業(yè)性知識(shí)聚集與服務(wù)網(wǎng)絡(luò)化社區(qū)、服務(wù)平臺(tái)系統(tǒng)管理等功能。該平臺(tái)將成為我國(guó)中小企業(yè)充分利用和共享制造資源,提升產(chǎn)品設(shè)計(jì)、工藝、制造、營(yíng)銷業(yè)務(wù)服務(wù)能力的有效途徑。為了盡可能提高系統(tǒng)各功能模塊的獨(dú)立性、擴(kuò)展性,系統(tǒng)采用多層架構(gòu),使得各個(gè)模塊的變化盡可能少地影響其它模塊,提高系統(tǒng)的擴(kuò)展性和可維護(hù)性。SSH框架在平臺(tái)的多層架構(gòu)上很好地滿足了開發(fā)要求。
采用Struts2、Spring、Hibernate整合技術(shù)框架構(gòu)建云制造服務(wù)平臺(tái),從而對(duì)各類制造資源和服務(wù)資源進(jìn)行統(tǒng)一的集中智能化管理,通過網(wǎng)絡(luò)和一個(gè)云制造平臺(tái)中間件,將制造生命周期的前期、中期、后期提供給用戶,提供一種可隨時(shí)獲取、按需使用的廉價(jià)優(yōu)質(zhì)的服務(wù)。云制造服務(wù)平臺(tái)實(shí)現(xiàn)了制造業(yè)向服務(wù)業(yè)的轉(zhuǎn)換,將為我國(guó)制造企業(yè)充分利用、共享社會(huì)制造資源,提升企業(yè)綜合競(jìng)爭(zhēng)能力提供重要支撐手段。
Struts2框架主要應(yīng)用在控制層和表現(xiàn)層。Struts2控制器分為核心控制器FilterDispatcher與業(yè)務(wù)控制器Action,在web應(yīng)用中核心控制器負(fù)責(zé)攔截所有的用戶請(qǐng)求,業(yè)務(wù)控制器獲取Web請(qǐng)求中的信息、Web應(yīng)用的相關(guān)信息和用戶會(huì)話信息,并根據(jù)這些信息進(jìn)行業(yè)務(wù)邏輯處理,最后返回代表處理結(jié)果的字符串。此外,Struts2框架提供了強(qiáng)大的標(biāo)簽庫,從而大大減少了JSP頁面的腳本編碼,而且可以處理表現(xiàn)層的數(shù)據(jù),如輸出表單數(shù)據(jù)的校驗(yàn)信息。通過自定義標(biāo)簽創(chuàng)建的JSP表單,可以實(shí)現(xiàn)對(duì)用戶數(shù)據(jù)的封裝,同時(shí)自定義標(biāo)簽還提供了像模板定制等多種顯示功能,在UI(User Interface)開發(fā)中具有很大的優(yōu)勢(shì)。Struts2框架使得Web應(yīng)用的MVC(Model View Controller)之間松散耦合。
對(duì)于一個(gè)復(fù)雜的Web應(yīng)用,后端數(shù)據(jù)的持久化是影響其性能的最主要因素。為了減少數(shù)據(jù)庫變化對(duì)“業(yè)務(wù)層”的影響,使用ORM(Object Relation Mapping,對(duì)象關(guān)系映射)開源框架Hibernate,它封裝了數(shù)據(jù)訪問細(xì)節(jié),為業(yè)務(wù)邏輯層提供了面向?qū)ο蟮腁PI,所以Java程序員可以使用面向?qū)ο蟮木幊趟季S來操縱數(shù)據(jù)庫。Hibernate允許將數(shù)據(jù)庫中的信息存放入對(duì)象,這樣可以在連接斷開的情況下把這些數(shù)據(jù)顯示到UI層,而那些對(duì)象也可以返回給持久層,從而在數(shù)據(jù)庫里更新。Hibernate是當(dāng)前Java社區(qū)中事實(shí)上的對(duì)象關(guān)系映射工業(yè)標(biāo)準(zhǔn),它采用POJO(Plain Old Java Object,簡(jiǎn)單的傳統(tǒng)Java對(duì)象)編程模型,從而允許持久對(duì)象擁有復(fù)雜的結(jié)構(gòu),如混合類型、集合、屬性以及用戶自定義的類型,屏蔽了底層關(guān)系數(shù)據(jù)庫復(fù)雜的細(xì)節(jié),降低了編寫應(yīng)用程序的復(fù)雜度。
Spring能有效地組織J2EE(Java2Enterprise Edition)應(yīng)用各層的對(duì)象。不論是控制層的Action對(duì)象,還是業(yè)務(wù)層的Service對(duì)象,還是持久層的DAO對(duì)象,都可在Spring的管理下有機(jī)地協(xié)調(diào)和運(yùn)行。Spring將各層的對(duì)象以松耦合的方式組織在一起,Action對(duì)象無須關(guān)心Service對(duì)象的具體實(shí)現(xiàn),Service對(duì)象也無須關(guān)心持久層的DAO對(duì)象的具體實(shí)現(xiàn),各層對(duì)象的調(diào)用完全面向接口。這一切都?xì)w功于Spring的核心機(jī)制——依賴注入,它是指程序在運(yùn)行過程中,如果調(diào)用者需要調(diào)用另一個(gè)對(duì)象協(xié)助時(shí),無須在代碼中創(chuàng)建被調(diào)用者,而是依賴于外部的注入將Bean與Bean以配置文件的方式組織在一起。在進(jìn)行模塊設(shè)計(jì)時(shí),高層的抽象模塊通常是與業(yè)務(wù)邏輯相關(guān)聯(lián)的,它應(yīng)該具有可重用性,而不依賴于低層的實(shí)現(xiàn)模塊。Spring從分考慮到了與Hibernate的協(xié)同工作,通過內(nèi)置的Hibernate支持類(HibernateDao-Support),可以在保持Hibernate強(qiáng)大功能的同時(shí),以簡(jiǎn)化的方式使用Hibernate操作數(shù)據(jù)庫。作為一個(gè)全方位的應(yīng)用程序框架,Spring通過AOP(Aspect Oriented Programming,面向切面編程)針對(duì)業(yè)務(wù)處理過程中的切面進(jìn)行提取,所面對(duì)的是處理過程中的某個(gè)步驟或階段,以獲得各部分之間低耦合性的隔離效果。
圍繞“分散資源集中使用,集中資源分散服務(wù)”的云制造思想,為使分布式的資源能夠充分利用和共享,必需建立一套完整的體系架構(gòu),以保證企業(yè)云制造服務(wù)平臺(tái)能夠從技術(shù)的先進(jìn)性、管理的科學(xué)性、運(yùn)行的合理機(jī)制、友好的服務(wù)等多方面提高企業(yè)的競(jìng)爭(zhēng)力。中小企業(yè)云制造服務(wù)平臺(tái)的功能結(jié)構(gòu)如圖1所示。
圖1 中小企業(yè)云制造服務(wù)平臺(tái)的功能結(jié)構(gòu)
圖2 基于SSH的系統(tǒng)分層結(jié)構(gòu)
本文以關(guān)鍵字搜索模塊的開發(fā)為實(shí)例,分析SSH在整個(gè)云制造服務(wù)平臺(tái)中的應(yīng)用。關(guān)鍵字搜索模塊的作用是根據(jù)用戶輸入的關(guān)鍵字在平臺(tái)內(nèi)查找與之匹配的云制造服務(wù)資源信息。在MySQL中為本系統(tǒng)創(chuàng)建數(shù)據(jù)庫cloud,然后在cloud中創(chuàng)建數(shù)據(jù)表release(見表1)。
表1 數(shù)據(jù)表release結(jié)構(gòu)
在web.xml中主要增加Struts2和Spring框架的支持,配置文件的主要內(nèi)容如代碼1所示。
代碼1
5.2.1 配置數(shù)據(jù)庫連接
Spring對(duì)ORM的一個(gè)重要支持就是提供統(tǒng)一的數(shù)據(jù)源管理機(jī)制,即在Spring容器中定義數(shù)據(jù)源、指定映射文件和Hibernate屬性等。在MyE-clipse開發(fā)環(huán)境中加載Spring后,在應(yīng)用工程的WEB-INF文件夾下自動(dòng)生成applicationContext.xml文件,即Spring的默認(rèn)配置文件,在該文件中配置數(shù)據(jù)庫連接的主要內(nèi)容如代碼2所示。
代碼2
5.2.2 配置SessionFactory
Spring為創(chuàng)建SessionFactory實(shí)例提供了一個(gè)FactoryBean,通過指定該Bean的屬性,就可以獲得SessionFactory對(duì)象,它能以完全面向?qū)ο蟮姆绞讲倏v數(shù)據(jù)庫。在applicationContext.xml文件中配置SessionFactory的主要內(nèi)容如代碼3所示。
代碼3
5.2.3 在Spring框架中集成Struts2
組件Action是Struts框架的核心部分,它用于處理業(yè)務(wù)邏輯。Spring容器采用裝配Bean的方法對(duì)所有action組件進(jìn)行統(tǒng)一管理,以實(shí)現(xiàn)對(duì)Struts2框架的集成。針對(duì)搜索模塊,在applicationContext.xml文件中配置Struts2的主要內(nèi)容如代碼4所示。
代碼4
在DAO模式下,將所有的數(shù)據(jù)庫原子操作都封裝在DAO層內(nèi),所有對(duì)數(shù)據(jù)表的CRUD操作都由對(duì)應(yīng)的DAO組件完成。為本系統(tǒng)搜索模塊創(chuàng)建的DAO類InfoManage.java如程序1所示。
程序1 InfoManage.java
根據(jù)本系統(tǒng)對(duì)搜索模塊功能的要求,我們可以設(shè)計(jì)對(duì)用戶輸入的關(guān)鍵字進(jìn)行有效性驗(yàn)證的CheckAction類、執(zhí)行查找的SeekAction類、實(shí)現(xiàn)數(shù)據(jù)分頁的PageAction類、查找所有資源的AllResource類以及查找單一資源的getResource類。以上Action類的關(guān)鍵實(shí)現(xiàn)代碼分別如程序2、程序3、程序4、程序5、程序6所示。
程序2 CheckAction.java
程序3 SeekAction.java
程序4 PageAction.java
程序5 AllResource.java
程序6 getResource.java
為了使模型組件Action和視圖組件關(guān)聯(lián)起來,就需要通過Struts2框架的配置文件struts.xml對(duì)Action組件進(jìn)行配置。針對(duì)本系統(tǒng)的搜索模塊的Action配置的主要內(nèi)容如代碼5所示。
代碼5
通過對(duì)本系統(tǒng)搜索匹配模塊功能基于SSH框架的分層設(shè)計(jì)與編碼實(shí)現(xiàn),我們對(duì)SSH框架有了更深刻的認(rèn)識(shí)。Struts2較好地解決了web應(yīng)用中視圖、控制器和模型組件間的關(guān)聯(lián),但對(duì)于特別復(fù)雜的云制造服務(wù)Web平臺(tái),還顯得不夠。Hibernate可以幫助web應(yīng)用實(shí)現(xiàn)更加高效、強(qiáng)大的數(shù)據(jù)持久化,確保系統(tǒng)的性能和穩(wěn)定,Spring基于“依賴注入”,可以更好地管理整個(gè)web應(yīng)用的各種資源,實(shí)現(xiàn)各組件之間的松散耦合。因此,Struts2、Spring和Hibernate集成,可以為企業(yè)搭建更加優(yōu)秀的web平臺(tái),只有深入領(lǐng)會(huì)SSH框架設(shè)計(jì)思想的精髓,才能在實(shí)踐中靈活運(yùn)用。
[1]蒲子明,許勇,等.Struts2+Hibernate+Spring整合開發(fā)技術(shù)詳解[M].北京:清華大學(xué)出版社,2010:502-503.
[2]郝玉龍,遲健男.輕松掌握Struts2[M].北京:清華大學(xué)出版社,2011:237-239.
[3]王偉平.Struts2完全學(xué)習(xí)手冊(cè)[M].北京:清華大學(xué)出版社,2011:210-212.