JacORB 应用开发

本文详细介绍了JacORB应用开发的五个步骤:1) IDL接口定义;2) 编译IDL生成Java类;3) 实现接口并创建服务器;4) 注册ORB和服务到命名服务器;5) 编写客户端获取服务引用。文章还涵盖了ORB初始化、POA激活、对象引用发布等关键操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JacORB的应用开发一般分为以下五步:

1.写IDL接口定义
接口使用IDL(接口定义语言)在sss.idl中定义

2.编译IDL接口定义生成Java类
使用如下命令编译此接口文件:
$idl -d ../.. server.idl
此命令将生成多个Java源文件,Java源文件的生成依照OMG标准的IDL-Java语言映射定义。
IDL编译器产生Java接口PlanSupplier、PlanSupplierOperations、PlanConsumer、PlanConsumerOperations,及桩和骨架文件_PlanSupplierStub、PlanSupplierPOA、PlanSupplierPOATie、PlanConsumerStub、PlanConsumerPOA、PlanComerPOATie。
注意IDL编译器将会产生一个和IDL接口文件中定义模块相对应的目录结构。如果我们不指定-d ../..,将在当前目录下创建子目录。

3.实现步骤2中生成的接口
现在我们来实现接口定义中描述的功能。这个Java类命名为PlanSupplierServerImpl、PlanConsumerServerImpl,除了要实现接口定义中描述的所有功能外,还应该是在前面生成的类PlanSupplierPOA和PlanConsumerPOA的子类。PlanSupplierPOA和PlanConsumerPOA中包含接受远程调用和将结果返回给客户的端的相关代码。

4.写服务器启动类,并注册到ORB
这一步要写一个类来调用PlanSupplierServerImpl和PlanConsumerServerImpl类,并将其注册到POA,这样远程对象才能通过PlanSupplier和PlanConsumer接口来访问它。
I.  初始化ORB
    orb = ORB.init(args, props);

II. 获取一个POA的引用
    org.omg.CORBA.Object objPOARoot = orb.resolve_initial_references("RootPOA");   //得到根POA对象
    POA poaRoot = POAHelper.narrow(objPOARoot); //得到POA 。ORB可以通过"RootPOA"来获取一个                                                           //初始引用,此引用只是一 个CORBA.Object,需要使用POAHelper来实例化为POA的引用。

III.激活该对象
    poaRoot.the_POAManager().activate();        //因为引用刚创建时是“保持”状态,在这种状态下,不能处理任何请求。通过调用POA的   //POAManager对象的activate()方法将POA激活。现在就可以通过POA将一个Java对象转化成一个CORBA对象。

VI. 提供该对象的引用(为了使新创建的CORBA对象能被客户端访问)           //这一过程通过目录服务--命名服务器--来完成
    org.omg.CORBA.Object objNCE = orb.resolve_initial_references("NameService");
    nce = NamingContextExtHelper.narrow(objNCE);
  //命名服务器的引用实例化为正确的命名服务器对象   
   
V.  发布CORBA对象引用
    //绑定servant
    Iterator it = servants.keySet().iterator();
    while(it.hasNext()){
        Servant servant = (Servant)it.next();
        String bindingName = (String)servants.get(servant);
        org.omg.CORBA.Object obj = poaRoot.servant_to_reference(servant);

        //绑定名字对象到Servant的引用
        NameComponent[] nct = nce.to_name(bindingName);
        nce.rebind(nct, obj);  
   
    }   //对象的名称作为bind()的参数传入,不能只传递一个字符串,而是应传入代表名称的CosNaming.NameComponents对象

5.写客户端去获取服务对象引用
I.  初始化ORB
    orb = ORB.init(args, props);
   
II. 客户端通过命名服务器获取服务的引用
    org.omg.CORBA.Object objNCE = orb.resolve_initial_references("NameService");  //获取命名服务。使用resolve()方法在命
                                                                                  //名服务器上查找"NameService"的引用
    nce = NamingContextExtHelper.narrow(objNCE);   //返回的结果是org.omg.CORBA.Object对象,需要实例化为 NamingContextExt
   

在将所有的Java类都成功编译以后,现在可以在不同的Java虚拟机中启动服务器和客户端。当然,应该是命名服务最先启动,如果命名服务还没有启动,使用以下命令来启动:
$ns /home/me/public_html/NS_Ref
/home/me/public_html/NS_Ref是一个本地的可写文件,服务器和客户端都可以通过URL的方式访问。这样,可以不使用端口号,而服务器和客户端都可以获取命名服务的引用,从而实现互相访问。

启动服务器:
$jaco lamost.sss.corbaif.CorbaSrvAgent

接着,运行客户端:
$jaco lamost.sss.corbaif.CorbaClntAgent

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值