CORBA技术系列一:JAVA客户程序与C++服务程序互操作

本文介绍了CORBA技术在JAVA和C++互操作中的应用,通过一个HelloWorld实例展示了如何使用IDL定义接口,以及在C++服务端和JAVA客户端的实现过程,强调了CORBA在简化异构系统互操作中的优势。
摘要由CSDN通过智能技术生成

 

CORBA技术诞生至今,已有十余年时间。十余年,对于IT界显得过于漫长。许多技术在十余年后看来可能都显得有些过时、落后。CORBA曾经在2000年左右辉煌过,现在却被网格、SOA、Web2.0等技术压得抬不起头。然而在学术界,CORBA还是有研究人员在学习使用,譬如某团队通过AOP技术对目标软件系统注入CORBA服务程序实现软件分布式监控。CORBA本身的技术在中间件中是比较领先的。然而,其被人所诟病之处在于其的复杂性。人们常说,CORBA复杂,不好用。其实CORBA本身的设计理念是很简单的,说它复杂的人是没有领会这简单设计理念背后的深邃思想。在这个系列中,我将尽可能以简单的例子来阐述CORBA的设计思想。

系列一:互操作

假设某企业有两套软件系统,一套使用JAVA开发,另一套系统使用C++开发。现在JAVA软件子系统想访问C++软件子系统的一个高密度科学计算服务。如何最快的实现这两个语言异构系统的互联。这就是一个最简单的互操作例子。在传统的企业计算环境中,常常会面对异构操作系统、异构编程语言、异构网络等情况。如何实现在异构系统中的软件模块无缝、平滑的互操作是软件系统集成面临的关键问题。CORBA第一个准确提出了什么是互操作,如何实现互操作。对于CORBA互操作的概念我在这里不阐述过多。这里,只以异构编程语言为例说明互操作。CORBA提出语言中立的接口描述语言IDL来解决互操作。开发人员在软件设计阶段定义好IDL接口,然后通过不同的IDL映射工具翻译成目标语言,在编码实现。下面看一个例子。

JAVA和C++互操作的例子:HelloWorld。服务器端有个Hello服务程序,对外提供方法hello_world。客户程序调用这个方法在服务端输出信息。

先看IDL描述

Hello.idl

interface Hello
{
 void hello_world();
};

一)、C++服务程序

使用ORB厂商自带的IDL编译器生成对象存根、服务程序框架和实现框架,在控制台输入命令

idl --impl Hello.idl,--impl选项告诉编译器我想得到实现代码框架。编译完毕后生成六个文件

对象存根Hello.h,Hello.cpp

服务对象框架Hello_skel.h,Hello_skel.cpp

服务实现类Hello_impl.h,Hello_impl.cpp

我们不用关心对象存根和服务对象框架是如何实现的,我们只要按照传统的软件开发方法实现Hello_impl.cpp即可。

让我们看一下IDL编译器生成的Hello_impl头文件

#ifndef ___Hello_impl_h__
#define  ___Hello_impl_h__

#include 
< Hello_skel.h >

//
//  Interface declare ::Hello
//
class  Hello_impl :  virtual   public  POA_Hello,
                   
virtual   public  PortableServer::RefCountServantBase
{
    Hello_impl(
const Hello_impl&);
    
void operator=(const Hello_impl&);

    PortableServer::POA_var poa_;

public:

    Hello_impl(PortableServer::POA_ptr);
    
~Hello_impl();

    
virtual PortableServer::POA_ptr _default_POA();

    
//
    
// Operation declare hello_world
    
//
    virtual void hello_world()
        
throw(CORBA::SystemException);

   
}
;

#endif

 

为了说明的简单起见,我们只看公有方法

1)构造函数Hello_impl(PortableServer::POA_ptr);

参数PortableServer是CORBA规范中的可移植对象适配器,CORBA规范中指出,一个服务对象必须被一个可移植对象适配器管理。其它更加详细的说明留在后续专题。

2)virtual void hello_world() throw(CORBA::SystemException);

这就是我们关心的实现方法。因为分布式程序的脆弱性,必须在声明时指出可能出现的异常。这里使用CORBA规范中的SystemException。

实现这个方法,我们只是在服务器端输出一行信息。

void
Hello_impl::hello_world()
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值