1. CSCW的概念及其發展
??? 對于CSCW,從管理者的角度來看,我們可以這樣認為:在計算機支持下,他所管理的一個群體為了完成一項共同的任務而進行協作。這個群體內部又根據需要劃分為若干個工作組,每個工作組完成任務的一部分,各個工作組的工作集合起來完成整個任務。
??? CSCW自提出以來,在許多方面得到了廣泛應用,主要有:電子會議系統,協同設計,醫療領域等,為了實現在分布式環境下的協同工作,在創建CSCW應用系統時,人們提出了一些有指導性的協同模式,包括集中式同步模式,分布式同步模式,集中式異步模式,分布式異步模式[1]。
??? 常用于實現CSCW的方法主要有語音、視頻、文字、白板、應用共享、數據共享等。為提高協同工作的效率,CSCW系統可能經常會同時實現多種方法,使用戶可以通過多種途徑協同工作。
??? 本文實現的系統采用了數據共享和應用共享兩種方式來實現CSCW,在工程數據庫的實現上采用基于工程數據庫管理的數據共享方法,這吸收了Web應用的先天優點,實現的是分布式異步模式。在協同設計核心,采用應用共享,實現了分布式同步模式。
2. 基于工程數據庫的協同設計系統簡介
2.1 采用Web形式進行工程數據庫管理
??? 所謂Web形式,就是只安裝和維護一個Web服務器(Web Server),而客戶端采用瀏覽器(Browser),即傳統的瀏覽器/服務器(B/S)結構。B/S結構的優點是維護方便,能夠降低總體成本。客戶端程序運行時就像我們平時上網瀏覽網頁一樣,有一個瀏覽器(通常是IE6.0)就行了,不用安裝其它支持軟件。B/S結構的軟件所有的維護、升級工作都只在服務器上進行,服務器進行更改后就可以在客戶端上體現出來。
??? 相對于B/S結構,C/S結構的圖形界面對于用戶來說是十分友好的,而且本地的圖形界面也提供了功能強大的事件以及消息處理機制,有利于處理邏輯密集型任務,但實現CSCW需要進行更低一層的編程。因此本系統采用基于數據共享的Web形式實現工程數據庫系統,而關鍵的CSCW功能由一個內嵌的Applet來完成。這個組件具有本地圖形界面的功能,能夠進行消息處理,完成復雜的CSCW核心工作。
??? 在應用服務器選擇方面,CGI標準能夠提供動態數據,但CGI運行在單獨的進程里,使這種技術在效率上不可能很高;ISAPI/NSAPI是使用服務器特定的應用編程接口來實現功能的,與web運行在同一個進程,任何錯誤都可能導致web進程的摧毀;ASP技術可以把腳本代碼插入到HTML中,但多線程和數據共享實現困難,因此并發不易實現;Java Servlet是服務器端獨立的軟件組件,是一個協議或平臺,Java Servlet在Web Server或Java Application Server上裝載并在JVM上運行,可以在Web進程之內或之外運行,完全依賴于設置,因為有了JVM的支持,可以跨平臺,實現了多線程,每次請求只是建立一個線程,效率較高。在第一個請求到達時,Servlet是預先編譯好的Web程序,響應HTTP請求較快,而且不存在代碼泄漏問題[2]。因此本文采用JSP/ Servlet技術實現了基于Web工程數據庫管理系統。見下圖:

