|
TOP
|
| 体验用JBuilder7+DELPHI6编写CORBA程序 |
|
| 文章内容 |
前言:
CORBA是一种透时的分布对象标准,也是一种语言中立的对象标准,这里讲一些使用JBuilder 7和DELPHI 6混合编写CORBA程序个人体验.
测试用软件环境
JBuilder 7
vbroker for JAVA 4.5
DELPHI 6(安装时选取安装VisiBroker 4.0)
运行限制:
DELPHI编写的CORBA软件运行时需求要以下DLL,
orbpas40.dll (在Delphi6\Bin目录内)
cc3250mt.dll (在Delphi6\Bin目录内)
orb_br.dll (vbroker for c++的bin目录内)
vport_br.dll (vbroker for c++的bin目录内)
所以在运行DELPHI编写的CORBA软件时,要保证通过环境变量PATH可以找到以上4个DLL文件.
实际使用时可以只使用了vbroker for JAVA的各种服务程序,不使用vbroker for c++的服务程序,各种服务器运行于本网段其他主机(含非同类型主机,如在服务器运行于linux主机)也可以正常运行CORBA程序。
注:
Note that if you install VisiBroker 4 you will not be able to use the TypeLib interface to create clients or servers. However, if you choose to install VisiBroker 3.3, you can use both DII and static binding (i.e. the IDL2Pas compiler).
节选于Delphi6\Doc\IDL2Pas\Index.htm
编程局限制:
Visibroker 3.x 和4.x支持,BOA方式,
POA在Visibroker 4.X上支持,但现在DELPHI CORBA编程只支持BOA方式。
JBuilder 和C++Builder 支持POA方式编程
如果在DELPHI编程中需要使用POA方式可以到 http://www.millennium-group.ru/tools 去下载MT DORB 这个工具包提供了DELPHI POA的支持
编程中的个人心得:
1
JBuilder 可以通过向导生成CORBA的JSP客户端程序,但向导是按POA方式生成,所以
对于JAVA连接DELPHIE编写的CORBA服务器自动生成的JSP和 clientImpl1代码要进行必要的修改。
例:
原码为:
ifaceAccount = aaa.AccountHelper.bind(_orb, "/" + name + "_poa", name.getBytes());
更换为
ifaceAccount= aaa.AccountHelper.bind(_orb);
或
ifaceAccount = aaa.AccountHelper.bind(orb,"Jack B Quick2");
其中:“Jack B Quick2”为运行osfind 中的OBJECT NAME
下面是运行osfind时出现的部分内容:
REPOSITORY ID: IDL:aaa/Account:1.0
OBJECT NAME: Jack B Quick2 |
2
DELPHI调用JAVA编写的CORBA服务,如果对方是使用POA方式,那么只能用IOR字串完成。
参考代码如下:
//javas(AnsiString类型)是从文件读入的IOR串,IOR串是服务启动产生时写入的
//orj 是CORBAObject类
obj:=orb.StringToObject(javas);
act:=TAccountHelper.Narrow(obj,true); |
3 BCB可以支持POA,当前DELPHI不支持,为了兼容DELPHI,并使用JB7的向导能力,可以改写JB7的自动生成BOA的服务。
首先:
JB7的生成 Bulid IDL的属性(Additional options)加 -boa
对于已经生成的服务:如
public class AccountManagerImpl extends AccountManagerPOA {
改成
public class AccountManagerImpl extends _AccountManagerBase {
初始函数要有以下支持(这点同POA很不同)
public AccountManagerImpl(java.lang.String name) {
super(name);
}
服务程序如下
// Server.java
public class Server {
public static void main(String[] args) {
// Initialize the ORB.
org.omg.CORBA.ORB orb = org.omg.CORBA.ORB.init(args,null);
// Initialize the BOA.
com.inprise.vbroker.CORBA.BOA boa =
((com.inprise.vbroker.CORBA.ORB)orb).BOA_init();
// Create the account manager object.
Bank.AccountManager manager =
new AccountManagerImpl("BankManager");
// Export the newly created object.
boa.obj_is_ready(manager);
System.out.println(manager + " is ready.");
// Wait for incoming requests
boa.impl_is_ready();
}
} |
4 JB7在设定 VisiBroker时,进行相应的参数设定,具体是在:
%java_home%\jre\lib\orb.properties 文件内指定了
org.omg.CORBA.ORBClass=com.inprise.vbroker.orb.ORB
org.omg.CORBA.ORBSingletonClass=com.inprise.vbroker.orb.ORB
使JDK在运行时,使用了com.inprise.vbroker.orb.ORB类,如果要这个的设定,
可以手工修改或删除 orb.properties 文件。 |
5 使用Inprise\vbroker_java\bin\nameserv.exe 服务
1) IDL文件要通过Inprise的IDL2JAVA -boa 方式make(原来的对于JDK的旧程序从新make,
SUN同Inprise有些不兼容)
2)在原程序
ORB orb = ORB.init(args,System.getProperties());
前要先设定
System.getProperties().put("org.omg.CORBA.ORBClass", "com.inprise.vbroker.orb.ORB");
System.getProperties().put
("org.omg.CORBA.ORBSingletonClass","com.inprise.vbroker.orb.ORB");
System.getProperties().put("SVCnameroot", "NameService");
或(具体看下面相关说明)
System.getProperties().put
("ORBInitRef", "NameService=iioploc://localhost:23000/NameService");
3)nameserv通过. start nameserv 方式启动使用
System.getProperties().put("SVCnameroot", "NameService");
nameserv通过
start nameserv -J-Dvbroker.se.iiop_tp.scm.iiop_tp.listener.port=23000
方式启动,使用
System.getProperties().put
("ORBInitRef", "NameService=iioploc://localhost:23000/NameService");
4)更具体可参考系统VisiBroker自带的例子 |
6 运动JAVA程序,推荐使用vbj,当然也可用java启动,那么CLASSPATH就要小心设定,不要少了什么类
小结:
·如果用JBuilder 7和DELPHI 6混合编写CORBA程序,推荐使用JAVA编写BOA方式的CORBA服务
1)BOA方式比POA要方便很多,当然也因DELPHI不支持POA
2)JAVA编写的服务可以跨平台运行
3)可以使用JBuilder 7的向导(模版)功能
·使用DELPHI和JAVA编写客户端支持良好,编程方式基本相同
·发现的不明问题
oadutil注册DELPHI编写的CORBAE服务程序(测试过自行编写的及DELPH6自带的例子),客户端第二次调用和关闭服务器出现内存错。所以最好是用JAVA编写服务器
【 |
|
| 相关信息 |
![]() |
体验用JBuilder7+DELPHI6编写CORBA程序
发布者:mmcbbs
浏览量:124
发布日期:2005-04-10 11:05:47
所属专题: |
|
|
|
|