999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于DWF、數(shù)據(jù)事務(wù)和PRO*C的可視化系統(tǒng)的研究與實現(xiàn)

2008-01-29 00:26:36
船海工程 2008年1期
關(guān)鍵詞:船舶程序數(shù)據(jù)庫

, ,

(1.江南大學(xué)信息工程學(xué)院,江蘇 無錫 214122;2.中國船舶科學(xué)研究中心,江蘇 無錫 214082)

信息化和網(wǎng)絡(luò)化成為企業(yè)發(fā)展的趨勢,這個趨勢也對數(shù)據(jù)的可視化提出了更高的要求。

傳統(tǒng)的JAVA圖形開發(fā)方案滿足不了實際的需要,對比圖1a)、b),圖1a)在船舶數(shù)據(jù)可視化中顯示的細(xì)節(jié)、效果、精度、色彩等方面明顯優(yōu)越于圖1b)。

以前的系統(tǒng)大都是單機(jī)版,許多關(guān)鍵的信息被封閉在相互獨立的系統(tǒng)中,滿足不了船舶科研、設(shè)計、制造業(yè)共享數(shù)據(jù)信息的需要。因此,引入了新的圖形開發(fā)工具:Autodesk DWF。由于DWF文件高度壓縮,只有同規(guī)模數(shù)據(jù)CAD大小的八分之一,可以在網(wǎng)絡(luò)上進(jìn)行發(fā)布,適合在網(wǎng)絡(luò)上進(jìn)行傳輸,傳輸速度快,同時,可用于交流豐富的設(shè)計數(shù)據(jù),而無需一般CAD圖形相關(guān)的網(wǎng)絡(luò)開銷。

a) DWF圖形

b) JAVA圖形圖1 圖形對比

1 系統(tǒng)的總體設(shè)計

系統(tǒng)結(jié)構(gòu)設(shè)計見圖2。

圖2 系統(tǒng)結(jié)構(gòu)

結(jié)合圖2,用戶通過平臺軟件接口系統(tǒng)登錄,輸入需要查詢的船舶編號。系統(tǒng)響應(yīng)請求,把信息傳遞給Web服務(wù)器中的命令解析模塊,確定該用戶是否具有查看DWF圖形的權(quán)限,并對用戶提交的信息進(jìn)行解釋和進(jìn)一步的整合、加工,再傳遞給應(yīng)用服務(wù)器中的應(yīng)用模塊,應(yīng)用模塊響應(yīng)消息,調(diào)用圖形處理模塊對信息進(jìn)行處理,并從數(shù)據(jù)庫中讀取數(shù)據(jù)。

如果此船舶數(shù)據(jù)滿足生成圖形的需要,則會有提示,同時生成圖形并返回正確地結(jié)果,并提供Autodesk DWF Viewer插件的下載,以顯示船舶型線圖。對一些特權(quán)用戶同時提供同一船舶數(shù)據(jù)的下載。

沒有圖形可顯示,則返回相關(guān)的數(shù)據(jù)信息。

2 圖形集成的具體實現(xiàn)

2.1 優(yōu)化的數(shù)據(jù)處理方法

數(shù)據(jù)的存儲速度和處理效率等問題是Web系統(tǒng)非常關(guān)鍵的一個方面。在這里對Hibernate框架本身進(jìn)行調(diào)優(yōu),對ORAELE數(shù)據(jù)庫進(jìn)行優(yōu)化和改造。

2.1.1 Hibernate性能調(diào)優(yōu)

由于使用的是Hibernate框架,采用的是ORM(對象關(guān)系映射),這就決定了數(shù)據(jù)庫的設(shè)計。對數(shù)據(jù)庫中大表進(jìn)行操作時,利用Hibernate,傾向于細(xì)顆粒度的設(shè)計[1],面向?qū)ο螅瑢⒋蟊聿鸱譃槎鄠€關(guān)聯(lián)關(guān)系的小表,消除冗余column,通過二級緩存提升性能(DBA比較忌諱關(guān)聯(lián)關(guān)系的出現(xiàn),但是ORM的緩存將突破關(guān)聯(lián)關(guān)系的性能瓶頸),可以最大程度的提升代碼的重用性;Hibernate的性能瓶頸不在于關(guān)聯(lián)關(guān)系,而在于大表的操作。

