收稿日期:2005-12-31;修回日期:2006-01-18作者简介:郭志强1982-),男,硕士研究生,研究方向:
计算机网络技术、(生物信息技术。(数据挖掘技术。黄燕1964-),女,副教授,研究方向:计算机网络技术、信息管理与数据挖掘技术。吴平1953-),女,教授,研究方向:算法、(
—15—
《农业网络信息》2006年第6期
研究与开发
以及非Java对象的远程调用,并可采用一种“位置透明”的形式与传统的系统进行沟通。CORBA对象是标准的软件对象,具有语言独立性。每个CORBA对象有一个清晰定义的接口,该接口用CORBA接口定义语言(InterfaceDefinitionLanguage,IDL)来定义,IDL提供了独立于编程语言的服务实现定义。使用CORBA技术就要分别用不同的语言对客户端和服务器端进行编程,客户端和服务器端使用相同的IDL接口,该IDL接口定义了虚拟设备需要调用的每个操作的方法及属性,客户端对此接口进行编译,产生客户端的桩代码(stubcode),桩代码实现了IDL接口中的方法定义,此定义用于客户机解析远程CORBA对象;服务器端对此接口进行编译,产生框架代码
似,还可以利用RMI(RemoteMethodInvocation)技术来实现Java与MATLAB的集成。
1.2
利用JNI技术和MATLAB引擎函数实现连接
JNI(SunMicrosystems,2003)是定义Java程序如
何调用非Java程序的一种方法,已成为公开的标准。
JNI使在JVM中运行的Java代码可以调用原生函数
(nativemethods)。而且,通过调用API,甚至JVM都可以被嵌入到其他非Java的系统中。当一个应用不能或不适合完全用Java语言实现时,就可以使用JNI技术,包括:(1)Java标准的库不能支持应用系统的要求,例如与平台相关的一些特性;(2)Java希望用访问一些用其他语言写成的代码或组件;(3)要求用低级语言实现一部分实时性很高的功能。但是,在使用JNI后,可能会失去一些在Java应用中才能体现的特征,包括:(1)Java小应用程序(Javaapplet)由于其内在的安全机制而无法使用JNI;(2)Java的指针安全性可能会失占用内存;(3)JNI去,其它语言可能随意地分配对象、代码的可移植性受到影响,丢弃了Java平台的“写一这一优点。次,在任何地方运行”目前的JNI
设计只能用来和C或C++所写的原生函数(native
(skeletoncode),该框架用于实现对象和对服务请求信
息的传送。服务器以产生的框架代码为基础,,实现IDL中定义的方法,并在NamingService中公布服务对象;客户端以编译产生的桩代码为基础,通过NamingSer-
vice获取服务对象,通过客户端ORB和服务器端ORB
实现服务对象的方法调用。虽然利用CORBA技术可以实现应用程序之间的相互操作,MATLAB语言是解释性语言,Java是编译性质的语言,不能利用
methods)相连接,MATLAB提供了C/C++
IDL实现Java与MATLAB之间
语言的接口函数,这恰好可以满足调用的需求。我们可以利用JNI技术,实现在Java程序中调用使用了
的通信。要解决这个
问题,可以借助C或C++语言,因为CORBA可以实现Java与C++之间的通信,而MAT-
MATLAB引擎函数的C/C++原生函数,这就实现了Ja-va对MATLAB的功能调用。
现在已有一个叫做JMatlink(Müller,
LAB提供了C++语言的编程接口。这样客户端和服务
器端使用相同的IDL接口,客户端利用Java语言编程,并用Java编译器进行编译,产生客户端ORB。服务器端利用C++编程调用MATLAB的接口函数,并用C++编译器编译,产生服务器端ORB。这样通过IDL实现了客户端对服务对象的方法调用。参考文献2中介绍了基于CORBA技术实现Java-该构架以JavaMATLAB的集成的一个
方案。
2002)的开源
应用,它利用C语言的本地方法调用MATLAB引擎函数,并把包含C语言原生函数Java类集成到该应用中,利用该类库中的方法,可以方便的在Java程序中实现初始化MATLAB
工作空间,向MATLAB工作空间读写数据等操作。参考文献3中提出了一种把MATLAB集成到模拟仿真的应用中。利用JMatLink类库做为桥梁连接