由于公司新项目要求,做了一段时间的CORBA接口(中兴+华为)开发,踩了各种大大小小的坑,也算积累了一些经验,特分享至此,经验所限难免会有疏漏,欢迎讨论完善。

iManagerCORBA网管北向接口(以下简称CORBA 接口) 用于连接 iManager M2000 移动网网元综合管理系统 (以下简称 M2000) 与上级网管系统 (NMS) 提供 M2000 , 与 NMS 之间的接口转换和业务转换功能。

一、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 off
java -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.4
set JAVA_HOME=D:/Programming/JDK/jdk1.6.0_31
set 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
-U<symbol> undefine 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 generate
d Java code (e.g. CORBA:org.omg.CORBA)
-i2jpackagefile <filename> replace IDL package names using list fr
om <filename>. Format as above.
-ir generate information required by the Interface Repositor
y
-nofinal generated Java code will contain no final class definiti
ons
-unchecked_narrow use unchecked_narrow in generated code f
or 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, in
cludes -sloppy_names.
-syntax syntax check only, no code generation
<filelist>

三、编译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接口的开发了。

开发corba接口所需idl下载