細(xì)顆粒度,針對表的記錄級別,透明化訪問,在不改變程序代碼的情況下可以極大提升Web應(yīng)用的性能。也可以適當(dāng)?shù)募尤胍恍㎎DBC語句,和Hibernate結(jié)合。

2.1.2 在ORACLE數(shù)據(jù)庫中使用視圖

本系統(tǒng)在對數(shù)據(jù)進(jìn)行操作處理時,也涉及到多個表的情況。如果不對表進(jìn)行任何處理,利用表之間的關(guān)系直接查詢,則會對無用數(shù)據(jù)也進(jìn)行查詢,造成數(shù)據(jù)的冗余,減慢了速度,犧牲了效率,讓用戶明顯感覺速度慢。因此,在ORACLE數(shù)據(jù)庫中,創(chuàng)建視圖,對有用數(shù)據(jù)進(jìn)行整合加工,按照需求設(shè)置一些派生的屬性列。這樣既可以簡化數(shù)據(jù)庫結(jié)構(gòu),也可以簡化數(shù)據(jù)的查詢操作,同時可以讓用戶從不同的角度去對待同一數(shù)據(jù),提升數(shù)據(jù)的靈活性和邏輯獨立性。

上面兩種方法的結(jié)合,最大程度地提高了數(shù)據(jù)的存儲效率,使整個Web系統(tǒng)在數(shù)據(jù)操作方面達(dá)到了最優(yōu)。

2.2 數(shù)據(jù)的獲取

有了高效率的數(shù)據(jù)操作方法,則可以利用其對數(shù)據(jù)進(jìn)行所需要的操作。

2.2.1 引入PRO*C技術(shù)

針對系統(tǒng)的需求,引入了PRO*C技術(shù)。在圖形程序中加入直接從數(shù)據(jù)庫中讀取數(shù)據(jù)的功能,用DLL直接進(jìn)行封裝,減少數(shù)據(jù)的包裝次數(shù)。

2.2.2 數(shù)據(jù)的獲得

利用PRO*C技術(shù),先把需要查詢的程序在VC的.pc文件中以PRO*C語法寫出。

1) 連接數(shù)據(jù)庫。

2) 查詢和獲得數(shù)據(jù),然后從宿主變量中取出數(shù)據(jù),放在自己定義的數(shù)據(jù)結(jié)構(gòu)中,配置好環(huán)境,通過ORACLE數(shù)據(jù)庫自帶的預(yù)編譯工具,把代碼編譯成C++源碼,可以直接在圖形程序中對其進(jìn)行調(diào)用。

3) 與數(shù)據(jù)庫斷開連接。

2.2.3 數(shù)據(jù)的傳遞

因為是在VC圖形程序中獲得數(shù)據(jù),而且在VC.NET平臺下直接使用了PRO*C技術(shù)對ORACLE數(shù)據(jù)庫直接進(jìn)行操作,使得對數(shù)據(jù)的封裝次數(shù)減少,而且不需要對JAVA和C++之間的數(shù)據(jù),類型進(jìn)行過多的轉(zhuǎn)換,無形當(dāng)中也提高了存取數(shù)據(jù)的速度。

在本系統(tǒng)中,J2EE平臺需要做的只是傳遞一個船舶的編號進(jìn)入圖形DLL,就可以實現(xiàn)圖形的生成和查看。

3 圖形的生成

1) 結(jié)合參考文獻(xiàn)[2]中提供的對非均勻B樣條算法(NURBS)的升階,插值等成果,在程序中加強(qiáng)對邊界條件的控制。

