APP下载

基于DWF、数据事务和PRO*C的可视化系统的研究与实现

2008-01-29

船海工程 2008年1期
关键词:调用程序船舶

, ,

(1.江南大学信息工程学院,江苏 无锡 214122;2.中国船舶科学研究中心,江苏 无锡 214082)

信息化和网络化成为企业发展的趋势,这个趋势也对数据的可视化提出了更高的要求。

传统的JAVA图形开发方案满足不了实际的需要,对比图1a)、b),图1a)在船舶数据可视化中显示的细节、效果、精度、色彩等方面明显优越于图1b)。

以前的系统大都是单机版,许多关键的信息被封闭在相互独立的系统中,满足不了船舶科研、设计、制造业共享数据信息的需要。因此,引入了新的图形开发工具:Autodesk DWF。由于DWF文件高度压缩,只有同规模数据CAD大小的八分之一,可以在网络上进行发布,适合在网络上进行传输,传输速度快,同时,可用于交流丰富的设计数据,而无需一般CAD图形相关的网络开销。

a) DWF图形

b) JAVA图形图1 图形对比

1 系统的总体设计

系统结构设计见图2。

图2 系统结构

结合图2,用户通过平台软件接口系统登录,输入需要查询的船舶编号。系统响应请求,把信息传递给Web服务器中的命令解析模块,确定该用户是否具有查看DWF图形的权限,并对用户提交的信息进行解释和进一步的整合、加工,再传递给应用服务器中的应用模块,应用模块响应消息,调用图形处理模块对信息进行处理,并从数据库中读取数据。

如果此船舶数据满足生成图形的需要,则会有提示,同时生成图形并返回正确地结果,并提供Autodesk DWF Viewer插件的下载,以显示船舶型线图。对一些特权用户同时提供同一船舶数据的下载。

没有图形可显示,则返回相关的数据信息。

2 图形集成的具体实现

2.1 优化的数据处理方法

数据的存储速度和处理效率等问题是Web系统非常关键的一个方面。在这里对Hibernate框架本身进行调优,对ORAELE数据库进行优化和改造。

2.1.1 Hibernate性能调优

由于使用的是Hibernate框架,采用的是ORM(对象关系映射),这就决定了数据库的设计。对数据库中大表进行操作时,利用Hibernate,倾向于细颗粒度的设计[1],面向对象,将大表拆分为多个关联关系的小表,消除冗余column,通过二级缓存提升性能(DBA比较忌讳关联关系的出现,但是ORM的缓存将突破关联关系的性能瓶颈),可以最大程度的提升代码的重用性;Hibernate的性能瓶颈不在于关联关系,而在于大表的操作。

细颗粒度,针对表的记录级别,透明化访问,在不改变程序代码的情况下可以极大提升Web应用的性能。也可以适当的加入一些JDBC语句,和Hibernate结合。

2.1.2 在ORACLE数据库中使用视图

本系统在对数据进行操作处理时,也涉及到多个表的情况。如果不对表进行任何处理,利用表之间的关系直接查询,则会对无用数据也进行查询,造成数据的冗余,减慢了速度,牺牲了效率,让用户明显感觉速度慢。因此,在ORACLE数据库中,创建视图,对有用数据进行整合加工,按照需求设置一些派生的属性列。这样既可以简化数据库结构,也可以简化数据的查询操作,同时可以让用户从不同的角度去对待同一数据,提升数据的灵活性和逻辑独立性。

上面两种方法的结合,最大程度地提高了数据的存储效率,使整个Web系统在数据操作方面达到了最优。

2.2 数据的获取

有了高效率的数据操作方法,则可以利用其对数据进行所需要的操作。

2.2.1 引入PRO*C技术

针对系统的需求,引入了PRO*C技术。在图形程序中加入直接从数据库中读取数据的功能,用DLL直接进行封装,减少数据的包装次数。

2.2.2 数据的获得

利用PRO*C技术,先把需要查询的程序在VC的.pc文件中以PRO*C语法写出。

1) 连接数据库。

2) 查询和获得数据,然后从宿主变量中取出数据,放在自己定义的数据结构中,配置好环境,通过ORACLE数据库自带的预编译工具,把代码编译成C++源码,可以直接在图形程序中对其进行调用。

3) 与数据库断开连接。

2.2.3 数据的传递

因为是在VC图形程序中获得数据,而且在VC.NET平台下直接使用了PRO*C技术对ORACLE数据库直接进行操作,使得对数据的封装次数减少,而且不需要对JAVA和C++之间的数据,类型进行过多的转换,无形当中也提高了存取数据的速度。

在本系统中,J2EE平台需要做的只是传递一个船舶的编号进入图形DLL,就可以实现图形的生成和查看。

3 图形的生成

1) 结合参考文献[2]中提供的对非均匀B样条算法(NURBS)的升阶,插值等成果,在程序中加强对边界条件的控制。

2) 利用功能函数,第一个是数据处理函数DataOperation,把从数据库中读出的数据从新整合和加工,让数据的组织方式满足船舶的水线、站线和纵剖线三大块的需要,使三者可以独立被操作而互相不影响;另外一个函数是Calc_ControlPoints,调用算法求控制点,并为控制点赋值。读取数据后,就可以根据船舶的型值点利用Calc_ControlPoints计算出控制点,然后再根据控制点画出对应的曲线。Calc_ControlPoints被图形的整体建模函数调用,用于图形的整体建模。

