由于公司新项目要求,做了一段时间的CORBA接口(中兴+华为)开发,踩了各种大大小小的坑,也算积累了一些经验,特分享至此,经验所限难免会有疏漏,欢迎讨论完善。
一、CORBA技术说明
CORBA(Common Object Request Broker Architecture,公共对象请求代理体系)是吸收了软件界面向对象技术、分布式计算技术、多层体系结构技术以及接口技术的一种综合技术,是一种对象间通信的工业标准。
CORBA规范包含:
- 接口定义语言 (IDL, Interface Definition Language)
- IDL语言和高级编程语言之间的映射
- IIOP(Internet Inter-ORB Protocol)通信协议
- 可透过网络传递的对象引用格式
CORBA的基本特征:
- 跨平台、跨语言、跨ORB(Object Request Broker)的互操作性
- 即插即用的分布式特性
二、JacORB安装配置
1、到http://www.jacorb.org/download.html下载合适的版本并解压到本地,我选用的是JacORB-2.2.4版本。
本地目录:D:\Programming\JAR\JacORB\JacORB-2.2.4
2、设置环境变量
确保有java环境和JAVA_HOME变量,我本地使用的是Java6环境。
添加D:\Programming\JAR\JacORB\JacORB-2.2.4\bin到环境变量path
创建JACORB_HOME变量为D:\Programming\JAR\JacORB\JacORB-2.2.4
ps:此处也可以不用设置系统环境变量,直接在idl.bat里设置。
3、修改idl.bat
%JACORB_HOME%\bin目录下会自带一个idl.bat的文件,该文件只是一个示例,需要修改文件内容。
原内容:
@echo offjava -classpath "C:\JacORB-2.2.4\lib\idl.jar;C:\JacORB-2.2.4\lib\logkit-1.2.jar;%CLASSPATH%" org.jacorb.idl.parser %*
修改后【我自己的版本】:
@echo off rem @JAVA_CMD@ -classpath "@JACORB_HOME@/lib/idl.jar;@JACORB_HOME@/lib/logkit-1.2.jar;%CLASSPATH%" org.jacorb.idl.parser %* set JACORB_HOME=D:/Programming/JAR/JacORB/JacORB-2.2.4set JAVA_HOME=D:/Programming/JDK/jdk1.6.0_31set path=%JAVA_HOME%/bin;%path% set CLASSPATH=%JAVA_HOME%/lib/rt.jar set CLASSPATH=%JACORB_HOME%/lib/antlr-2.7.2.jar;%JACORB_HOME%/lib/avalon-framework-4.1.5.jar;%JACORB_HOME%/lib/concurrent-1.3.2.jar;%JACORB_HOME%/lib/idl.jar;%JACORB_HOME%/lib/jacorb.jar;%JACORB_HOME%/lib/logkit-1.2.jar;%JACORB_HOME%/lib/picocontainer-1.2-021105.jar;%JACORB_HOME%/lib/wrapper-3.1.0.jar;%JACORB_HOME%/classes;%CLASSPATH% %JAVA_HOME%/bin/java -cp %CLASSPATH% org.jacorb.idl.parser %*
4、在%JACORB_HOME%\bin目录执行命令行 idl -h,显示帮助信息,说明已配置完成。
D:\Programming\JAR\JacORB\JacORB-2.2.4\bin>idl -h -h|help these few lines of help -v|version print version information -d dir root of directory tree for output -Dx define preprocessor symbol x with value 1 -Dx=y define preprocessor symbol x with value y -Idir set include path for idl files -Uundefine preprocessor symbol -W [1..4] debug level -all generate code for all IDL files, even included ones -forceOverwrite generate code even if IDL has not changed -ami_callback generate AMI reply handlers and sendc methods -ami_polling generate AMI poller and sendp methods -backend classname use classname as code generator -i2jpackage x:a.b.c replace IDL package name x by a.b.c in generated Java code (e.g. CORBA:org.omg.CORBA) -i2jpackagefile replace IDL package names using list from . Format as above. -ir generate information required by the Interface Repository -nofinal generated Java code will contain no final class definitions -unchecked_narrow use unchecked_narrow in generated code for IOR parameters in operations -noskel disables generation of POA skeletons -nostub disables generation of client stubs -cldc10 code generation compatible with J2ME/CLDC 1.0 -sloppy_forward allow forward declarations wo. later definitions -sloppy_names less strict checking of module name scoping -permissive_rmic tolerate dubious IDL generated by JDK's rmic, includes -sloppy_names. -syntax syntax check only, no code generation
三、编译IDL文件
执行以下命令:
#编译中兴IDL#D:\Programming\JAR\JacORB\JacORB-2.2.4\idl\omg 是编译中兴idl时要依赖的idl文件#D:\idl\zhongxing\*.idl是中兴idl文件目录#org.omg.zx是中兴idl编译生成的java服务端接口文件的包名#c:/corba/zx 是生成中兴idl服务端接口文件所在的目录idl -all -d c:/corba/zx -ID:\Programming\JAR\JacORB\JacORB-2.2.4\idl\omg -i2jpackage :org.omg.zx -in D:\idl\zhongxing\*.idl#编译华为IDL#D:\idl\huawei\OMG 是编译华为idl时要依赖的idl文件#D:\idl\huawei\*.idl是华为idl文件目录#org.omg.zx是华为idl编译生成的java服务端接口文件的包名#c:/corba/hw 是生成华为idl服务端接口文件所在的目录idl -all -d c:/corba/hw -ID:\idl\huawei\OMG -i2jpackage :org.omg.hw -in D:\idl\huawei\*.idl
IDL编译完成后即可在c:/corba/zx和c:/corba/hw目录下看到对应的java接口文件,将org.omg.zx和org.omg.hw两个目录都导入项目中就可以开始corba接口的开发了。