基于J2EE的CAD协同设计的方案研究与实现
2009-01-05
作者:何国军 梁允荣 张红梅
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/