2) 利用功能函數(shù),第一個是數(shù)據(jù)處理函數(shù)DataOperation,把從數(shù)據(jù)庫中讀出的數(shù)據(jù)從新整合和加工,讓數(shù)據(jù)的組織方式滿足船舶的水線、站線和縱剖線三大塊的需要,使三者可以獨立被操作而互相不影響;另外一個函數(shù)是Calc_ControlPoints,調(diào)用算法求控制點,并為控制點賦值。讀取數(shù)據(jù)后,就可以根據(jù)船舶的型值點利用Calc_ControlPoints計算出控制點,然后再根據(jù)控制點畫出對應(yīng)的曲線。Calc_ControlPoints被圖形的整體建模函數(shù)調(diào)用,用于圖形的整體建模。

3) 入口函數(shù)對數(shù)據(jù)處理函數(shù)和圖形整體建模函數(shù)進(jìn)行調(diào)用,對兩者加以整合,只需傳送一個數(shù)據(jù)庫中存在的船舶的編號,就可以生成相應(yīng)的船舶型線圖。

4 JNI技術(shù)的應(yīng)用

阻礙Java獲得廣泛應(yīng)用的一個主要因素是其運行效率。Java是介于解釋型和編譯型之間的一種語言,同樣的程序,如果用編譯型語言C++來實現(xiàn),其運行速度一般要比Java快一倍以上。Java具有平臺無關(guān)性,但是性能方面的因素又大大削弱了它的競爭力。為此,提高Java的性能就顯得十分重要。

因此,利用Java開發(fā)的Web信息系統(tǒng),通過網(wǎng)絡(luò)傳輸,最后在客戶端顯示船舶性能曲線、以及船型型線的三維圖片,對圖片的顯示的精確度要求很高。而圖片生成是Java開發(fā)的不足之處,特別是圖片顯示的效果、精度都不夠。綜合系統(tǒng)的要求,引入了JNI(java native interface),利用混合編程技術(shù),在Java程序中調(diào)用VC++環(huán)境下開發(fā)的DWF圖形。在發(fā)揮Java語言Web服務(wù)端跨平臺性的同時,利用C++語言的高效性與DWF數(shù)據(jù)量小、安全性高的結(jié)合。項目中JNI技術(shù)的應(yīng)用實現(xiàn)見圖3。

圖3 JNI實現(xiàn)框

4.1 集成的具體實現(xiàn)

1) 編寫需要JNI功能的Java類源文件。其中,需要JNI實現(xiàn)的方法用native關(guān)鍵字聲明。在該類中,用System.loadLibrary()方法加載需要的動態(tài)鏈接庫。

2) 上面生成的只是SSH框架下的Java類,要想與VC平臺之間進(jìn)行平臺之間的信息通信,必須在兩者之間建立一個“橋梁”,把Java的信息注入到VC的DLL中去,由DOC環(huán)境完成。將該類源文件用Java類編譯器編譯成二進(jìn)制字節(jié)碼文件。由于采用了native關(guān)鍵字聲明,編譯器會忽視沒有代碼體的JNI方法部分。

3) 完成平臺之間的通信,需要提供包含JNI元素的DLL以實現(xiàn)在J2EE平臺下的調(diào)用,生成圖形。由于圖形是直接在VC.NET環(huán)境下開發(fā),只需對VC和Java之間的數(shù)據(jù)類型進(jìn)行轉(zhuǎn)換,對程序只需要進(jìn)行一次DLL的封裝就可以。這個需要DWF庫的支持。

新建DLL工程,把圖形的工程文件以及生成的Java W3D類的頭文件放到DLL工程中去,加載用到的外部DWF開發(fā)包。直接對工程的DLL封裝,需要有一個入口函數(shù),提供調(diào)用入口和平臺之間的數(shù)據(jù)類型轉(zhuǎn)換,所以把原圖形的入口函數(shù)作為DLL的入口函數(shù),其名稱要與W3D類的頭文件中的函數(shù)名一致。