??? 在系統工作過程中,某一客戶端(CAD協同設計者)發出HTTP請求,Controller Servlet負責接收這些請求,并做初步處理,如處理用戶權限驗證等,Controller Servlet的另一項重要的工作是建立一系列哈希表并從屬性設置文件初始化這些哈希表,這些表中比較重要的是Coordinator Servlet映射表,它把Controller Servlet所接收到的事件映射到每一個Coordinator Servlet,并把控制轉到相應的Coordinator Servlet,Coordinator Servlet的工作是調度相應的JSP視圖;在內部初始化Java Bean,并調度Java Bean完成業務邏輯的處理,把處理結果填入Java Bean,然后調度與其相關的JSP視圖,把Java Bean的狀態填入JSP視圖,然后把控制轉移到JSP視圖,由JSP視圖給客戶端產生響應。在協同設計的情況下,JSP視圖通過內嵌的組件啟動企業級設計程序,使得企業級設計程序通過系統與設計參數庫進行數據交換,實現設計的持久化與不同客戶端的基于數據共享的協同設計。
2.2 系統與工程數據庫的數據交換
??? 在本系統中,數據庫是各協同設計用戶之間進行交互的物理基礎。各客戶之間的耦合正是通過對工程數據庫的不同權限來控制的。在訪問數據庫的接口設計方面,JDBC是一種可用于執行SQL語句的Java API(Application Programming Interface應用程序設計接口),采用JDBC來訪問數據庫成為系統的首選。JDBC由一些Java語言編寫的類和界面組成,為數據庫應用、數據庫前臺工具提供了一種標準的應用程序設計接口,可以用純的Java語言編寫完整的數據庫應用程序。通過使用JDBC,可以方便的將SQL語句傳送給幾乎任何一種數據庫。也就是說,可以不必寫一個程序訪問Sybase,寫另一個程序訪問Oracle,再寫一個程序訪問Microsoft SQL Server,也就是說,可以不用進行較大的修改而改變數據庫管理系統或者客戶端應用,使得JDBC成為聯系應用與數據的獨立層。用JDBC寫的程序能自動地將SQL語句傳送給DBMS(數據庫管理系統),不但如此,使用Java編寫的應用程序可以在任何支持Java的平臺上運行,不必在不同的平臺上編寫不同的應用程序。Java和JDBC的結合可以在開發數據庫應用時真正實現“一次編寫,隨處運行[3]”。
2.3系統與I-DEAS的交互功能的實現
2.3.1 訪問I-DEAS的接口Open I-DEAS
??? 很多CAD系統提供了二次開發的接口,使用戶能夠很方便的與CAD軟件進行通訊,這些通訊往往遵守一些特定的標準。就I-DEAS8.0 而言,與其通訊需要通過OPEN I-DEAS進行。OPEN I-DEAS是一個基于CORBA規范的開放型接口組件,通過這個組件,應用程序可以訪問I-DEAS中各種接口(用于描述CORBA服務器向客戶端所提供的服務的描述性語言是IDL,即Interface?? Description Language,IDL接口在向客戶端編程語言映射時,映射到C++編程語言時,映射為類,映射到Java時,映射為公共Java接口,因此本文提到的接口在C++的意義上是類,本文并不區分接口和類,所有接口字樣可以替換為類,以便于C++程序員的理解),通過訪問OPEN I-DEAS的接口就可以獲得I-DEAS的服務。 ?
??? OPEN I-DEAS實現了眾多的服務器接口和幾何接口、FEM接口、IDM元素接口、選取操作接口等,向I-DEAS客戶提供各種服務。幾乎所有的接口都從OI_Base直接或間接派生而來,OI_Base的直接子類主要包括各種服務器接口和OI_Root接口。關于OPEN I-DEAS實現的接口,見圖2。

其中:
OI_Server:訪問其他所有功能的“入口”接口,客戶應用程序首先連接到這個接口,然后再通過這個接口提供的方法訪問其他接口。
OI_AccessControlServer:鎖定服務器端應用程序,使之只能被一個客戶訪問。
OI_CommandServer:向I-DEAS會話發送記憶的命令。
OI_GUIServer:提供訪問I-DEAS的顏色、字體等GUI資源的途徑。
OI_SelectionServer:提供了從I-DEAS繪圖區域選取不同實體的功能。
OI_WorkbenchServer:提供了訪問I-DEAS工作臺的途徑。
OI_DataInstallation:提供了訪問I-DEAS數據管理系統的途徑。
OI_Root:由客戶請求而創建的接口的父類。
??? 存儲斗接口,零件接口,曲線接口,表面接口,有限元模型接口都從OI_Root接口派生而來,其派生關系見下圖。

