王永潔,陸銘華,史 揚(yáng)
(海軍潛艇學(xué)院,山東 青島 266071)
基于組件技術(shù)的分布式潛艇作戰(zhàn)仿真系統(tǒng)
王永潔,陸銘華,史 揚(yáng)
(海軍潛艇學(xué)院,山東 青島 266071)
提出采用JavaEE/EJB組件技術(shù)開(kāi)發(fā)分布式潛艇作戰(zhàn)仿真系統(tǒng),根據(jù)潛艇作戰(zhàn)機(jī)理,建立了分布式潛艇作戰(zhàn)仿真模型體系結(jié)構(gòu),設(shè)計(jì)了分布式潛艇作戰(zhàn)仿真系統(tǒng)的軟件架構(gòu),分析了系統(tǒng)開(kāi)發(fā)過(guò)程中采用的技術(shù)協(xié)議,并研究了基于組件技術(shù)的分布式潛艇作戰(zhàn)仿真系統(tǒng)實(shí)現(xiàn)方法。
組件,潛艇,作戰(zhàn)仿真,軟件架構(gòu)
面向?qū)ο蠹夹g(shù)和軟件構(gòu)件技術(shù)的興起,出現(xiàn)了以JavaEE/EJB、DNA/COM和CORBA為代表的分布式對(duì)象/構(gòu)件計(jì)算模型,使用上述技術(shù)的應(yīng)用服務(wù)器中間件涵蓋了傳統(tǒng)中間件的功能,完全支持三層/多層的軟件體系結(jié)構(gòu)發(fā)展和軟件復(fù)用,逐漸成為中間件產(chǎn)品的主流。隨著構(gòu)件技術(shù)進(jìn)一步發(fā)展,JavaEE/EJB組件融合了CORBA等技術(shù)體系的優(yōu)點(diǎn),目前成為構(gòu)建分布式計(jì)算平臺(tái)的主流框架。利用JavaEE/EJB組件技術(shù)開(kāi)發(fā)分布式潛艇作戰(zhàn)系統(tǒng)可以有效解決仿真模型利用率低的問(wèn)題。
當(dāng)前軟件技術(shù)的發(fā)展正朝著組件化方向發(fā)展,其目標(biāo)是在解決軟件生產(chǎn)率和軟件質(zhì)量問(wèn)題的同時(shí)更加關(guān)注軟件的靈活性和可用性,采用軟件組件技術(shù)構(gòu)建分布式系統(tǒng)軟件結(jié)構(gòu)的優(yōu)勢(shì)如下:
(1)提高軟件重用性及共享性
同一個(gè)軟件功能只需要實(shí)現(xiàn)一次,之后可提供給不同設(shè)備調(diào)用,從而實(shí)現(xiàn)仿真模型軟件組件(代碼)的唯一,既解決了模型重復(fù)開(kāi)發(fā)及重復(fù)部署問(wèn)題,又解決了不同領(lǐng)域分布開(kāi)發(fā)時(shí)功能不一致的現(xiàn)實(shí)問(wèn)題。
(2)軟件易于擴(kuò)展維護(hù)
采用分層開(kāi)發(fā)的思想,將表現(xiàn)層(人機(jī)界面)、控制層(仿真應(yīng)用流程控制)與核心模型層分離,易于各自的升級(jí)維護(hù)。
基于JavaEE/EJB應(yīng)用服務(wù)器的分布式軟件體系如下頁(yè)圖1所示。
圖1 基于Java EE/EJB的軟件體系結(jié)構(gòu)
圖1中應(yīng)用服務(wù)器的核心是EJB容器,它部署并管理了各種應(yīng)用程序組件,接受各類(lèi)客戶端(應(yīng)用層)的服務(wù)請(qǐng)求[1],并將服務(wù)結(jié)果返回客戶端,從而實(shí)現(xiàn)組件共享的服務(wù)。
在分析了影響潛艇作戰(zhàn)仿真模型體系組成的基礎(chǔ)上,按照功能和地位的不同,潛艇作戰(zhàn)仿真模型體系中所包括的各類(lèi)模型可劃分為[2]:基礎(chǔ)類(lèi)模型、裝備類(lèi)模型、反潛裝備類(lèi)模型、武器模型、平臺(tái)(兵力)模型、行為模型、底層的環(huán)境數(shù)據(jù)庫(kù)、裝備參數(shù)數(shù)據(jù)庫(kù)以及兵力參數(shù)數(shù)據(jù)庫(kù)等,具體的模型體系層次如圖2所示。對(duì)模型進(jìn)行層次結(jié)構(gòu)劃分不僅可以有效降低系統(tǒng)分析和建模的復(fù)雜度[3],而且分解后的細(xì)粒度模型保證了模型針對(duì)特定問(wèn)題進(jìn)行研究的專(zhuān)業(yè)性,有利于提高模型的精度。
圖2 潛艇作戰(zhàn)仿真模型體系結(jié)構(gòu)圖
圖2中,各種類(lèi)別模型組件的組成及所能完成功能如下:
(1)基礎(chǔ)類(lèi)模型提供了其他模型正常運(yùn)行所需的信息,如水聲傳播模型是聲納探測(cè)模型以及魚(yú)雷/水聲對(duì)抗武器模型的基礎(chǔ)模型。
(2)裝備類(lèi)模型根據(jù)潛艇組成的系統(tǒng)/裝備建立了相對(duì)應(yīng)的系統(tǒng)/裝備模型,建模的依據(jù)是裝備的性能和工作原理,例如:傳感器的戰(zhàn)技指標(biāo),潛艇操縱運(yùn)動(dòng)規(guī)律等。針對(duì)各種主要系統(tǒng)/裝備建立模型,細(xì)化了潛艇作戰(zhàn)仿真過(guò)程的細(xì)節(jié),提高了潛艇作戰(zhàn)仿真的可信度。
(3)反潛裝備類(lèi)模型主要由反潛兵力搭載的反潛器材模型組成,例如:由反潛飛機(jī)裝備的吊放聲納、反潛水面艦艇裝備的拖曳線列陣聲納等模型,這些模型是整個(gè)反潛兵力體系的基礎(chǔ),也是潛艇與其他兵力進(jìn)行對(duì)抗的重要組成部分。
(4)武器模型主要包括潛艇和其他反潛兵力所裝備武器的相關(guān)模型,包括魚(yú)雷、導(dǎo)彈的彈道模型、各種武器進(jìn)行對(duì)抗的過(guò)程模型,以及兵力之間進(jìn)行水聲對(duì)抗和電子對(duì)抗的過(guò)程模型。
(5)平臺(tái)模型主要由潛艇兵力、水面艦艇兵力、反潛飛機(jī)、反潛直升機(jī)兵力模型、海底基陣模型和偵查衛(wèi)星模型組成。
(6)行為模型主要描述潛艇作戰(zhàn)仿真中仿真兵力需要根據(jù)當(dāng)前的態(tài)勢(shì)作出正確的行為動(dòng)作。
(7)環(huán)境數(shù)據(jù)庫(kù)的主要作用是模擬潛艇作戰(zhàn)戰(zhàn)場(chǎng)環(huán)境,包括大氣環(huán)境中的氣溫、濕度、能見(jiàn)度和云層厚度等因素;海洋環(huán)境中的潮流、涌浪、鹽度、溫度以及聲速梯度等因素;地理環(huán)境中的海底地貌、地層高度等因素。
(8)裝備參數(shù)數(shù)據(jù)庫(kù)封裝了所有裝備的性能參數(shù)數(shù)據(jù),為模型層中的裝備類(lèi)模型提供數(shù)據(jù)支撐。例如,魚(yú)雷武器裝備模型在生成實(shí)體對(duì)象時(shí),需要調(diào)用裝備參數(shù)數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù),包括魚(yú)雷的導(dǎo)引方
式、自導(dǎo)開(kāi)機(jī)距離、最大/小巡航速度、最大/小航行深度等。
(9)兵力參數(shù)數(shù)據(jù)庫(kù)封裝了所有兵力的性能參數(shù)數(shù)據(jù),為模型層中的兵力類(lèi)模型提供數(shù)據(jù)支撐。例如:兵力類(lèi)模型在生成實(shí)體對(duì)象時(shí),需要調(diào)用兵力參數(shù)數(shù)據(jù)庫(kù)中的相關(guān)數(shù)據(jù),包括兵力類(lèi)型、長(zhǎng)/寬/高、排水量、吃水深度、最大/小巡航速度等。
上述模型體系中模型模塊具有以下特點(diǎn):環(huán)境模型統(tǒng)一由底層環(huán)境數(shù)據(jù)庫(kù)支撐,將數(shù)據(jù)與模型實(shí)現(xiàn)了分離,兵力和裝備性能參數(shù)與具體模型實(shí)現(xiàn)了分離。在基于組件的建模思想下,可以最大程度地實(shí)現(xiàn)模型的重用和模型的可重配置。
3.1 作戰(zhàn)仿真系統(tǒng)軟件架構(gòu)
基于JavaEE/EJB組件技術(shù)可以構(gòu)建功能分布及服務(wù)分層的潛艇作戰(zhàn)軟件架構(gòu)如圖3所示。
圖3 潛艇作戰(zhàn)軟件層次關(guān)系圖
功能分布是指不同系統(tǒng)的功能臺(tái)軟件實(shí)現(xiàn)其獨(dú)有的功能。例如:指控功能臺(tái)的決策功能,武器功能臺(tái)的武器操作控制功能等。服務(wù)分層有兩層含義:一是指對(duì)于一些公共的功能通過(guò)組件技術(shù)實(shí)現(xiàn)形成可以在全系統(tǒng)共享的軟件模塊;二是指對(duì)于不同類(lèi)型的軟件模塊通過(guò)劃分層次建立相互之間的調(diào)用結(jié)構(gòu)。這些都有利于提高開(kāi)發(fā)效率,節(jié)省計(jì)算資源,提高系統(tǒng)可維護(hù)性。
圖3中,3層所扮演的角色各不相同:應(yīng)用層的應(yīng)用程序代表了各分系統(tǒng)操作設(shè)備(如指控系統(tǒng)功能臺(tái)、聲納功能臺(tái)、雷達(dá)功能臺(tái)等),它們是人機(jī)交互界面,負(fù)責(zé)接受用戶的輸入和操作、數(shù)據(jù)輸出顯示;服務(wù)層是由基于組件標(biāo)準(zhǔn)構(gòu)建起來(lái)的軟件功能實(shí)現(xiàn),組件按照低耦合高內(nèi)聚的原則劃分,根據(jù)其服務(wù)類(lèi)型不同,組件形成了3個(gè)層次。高層需要底層組件提供服務(wù)[4],從而構(gòu)成了模塊化強(qiáng),可重構(gòu)的服務(wù)層,數(shù)據(jù)層提供了公共數(shù)據(jù)存儲(chǔ)服務(wù)。
由于JavaEE/EJB支持多種客戶層編程開(kāi)發(fā)模式,使得應(yīng)用層的客戶軟件可以是功能簡(jiǎn)單的B/S型程序,也可以是功能復(fù)雜的C/S型程序。從而大大豐富了軟件開(kāi)發(fā)模式,可滿足不同崗位,不同系統(tǒng)使用人員的需求。
3.2 作戰(zhàn)系統(tǒng)軟件有關(guān)技術(shù)協(xié)議
JavaEE軟件技術(shù)框架有一系列核心技術(shù)規(guī)范組成,例如 EJB、CORBA、RMI、JSP、Java Servlet、JavaBean、JDBC、XML、JMS等。其中與本系統(tǒng)相關(guān)的協(xié)議主要有:
(1)EJB(Enterprise JavaBeans)規(guī)范[5]
EJB不是一個(gè)具體的產(chǎn)品,而是一個(gè)Java服務(wù)器端組件開(kāi)發(fā)的規(guī)范,軟件廠商根據(jù)它來(lái)實(shí)現(xiàn)EJB服務(wù)器。EJB規(guī)范在簡(jiǎn)化分布式應(yīng)用程序開(kāi)發(fā)復(fù)雜性方面做了大量的工作,所以EJB程序員不必太擔(dān)心事務(wù)處理、多線程、資源管理等方面的問(wèn)題,可以專(zhuān)注于支持應(yīng)用所需的商業(yè)邏輯,而不用擔(dān)心周?chē)蚣艿膶?shí)現(xiàn)問(wèn)題。EJB的使用增強(qiáng)了整個(gè)系統(tǒng)程序的可靠性、可管理性和可移植性。
(2)Java RMI-IIOP
RMI(Remote Method Invocation遠(yuǎn)程方法調(diào)用)是Java的網(wǎng)絡(luò)分布式應(yīng)用系統(tǒng)的核心解決方案之一。它可以被看作是RPC的Java版本。但是傳統(tǒng)RPC并不能很好地應(yīng)用于分布式對(duì)象系統(tǒng)。而Java RMI則支持存儲(chǔ)于不同地址空間的程序級(jí)對(duì)象之間彼此進(jìn)行通信,實(shí)現(xiàn)遠(yuǎn)程對(duì)象之間的無(wú)縫遠(yuǎn)程調(diào)用。
RMI應(yīng)用程序通常包括兩個(gè)獨(dú)立的程序:服務(wù)器程序和客戶機(jī)程序。典型的服務(wù)器應(yīng)用程序?qū)?chuàng)建多個(gè)遠(yuǎn)程對(duì)象,使這些遠(yuǎn)程對(duì)象能夠被引用,然后等待客戶機(jī)調(diào)用這些遠(yuǎn)程對(duì)象的方法。而典型的客戶機(jī)程序則從服務(wù)器中得到一個(gè)或多個(gè)遠(yuǎn)程對(duì)象的引用,然后調(diào)用遠(yuǎn)程對(duì)象的方法,RMI為服務(wù)器和客戶機(jī)進(jìn)行通信和信息傳遞提供了一種機(jī)制。
(3)目錄服務(wù)和JNDI
目錄服務(wù)可以理解為名稱服務(wù)的一個(gè)擴(kuò)展,它允許在服務(wù)中的各項(xiàng)擁有自己的屬性。目錄服務(wù)中的信息采用層次模型來(lái)表示。JNDI為多種目錄服務(wù)提供了一種標(biāo)準(zhǔn)API[6]。
3.3 組件功能分配與調(diào)用關(guān)系
編寫(xiě)Java RMI分布式應(yīng)用程序的步驟主要包括以下幾步:
(1)將遠(yuǎn)程類(lèi)的功能定義為Java接口,在Java中,遠(yuǎn)程對(duì)象是實(shí)現(xiàn)遠(yuǎn)程接口的類(lèi)的實(shí)例。在遠(yuǎn)程接口中聲明每個(gè)要遠(yuǎn)程調(diào)用的方法。除了所有應(yīng)用程序特定的異常之外,每個(gè)方法還必須拋出java. rmi.RemoteException(或者 RemoteExcepition的超類(lèi))異常。任何作為參數(shù)或返回值傳送的遠(yuǎn)程對(duì)象的數(shù)據(jù)類(lèi)型必須聲明為遠(yuǎn)程接口類(lèi)型,而不是實(shí)現(xiàn)
類(lèi)[7]。
(2)編寫(xiě)和實(shí)現(xiàn)服務(wù)器類(lèi)。該類(lèi)是實(shí)現(xiàn)(1)中定義的遠(yuǎn)程接口。所以在該類(lèi)中至少要聲明實(shí)現(xiàn)一個(gè)遠(yuǎn)程接口,并且必須具有構(gòu)造方法。在該類(lèi)中還要實(shí)現(xiàn)遠(yuǎn)程接口中所聲明的各個(gè)遠(yuǎn)程方法。
(3)編寫(xiě)使用遠(yuǎn)程服務(wù)的客戶機(jī)程序。在該類(lèi)中使用java.rmi.Naming中的lookup()方法獲得對(duì)遠(yuǎn)程對(duì)象的引用,依據(jù)需要調(diào)用該引用的遠(yuǎn)程方法,其調(diào)用方式和對(duì)本地對(duì)象方法的調(diào)用相同。
(4)使用javac編譯遠(yuǎn)程接口類(lèi),遠(yuǎn)程接口實(shí)現(xiàn)類(lèi)和客戶機(jī)程序。使用rmic編譯器生成實(shí)現(xiàn)類(lèi)的stub和skeleton。
(5)啟動(dòng)RMI注冊(cè)服務(wù)程序rmi-registry。
(6)啟動(dòng)服務(wù)器端程序。
(7)啟動(dòng)客戶機(jī)程序。
4.1 系統(tǒng)結(jié)構(gòu)配置
分布式潛艇作戰(zhàn)仿真系統(tǒng)軟件結(jié)構(gòu)如圖4所示。
圖4 系統(tǒng)軟件分層結(jié)構(gòu)示意圖
圖4中,由于3層所扮演的角色各不相同,其軟硬件配置各不相同:
(1)應(yīng)用層:硬件采用通用計(jì)算機(jī),軟件采用操作系統(tǒng)WindowsXP、Java虛擬機(jī)JVM,應(yīng)用程序集成開(kāi)發(fā)環(huán)境Netbeans。
(2)服務(wù)層:硬件采用應(yīng)用服務(wù)器(高性能通用計(jì)算機(jī)),軟件采用操作系統(tǒng)WindowsXP、Java虛擬機(jī)JVM,應(yīng)用服務(wù)器Glassfish。
(3)數(shù)據(jù)層:硬件采用數(shù)據(jù)庫(kù)服務(wù)器(通用計(jì)算機(jī)),軟件采用操作系統(tǒng)WindowsXP,數(shù)據(jù)庫(kù)系統(tǒng)軟件MySQL。
系統(tǒng)硬件環(huán)境如圖5所示。
圖5 仿真系統(tǒng)硬件組成
4.2 服務(wù)器端組件開(kāi)發(fā)部署
根據(jù)功能設(shè)計(jì)服務(wù)器端的應(yīng)用程序,即設(shè)計(jì)各種可以被客戶端調(diào)用的功能組件。過(guò)程如下:
(1)在Netbeans開(kāi)發(fā)環(huán)境下選擇“企業(yè)應(yīng)用程序”類(lèi)型,生成EJB工程;
(2)在EJB工程下開(kāi)發(fā)各種組件,包含前文介紹的潛艇作戰(zhàn)仿真模型體系構(gòu)成中的所有模型組件;
(3)將EJB工程部署到Glassfish應(yīng)用程序服務(wù)器。
4.3 數(shù)據(jù)庫(kù)設(shè)計(jì)
采用MySQL,該數(shù)據(jù)庫(kù)為開(kāi)源軟件,由于得到了廣泛的使用和固定社區(qū)維護(hù)改進(jìn),具有較高性能和可靠性。數(shù)據(jù)庫(kù)分為兵力數(shù)據(jù)庫(kù)、武器裝備參數(shù)數(shù)據(jù)庫(kù)和水聲環(huán)境數(shù)據(jù)庫(kù)。
4.4 客戶端(應(yīng)用程序端)組件調(diào)用
客戶端應(yīng)用程序調(diào)用服務(wù)器端的EJB組件時(shí),只需要了解組件的功能和調(diào)用接口,其實(shí)現(xiàn)細(xì)節(jié)被封裝??蛻舳藨?yīng)用程序通過(guò)統(tǒng)一規(guī)范的JNDI服務(wù)查找并使用組件,而服務(wù)器端EJB容器則負(fù)責(zé)組件的創(chuàng)建/刪除、鈍化/激活、服務(wù)的提供等生命周期的全過(guò)程管理。
客戶端應(yīng)用程序調(diào)用查找調(diào)用組件代碼片斷如下:
程序執(zhí)行過(guò)程中,客戶端應(yīng)用程序通過(guò)定時(shí)服務(wù)調(diào)用組件代碼片斷如下:
4.5 系統(tǒng)應(yīng)用
利用本系統(tǒng)可以進(jìn)行多種樣式的潛艇作戰(zhàn)仿真,在仿真過(guò)程中,各功能組件供不同的仿真任務(wù)調(diào)用,也就是說(shuō),相同的功能模塊調(diào)用是同一個(gè)的功能組件,比如在進(jìn)行潛艇魚(yú)雷攻擊作戰(zhàn)仿真中,所有實(shí)體(艦艇、潛艇、魚(yú)雷、誘餌等)運(yùn)動(dòng)調(diào)用的是同一個(gè)運(yùn)動(dòng)模型組件,所有的魚(yú)雷探測(cè)調(diào)用的也都是同一個(gè)魚(yú)雷探測(cè)組件,圖6是潛艇魚(yú)雷攻擊作戰(zhàn)仿真的界面截圖:
圖6 潛艇魚(yú)雷攻擊仿真界面截圖
為了適應(yīng)潛艇作戰(zhàn)不斷變化的情況,必須考慮模型的重用性和共享性,本文采用軟件工程領(lǐng)域最新研究成果,按照共享和重用的要求研究潛艇作戰(zhàn)模型的組件化實(shí)現(xiàn)技術(shù),以實(shí)現(xiàn)模型的重用性,有效提高了針對(duì)不同仿真任務(wù)的潛艇作戰(zhàn)仿真的靈活性。
[1]冷 寧,周 鍵.基于EJB的分布式系統(tǒng)的研究[J].合肥工業(yè)大學(xué)學(xué)報(bào),2004,49(2):15-17.
[2]趙正業(yè).潛艇火控原理[M].北京:國(guó)防工業(yè)出版社,2003.
[3]陸銘華,王永潔.基于組件的反艦導(dǎo)彈作戰(zhàn)仿真系統(tǒng)研究[J].戰(zhàn)術(shù)導(dǎo)彈技術(shù),2012,23(1):27-31.
[4]郭傳福,夏惠誠(chéng).分布式作戰(zhàn)系統(tǒng)集成方案構(gòu)想[J].艦船電子工程,2001,21(1):81-85.
[5]王 偉,賈慧娟.基于MVC模式的分布式作戰(zhàn)指揮系統(tǒng)研究[J].微計(jì)算機(jī)信息,2007,4(23):10.
[6]盧志寧,宋瑾鈺.基于UML的面向?qū)ο笸ㄐ艆f(xié)議建模技術(shù)研究[J].現(xiàn)代電子技術(shù),2007,31(12):1.
[7]劉吉軍,李 剛,王宗亮.基于神經(jīng)網(wǎng)絡(luò)模型的潛射反航導(dǎo)彈作戰(zhàn)效能分析[J].四川兵工學(xué)報(bào),2013,34(1):42-44.
Research of Distributed Submarine Warfare Simulation System Based on Component
WANG Yong-jie,LU Ming-hua,SHI Yang
(Navy Submarine College,Qingdao 266071,China)
This paper puts forward to develop distributed submarine warfare simulation system with Java EE/EJB component technology.Model component architecture is compartmentalized according to submarine warfare logic.The paper designs software structure of distributed submarine warfare simulation system,analyzes technology protocol of the system,and researches realization way of distributed submarine warfare simulation system.
component,submarine,warfare simulation,software structure
TP391.9
A
1002-0640(2014)09-0175-04
2013-06-05
2013-08-30
王永潔(1979- ),男,安徽人,博士后。研究方向:作戰(zhàn)仿真技術(shù)。