對于DLL的 調(diào)用,有兩個途徑,一個是把DLL放到系統(tǒng)的system32文件夾下面,利用默認(rèn)的系統(tǒng)變量直接調(diào)用;另一個是把DLL存放到指定的位置,需要把DLL所在位置的路徑配置到用戶環(huán)境變量里面才可以進(jìn)行DLL的調(diào)用。

4.2 內(nèi)存管理問題及解決方法

雖然在本地返回 Java 后將自動釋放局部引用,但過多的局部引用將使虛擬機(jī)在執(zhí)行本地方法時耗盡內(nèi)存。在訪問系統(tǒng)的用戶比較少時問題不明顯,一旦多個遠(yuǎn)程用戶同時訪問系統(tǒng),超過Java虛擬機(jī)能夠承受的系統(tǒng)內(nèi)存范圍后,系統(tǒng)就會崩潰。

為了很好地解決這個問題,筆者在整個系統(tǒng)框架中引入了“數(shù)據(jù)庫事務(wù)與并發(fā)”機(jī)制,利用數(shù)據(jù)庫本身來對Java本地引用進(jìn)行控制。

由于在Web系統(tǒng)中圖形數(shù)據(jù)的取得是由幾個固定的SQL 語句來完成,每個用戶訪問數(shù)據(jù)執(zhí)行讀圖程序時,都可以看作為一個事務(wù)[1],多個用戶同時訪問系統(tǒng),執(zhí)行同一個Java本地引用操作時,等同與事物的并發(fā)執(zhí)行,通過程序把這些操作歸結(jié)為一類事務(wù),利用隔離性(數(shù)據(jù)庫系統(tǒng)隔離并發(fā)運行的各個事務(wù)的能力),設(shè)置隔離級別,分別為:Serializable(串行化)、Repeatable Read(可重復(fù)讀)、Read Commited(讀已提交數(shù)據(jù))、Read Uncommited(讀未提交數(shù)據(jù)),隔離級別依次由高到低。其隔離級別與并發(fā)性關(guān)系見圖4。

圖4 隔離級別與并發(fā)性能的關(guān)

隔離級別越高,對并發(fā)性的影響也越大。

對數(shù)據(jù)庫的最大事務(wù)執(zhí)行數(shù)量進(jìn)行設(shè)置。當(dāng)用戶訪問量超出最大可執(zhí)行事務(wù)數(shù)量時,系統(tǒng)會自動提示用戶等待。既保證了數(shù)據(jù)的及時性,安全性和完整性,也防止了因為過多的Java本地引用而造成的內(nèi)存耗盡、系統(tǒng)崩潰。

這樣,大量用戶同時訪問系統(tǒng)時,程序結(jié)合數(shù)據(jù)庫本身,既保證了系統(tǒng)的高效率,又有效地保證了系統(tǒng)的安全。

5 圖形在網(wǎng)絡(luò)中的發(fā)布

系統(tǒng)提供了自動下載Autodesk DWF Viewer插件的功能[4]。通過這個插件,可以查看船舶型線的每一個細(xì)節(jié)。網(wǎng)頁中打開船舶型線圖的效果見圖5。

圖5 3D船舶型線圖

6 結(jié)束語

此系統(tǒng)已經(jīng)投入運行,為船舶結(jié)構(gòu)研究、船舶設(shè)計、船舶制造等方面的工作提供了大量的原型和數(shù)據(jù),使得不同部門之間可以共享船舶模型原型和數(shù)據(jù),大大提高了科研、設(shè)計、生產(chǎn)之間的緊密結(jié)合。

[1] 孫衛(wèi)琴.精通Hibernate:JAVA對象持久化技術(shù)詳解[M].北京:電子工業(yè)出版社,2005.