其中:
OI_Bin:存儲斗接口。
OI_Part:零件接口。
OI_Curve:曲線接口。
OI_Surface:表面接口。
OI_FEModel:有限元模型接口。
??? 客戶在訪問I-DEAS時,首先調用OI_Connect()方法連接到Orbix服務器,該方法返回OI_Server接口的一個引用。然后由OI_Server接口訪問其他服務器接口或幾何接口、FEM接口、IDM元素接口等,然后使用這些接口的方法完成進一步的操作。
2.3.2工程數據庫和I-DEAS數據交換的Applet的實現
??? 工程數據庫和I-DEAS的數據交換是采用JSP和Applet相結合的方式實現的,JSP通過JDBC連接到工程數據庫,而Applet 則遵循CORBA協議與OPEN I-DEAS進行交互。
??? Java Applet是一個小的Java程序,它動態的從網上下載,就類似一個圖像或一段錄音剪輯。最重要的是Java Applet是一個智能化的程序,而不僅僅是一個動畫或多媒體文件,它能夠響應用戶輸入,捕捉用戶發出的消息。它由瀏覽器所帶的Java虛擬機解釋執行,Java Applet的這種特性使得系統的消息處理機制得以正常運行。Java語言所提供的AWT(Abstract Window Toolkit)和Event類也使得使用HTML語言所實現的界面與傳統的VC、VB所實現的界面相比,毫不遜色。它提供了VB、VC等語言所提供的大部分界面實現功能。例如,菜單、對話框、窗口等,并提供了多種布局管理器,以達到視圖上的完美。對于事件處理,Java語言提供了Event類來捕捉各種事件,包括鍵盤、鼠標等各種事件。Applet通過OPEN I-DEAS與I-DEAS建立通信,訪問或修改尺寸等參數的過程如下:
??? 首先連接到OPEN I-DEAS服務器,調用IIOPConnectServer()方法,生成OI_Server類的一個接口實例變量,就可以連接到OPEN I-DEAS服務器。調用OI_Server的GetBins()方法獲得存儲斗序列接口實例,存儲斗序列是存儲斗接口的集合,其每一個元素都是一個存儲斗接口實例。調用OI_Bin的GetParts()方法獲得存儲斗中的零件序列,并獲得零件接口。調用OI_Part的GetAllKeyDimensions()方法獲得尺寸序列,并獲得尺寸接口實例。調用尺寸接口的GetName()方法和GetValue()方法可獲取尺寸的名稱和值屬性。用ModifyValue()方法可修改尺寸的值。更改尺寸后,調用OI_Part接口的Update()方法可更新零件。
??? 本文實現的Applet,其核心就是通過OPEN I-DEAS與I-DEAS建立連接,通過訪問I-DEAS的接口,獲得存儲斗序列,進一步獲得機件,零件,進而修改零件尺寸。通過把零件尺寸寫入工程數據庫實現零件永久化,進而實現PDM的部分功能。Applet技術是Java組件技術之一,在需要時從網絡上下載到本地,相對于COM技術,Java Applet在根本上是安全的,因為解釋器只有在Applet的中間碼沒有異常的情況下才允許它運行,而且不能訪問沒有訪問許可的內存,所以采用Java技術和Applet提供了很高的安全性,使得部署系統而不用考慮安全問題。
3 .結論
????基于J2EE的Web形式的數據庫管理,由于有強大的Java技術做后盾,而且可以根據需要決定設計模式,實現N層應用,是企業級Web應用很好的解決方案。基于Java的組件技術,再加上CORBA規范的靈活性、跨語言能力、跨平臺實現及安全性等方,所以它成為實現真正的開放式結構的應用程序的首選標準。Java技術與CORBA規范結合,實現開放式多層次模塊化企業級應用的方法,必將得到更深的研究和更快的發展。
4.參考文獻:
[1] 潘耘,冷英男,李文超,么永輝,王小霞,CSCW的研究內容及其關鍵技術,撫順石油學院學報,2001.09
[2] 鐘宏,Internet/Intranet關鍵技術,北京理工大學課程講義,2002.9-2002.11
[3] Simon Brown,Robert Burdick等Professional JSP 2nd Edition
[4] http://java.sun.com/
