网站首页 工具软件 操作系统 办公软件 网页制作 PHP教程 script脚本专栏 photoshop教程 其他精品教程
我发布的文章 - 教程搜索 - 交流论坛 - 帮助中心 - 网站首页 网络工具 - 常用工具 - 媒体工具 - 系统工具 - 实用工具 NT/2003 - Win Xp - Win2000 - DOS/Win9x - IE/注册表 - Linux - 苹 果 Office - Word - Excel - PowerPoint - 输入法 - 邮件处理 Flash - Dreamweaver - Fireworks - FrontPage - HTMLCSS 基础文章 - PHP函数 - PHP技巧 - 数据库相关 - 高级应用 - PHP安装 - 转载精华 - 常见问题 综 合 类 - 状 态 栏 - 游 戏 类 - 页面背景 - 页面特效 - 页面导航 - 文本操作 - 文本特效 - 图形特效 - 鼠标特效 - 时间日期 - 密 码 类 文字特效 - 按钮与图标 - 色彩运用 - 滤镜魔法 - 综合实例 XML教程 - DELPHI基础教程 - VB教程
首页 -> 其他精品教程 -> DELPHI基础教程

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
所属专题:
用户评论
称  呼:
内  容:

广告位

广告招租,欢迎抢订

热门信息

·Delphi客户服务器应用开发..
·SQL编程(一)
·数据浏览部件的应用及编程..
·数据浏览部件的应用及编程..
·SQL编程(二)
·数据访问部件的应用及编程..
·在线播放器DIY
·Delphi客户服务器应用开发..

推荐信息