[2] 陳紹平,陳賓康.組合曲線的NURBS表示及其應(yīng)用[J].武漢理工大學(xué)學(xué)報:交通科學(xué)與工程版,2005,29(4):475-477.

[3] 徐 陽,鐘 崴,童水光.基于Autodesk DWFⅥewer的圖形化標(biāo)注系統(tǒng)[J].計算機(jī)工程,2007,33(2):227-229.

猜你喜歡
船舶程序數(shù)據(jù)庫
計算流體力學(xué)在船舶操縱運動仿真中的應(yīng)用
《船舶》2022 年度征訂啟事
船舶(2021年4期)2021-09-07 17:32:22
船舶!請加速
試論我國未決羈押程序的立法完善
“程序猿”的生活什么樣
英國與歐盟正式啟動“離婚”程序程序
數(shù)據(jù)庫
財經(jīng)(2017年2期)2017-03-10 14:35:35
數(shù)據(jù)庫
財經(jīng)(2016年15期)2016-06-03 07:38:02
數(shù)據(jù)庫
財經(jīng)(2016年3期)2016-03-07 07:44:46
數(shù)據(jù)庫
財經(jīng)(2016年6期)2016-02-24 07:41:51
主站蜘蛛池模板: 免费视频在线2021入口| 国产乱人免费视频| 素人激情视频福利| 91在线一9|永久视频在线| 青青青视频蜜桃一区二区| 最新加勒比隔壁人妻| 亚洲男人的天堂在线观看| 精品成人一区二区三区电影| 伊人久久影视| 亚洲天堂日韩av电影| 久久久久亚洲Av片无码观看| 亚洲人成网站观看在线观看| 婷婷综合在线观看丁香| 国产欧美日韩免费| 在线观看欧美精品二区| 成人免费一级片| 中文字幕在线日韩91| 国产sm重味一区二区三区| 无码国产偷倩在线播放老年人| 亚洲中文字幕日产无码2021| 日本人又色又爽的视频| 国产精品原创不卡在线| 亚洲无码37.| 久久综合成人| 国产网友愉拍精品| 亚洲成人黄色在线| 无码视频国产精品一区二区| 又黄又湿又爽的视频| 国产成人久视频免费| 欧美97欧美综合色伦图| 日韩性网站| 亚洲精品制服丝袜二区| 91在线一9|永久视频在线| 亚洲av无码牛牛影视在线二区| 国产成人狂喷潮在线观看2345| 欧美午夜在线播放| 国产在线第二页| 亚洲一级毛片在线观播放| 伊人久久婷婷| 精品综合久久久久久97超人该| 国产又黄又硬又粗| 国产日产欧美精品| 久爱午夜精品免费视频| 久久精品国产国语对白| 国产在线观看99| 国产粉嫩粉嫩的18在线播放91 | 欧美国产中文| 3344在线观看无码| 日韩午夜伦| 日韩福利在线视频| 欧美人人干| 99成人在线观看| 人妻无码AⅤ中文字| 国产91线观看| 精品久久久久久成人AV| 亚洲色图综合在线| 亚洲人成色在线观看| 91精品伊人久久大香线蕉| 欧美在线观看不卡| 日韩在线2020专区| 中文字幕资源站| 99免费视频观看| 久久频这里精品99香蕉久网址| 国产一级精品毛片基地| 久久男人视频| 亚洲美女操| 在线另类稀缺国产呦| 久久国产成人精品国产成人亚洲| 最新日韩AV网址在线观看| 亚洲综合在线最大成人| 天堂在线www网亚洲| 色综合久久无码网| 久久伊人久久亚洲综合| 99在线视频精品| 99久久亚洲综合精品TS| 欧美一级高清视频在线播放| 精品福利视频网| 国产精品久久久久久久伊一| 亚洲欧美日韩精品专区| 大香网伊人久久综合网2020| 在线欧美日韩| 成人国产一区二区三区|