3) 入口函数对数据处理函数和图形整体建模函数进行调用,对两者加以整合,只需传送一个数据库中存在的船舶的编号,就可以生成相应的船舶型线图。

4 JNI技术的应用

阻碍Java获得广泛应用的一个主要因素是其运行效率。Java是介于解释型和编译型之间的一种语言,同样的程序,如果用编译型语言C++来实现,其运行速度一般要比Java快一倍以上。Java具有平台无关性,但是性能方面的因素又大大削弱了它的竞争力。为此,提高Java的性能就显得十分重要。

因此,利用Java开发的Web信息系统,通过网络传输,最后在客户端显示船舶性能曲线、以及船型型线的三维图片,对图片的显示的精确度要求很高。而图片生成是Java开发的不足之处,特别是图片显示的效果、精度都不够。综合系统的要求,引入了JNI(java native interface),利用混合编程技术,在Java程序中调用VC++环境下开发的DWF图形。在发挥Java语言Web服务端跨平台性的同时,利用C++语言的高效性与DWF数据量小、安全性高的结合。项目中JNI技术的应用实现见图3。

图3 JNI实现框

4.1 集成的具体实现

1) 编写需要JNI功能的Java类源文件。其中,需要JNI实现的方法用native关键字声明。在该类中,用System.loadLibrary()方法加载需要的动态链接库。

2) 上面生成的只是SSH框架下的Java类,要想与VC平台之间进行平台之间的信息通信,必须在两者之间建立一个“桥梁”,把Java的信息注入到VC的DLL中去,由DOC环境完成。将该类源文件用Java类编译器编译成二进制字节码文件。由于采用了native关键字声明,编译器会忽视没有代码体的JNI方法部分。

3) 完成平台之间的通信,需要提供包含JNI元素的DLL以实现在J2EE平台下的调用,生成图形。由于图形是直接在VC.NET环境下开发,只需对VC和Java之间的数据类型进行转换,对程序只需要进行一次DLL的封装就可以。这个需要DWF库的支持。

新建DLL工程,把图形的工程文件以及生成的Java W3D类的头文件放到DLL工程中去,加载用到的外部DWF开发包。直接对工程的DLL封装,需要有一个入口函数,提供调用入口和平台之间的数据类型转换,所以把原图形的入口函数作为DLL的入口函数,其名称要与W3D类的头文件中的函数名一致。

对于DLL的 调用,有两个途径,一个是把DLL放到系统的system32文件夹下面,利用默认的系统变量直接调用;另一个是把DLL存放到指定的位置,需要把DLL所在位置的路径配置到用户环境变量里面才可以进行DLL的调用。

4.2 内存管理问题及解决方法

虽然在本地返回 Java 后将自动释放局部引用,但过多的局部引用将使虚拟机在执行本地方法时耗尽内存。在访问系统的用户比较少时问题不明显,一旦多个远程用户同时访问系统,超过Java虚拟机能够承受的系统内存范围后,系统就会崩溃。

为了很好地解决这个问题,笔者在整个系统框架中引入了“数据库事务与并发”机制,利用数据库本身来对Java本地引用进行控制。

由于在Web系统中图形数据的取得是由几个固定的SQL 语句来完成,每个用户访问数据执行读图程序时,都可以看作为一个事务[1],多个用户同时访问系统,执行同一个Java本地引用操作时,等同与事物的并发执行,通过程序把这些操作归结为一类事务,利用隔离性(数据库系统隔离并发运行的各个事务的能力),设置隔离级别,分别为:Serializable(串行化)、Repeatable Read(可重复读)、Read Commited(读已提交数据)、Read Uncommited(读未提交数据),隔离级别依次由高到低。其隔离级别与并发性关系见图4。

图4 隔离级别与并发性能的关

隔离级别越高,对并发性的影响也越大。

对数据库的最大事务执行数量进行设置。当用户访问量超出最大可执行事务数量时,系统会自动提示用户等待。既保证了数据的及时性,安全性和完整性,也防止了因为过多的Java本地引用而造成的内存耗尽、系统崩溃。

这样,大量用户同时访问系统时,程序结合数据库本身,既保证了系统的高效率,又有效地保证了系统的安全。

5 图形在网络中的发布

系统提供了自动下载Autodesk DWF Viewer插件的功能[4]。通过这个插件,可以查看船舶型线的每一个细节。网页中打开船舶型线图的效果见图5。

图5 3D船舶型线图

6 结束语

此系统已经投入运行,为船舶结构研究、船舶设计、船舶制造等方面的工作提供了大量的原型和数据,使得不同部门之间可以共享船舶模型原型和数据,大大提高了科研、设计、生产之间的紧密结合。

[1] 孙卫琴.精通Hibernate:JAVA对象持久化技术详解[M].北京:电子工业出版社,2005.

[2] 陈绍平,陈宾康.组合曲线的NURBS表示及其应用[J].武汉理工大学学报:交通科学与工程版,2005,29(4):475-477.

[3] 徐 阳,钟 崴,童水光.基于Autodesk DWFⅥewer的图形化标注系统[J].计算机工程,2007,33(2):227-229.

猜你喜欢

调用程序船舶
《船舶》2022 年度征订启事
给Windows添加程序快速切换栏
船舶!请加速
核电项目物项调用管理的应用研究
BOG压缩机在小型LNG船舶上的应用
试论我国未决羁押程序的立法完善
系统虚拟化环境下客户机系统调用信息捕获与分析①
“程序猿”的生活什么样
船舶压载水管理系统
英国与欧盟正式启动“离婚”程序程序