corba介绍(java语言)
CORBA服务
CORBA服务CORBA (Common Object Request Broker Architecture)是一种分布式计算平台,旨在使不同的计算机系统能够相互通信和交互。
CORBA服务是由CORBA技术提供的一种机制,用于简化分布式系统中的通信和互操作。
CORBA服务可以被视为一种软件组件,可以在网络上的不同计算机之间进行通信。
它提供了一个中间件层,用于处理不同计算机之间的通信细节,例如数据序列化、网络传输和安全性。
这使得开发人员可以将重点放在业务逻辑上,而不必担心底层通信机制。
在CORBA服务中,存在两个主要角色:客户端和服务器。
客户端是请求CORBA服务的应用程序,而服务器是提供CORBA服务的应用程序。
客户端向服务器发送请求,服务器根据请求执行相应的操作,并将结果返回给客户端。
CORBA使用一个称为ORB(Object Request Broker)的组件来协调客户端和服务器之间的通信。
CORBA服务提供了一种透明的方式来访问远程对象。
远程对象是分布在不同计算机上的对象,可以通过CORBA服务进行远程访问。
客户端不需要了解远程对象的位置和实现细节,只需要知道对象的接口定义。
这种透明性使得客户端可以轻松地访问远程对象,同时也降低了系统的耦合度。
CORBA服务的另一个重要特点是面向对象的。
它支持面向对象的概念,例如继承、封装和多态。
通过使用面向对象的概念,开发人员可以更容易地设计和实现复杂的分布式系统。
CORBA服务还提供了一些高级功能,例如事务处理和持久性。
事务处理允许开发人员将多个操作组合成一个原子操作,以确保数据的一致性和完整性。
持久性允许对象在服务器重启后保持其状态,以便客户端可以继续与对象交互。
总的来说,CORBA服务为分布式系统提供了一种简单、灵活和可扩展的通信机制。
它通过隐藏底层通信细节和提供丰富的功能,使得开发人员可以更容易地开发和维护分布式应用程序。
同时,CORBA服务还具有跨平台性,可以在不同的操作系统和编程语言之间进行通信。
CORBA技术介绍
对象管理小组
由OMG制定的最关键的规范——对象 管理结构(Object Management Architecture, OMA)和它的核心(也就是CORBA规范), 提供了一个完整的体系结构。这个结构以足 够的灵活性、丰富的形式适用了各类分布式 系统。
OMA对象模型
在OMA对象模型中,对象是一个被封装 的实体,它具有一个不可改变的标识,并能 给客户用户提供一个或多个服务。 interface printer { attribute model; void print(in string buffer); };
对象管理小组
对象管理组(Object Management Group, OMG)是一个非赢利性的协会组织, 组建于1989年,由一些的计算机公司发起, 目前成员已超过800个, 遍及计算机制造商、 软件公司、通信公司和最终用户。
对象管理小组
OMG的宗旨是,推动对象技术(OT) 的理论和实践在软件行业中的使用,特别是 在开发分布式计算机系统方面。其目的是, 为面向对象的应用提供一个公共框架,如果 符合这一框架,就可以在多种硬件平台和操 作系统上建立一个异质的分布式应用环境。
CORBA技术介绍
主要内容
• CORBA概述 • 对象管理小组 • OMA对象模型
ቤተ መጻሕፍቲ ባይዱ
CORBA概述
CORBA(Common Object Request Broker Architecture, 公共对象请求代理体系结构) 是由OMG(对象管理组织,Object Management Group)提出的应用软件体系结 构和对象技术规范。其核心是一套标准的语 言、接口和协议,以支持异构分布应用程序 间的互操作性及独立于平台和编程语言的对 象重用。
corba用法
CORBA是由OMG组织制订的一种标准的面向对象应用程序体系规范,使用IDL(接口定义语言)刻画出对象将呈现出来的接口,并且规定了从IDL到特定程序语言如C++或Java实现的映射。
其使用一种接口定义语言来刻画物件将呈现出来的接口,又规定了从IDL到特定程序语言如C++或Java实现的映射。
CORBA体系结构的中心部分是对象请求代理程序(Object Request Broker, ORB),它作为一个“软件总线”来连接网络上的不同对象。
在客户端,ORB提供一个发送操作调用的接口;而在服务器端,ORB提供一个将操作调用传输到服务器的API。
ORB的任务是定位一个合适的服务器,并且通过一个对象适配器(Object Adapter, OA)将操作调用传送给服务器。
OA的目的是:给框架发送方法,调用并且支持服务器对象的生命周期(例如,对象的建立和删除)。
在CORBA体系结构中,处理分布式处理环境(DCE)中硬件和软件系统的互连问题,实现整个系统上端到端的可预测性。
处理器资源管理是将网络任务的优先级映射到实时操作系统的优先级队列中,有两种映射方法:一种是将网络ORB请求映射到整个实时操作系统的优先级范围;另一种是映射到本地实时操作系统优先级的一个子集上。
优先级继承与传播:在运行过程中,进程会创建子进程,不同的进程之间相互调用,如果不支持优先级继承和传播,则无法保证正确的优
先级关系。
被调用进程的优先级必须大于或等于调用进程的优先级。
因此在调用时,必须动态改变被调用进程的优先级。
存储管理是通过进程池来实现的。
建议咨询专业人士获取具体详细信息。
最新CORBA客户端-服务端的处理流程Java示例
C O R B A客户端-服务端的处理流程J a v a示例CORBA 客户端/服务端的处理流程(Java示例)一、客户端的处理流程ORB的初始化 -->分布式对象引用的获取 -->分布式对象的引用 |1、ORB(Object Request Broker,对象请求代理)是基于CORBA的分布式对象系统的核心,在代理对象(Stub)和分布式对象实现的背后,由ORB提供了实现分布式对象系统所需要的各种服务。
由ORB提供的服务包括如下四种:1)ORB接口。
主要包括 ORB的初始化(获取ORB)、获取CORBA服务对象、动态调用请求的生成、分布式对象引用的变换等。
2)DII(动态启动接口)。
将客户端生成的对象调用请求传送给ORB时需要利用DII。
3)DSI(动态骨架接口)。
DSI是与DII对应的服务器端的接口,分布式对象实现利用该接口从ORB中获取来自客户端的请求。
4)OA(对象适配器)。
它是用于在服务器进程中管理分布式对象而提供的接口。
OA提供的主要的功能包括分布式对象引用的生成,以及将分布式对象实现登录到ORB中等。
在客户端中,ORB的初始化有以下两个目的1)为分布式对象初始化环境2)为了利用ORB接口而获取其对象的引用2、分布式对象引用的获取一般来说,CORBA系统不同,获取分布式对象引用的方法也不同,目前大概有如下几种方法:1)利用文件的方法获取对象。
过程是:服务器将所生成的分布式对象引用进行字符串化处理后保存在文件中,并以某种方式将其发送到客户端能够获取的设备上。
客户端从该文件中获取字符串的分布式对象引用,并将其恢复原状。
分布式对象引用的字符串化:ORB orb = ORB.init();String orbstr = orb.object_to_string((Object)con_ref);//将orbstr 以文件形式发送给客户端字符串化引用的复原:BankControl ank_ref;ank_ref = Bank.ControlHelper.narrow(orb.string_to_object(orbstr));...2)利用Binding 服务的方法获取对象引用。
java corba 编译
java corba 编译Java CORBA是一种基于Java语言的分布式对象技术。
CORBA (Common Object Request Broker Architecture)是一种面向对象的中间件,通过它可以实现不同平台、不同语言的对象之间的通信和交互。
本文将对Java CORBA进行详细介绍,包括其基本概念、使用方法以及优缺点等方面。
一、CORBA基本概念CORBA是一种分布式对象技术,它建立在面向对象的基础上,通过定义标准接口和协议,使得不同平台、不同语言的对象能够相互通信和交互。
CORBA的核心是对象请求代理(Object Request Broker,ORB),它充当了分布式对象之间的中间人角色,负责对象的寻址、消息传递和通信协议的实现等功能。
二、Java CORBA的使用方法1. 定义IDL接口:IDL(Interface Definition Language)是CORBA的接口定义语言,用于定义接口的操作和数据结构。
首先需要在IDL文件中定义接口的方法和参数等信息。
2. 编译IDL文件:使用IDL编译器将IDL文件编译成Java代码,生成对应的Java接口文件。
3. 实现接口:根据生成的Java接口文件,编写具体的实现类,实现接口中定义的方法。
4. 编译和打包:将实现类的源代码编译成Java字节码文件,然后将字节码文件打包成Java Archive(JAR)文件。
5. 启动ORB:在应用程序中启动ORB,创建ORB实例,并通过ORB连接到CORBA服务。
6. 注册对象:将实现类的对象注册到ORB中,使得其他对象能够通过ORB访问该对象。
7. 远程调用:通过ORB提供的接口,远程调用其他对象的方法,实现分布式对象之间的通信和交互。
三、Java CORBA的优缺点1. 优点- 跨平台、跨语言:CORBA使用IDL作为接口定义语言,使得不同平台、不同语言的对象能够相互通信和交互。
Java编写CORBA的一个简单例子
写一个CORBA程序的步骤:1. 编写IDL接口定义文件;2. 将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;3. 基于服务器框架,编写服务对象实现程序;4. 基于客户端存根,编写客户对象调用程序;5. 分别编译客户对象和服务对象程序;6. 运行服务对象和客户对象程序;写一个Hello,CORBA的小程序1. 编写IDL接口定义文件程序解释:定义一个模块HelloApp,这个相当于JAVA里面的包.然后定义了一个接口Hello,该接口包含一个方法sayHello,用来显示Hello,CORBA2. 将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;Java IDL 即是CORBA 的一个实现,它是JDK1.3 或更高版本的核心软件包之一,定义在org.omg.CORBA及其子包中。
我们利用JAVA提供的IDL编译工具对IDL文件进行编译.idlj -oldImplBase -fall Hello.idl先解释一下参数的意思.-oldImplBase 表示生成与旧(1.4 版之前)JDK ORB 兼容的框架.-f 是定义要发出的绑定。
-fall表示绑定所有.包括客户端和服务器端.⏹ _HelloImplBase.java该抽象类是一个服务器skeleton,它可为服务器提供基本的CORBA 功能。
它实现Hello.java 接口。
服务器类HelloServant 扩展_HelloImplBase。
⏹ _HelloStub.java该类是客户机stub,可为客户机提供CORBA 功能。
它实现Hello.java 接口。
⏹ Hello.java该接口含有IDL 接口的Java 版本。
Hello.java 接口扩展org.omg.CORBA.Object 并提供标准的CORBA 对象功能。
⏹ HelloHelper.java这是一个终态类,可以提供辅助功能,特别是提供将CORBA 对象引用转换为适当类型所需的narrow() 方法。
CORBA接口开发详解(网络资料)
CORBA接口开发详解(网络资料)corba(公用对象请求代理体系)是基于对象技术的分布计算应用软件体系结构。
corba标准主要分为三个部分:接口定义语言(IDL),对象请求代理(ORB),以及ORB之间的互操作协议IIOP,核心是对象请求代理。
corba与平台和语言无关。
java IDL既是corba的一个实现,它是jdk1.3或更高版本的核心软件包之一,定义在org.omg.CORBA及其子包中,在java IDL的支持下,开发人员可以使用如下两种方法将java 和corba集成在一起:创建java对象并使之可在corba orb中展开;创建java类并作为/jinzhengquan/admin/EditPosts.aspx?catid=295786和其它orb一起展开的corba对象的客户,这种方法提供了另外一种途径,通过它java可以被用于将你的新的应用和以前遗留的系统相集成。
采用java创建corba应用,corba对象服务的实现方式分为两种:对象的命名引用方式和字符串化对象引用方式,创建corba应用程序的过程大体如下:编写IDL接口定义文件;将接口定义文件编译为相应高级语言源代码,产生服务器框架与客户端存根;基于服务器框架,编写服务对象实现程序;基于客户端存根,编写客户对象调用程序;分别编译客户对象和服务对象程序;运行服务对象和客户对象程序。
第一步下载JacORB并配置jacORB1,解压JacORB-2.3.0-bin,将jacORB拷贝到c:\jacORB;2,修改c:\jacORB\bin下的文件,去掉idl.tpl,idl.bat.tpl,jaco.tpl和jaco.bat.tpl文件的后缀名".tpl";3,在jacORB目录下建立classes文件夹,将etc中的jacorb_properties.template文件拷贝到classes下,将文件中(*)Service=file:/c:/NS_Ref修改为(*)jacorb.naming.ior_filename=c:/NS_Ref,并将文件名改为jacorb.properties4,在dos下输入ns即可。
java corba
//解析命名中的对象引用
NameComponent nc = new NameComponent("About", "");
NameComponent path[] = {nc};
{
string ShowName();
};
};
将其存为Show.idl。
3. 编译接口并生成CORBA支持文件
我们用以下命令编译这个 IDL 接口:
idltojava Show.idl
idltojava是SUN公司的IDL编译器,可以免费从SUN公司站点上下载。
■ 使用JAVA开发CORBA应用
下面让我简要介绍一下开发CORBA的步骤。
使用JAVA开发CORBA应用需要如下五个步骤:
1. 使用IDL创建接口 (About.idl)
2. 下面的OMG IDL描述一个CORBA对象。
module About
{
interface Show
class ShowObject extends _ShowImplBase
{
public String ShowName()
{
return "\nMy name is Seymour!!\n";
}
}
public class ShowServer {
JAVA不仅是一种语言,它还是一个动态代码系统,它对运行对象来说是一个可移植的虚拟机(JVM)。JAVA为开发、管理、发布Client/Server应用提供了更简单的方式。人们可以通过将应用放在一个Web服务器上将这一应用发布给成千上万个用户,而不必关心它的安装和升级。JAVA还非常适合服务器的开发,它可以动态地将服务代码移向最需要它们的地方。
corba协议-概述说明以及解释
corba协议-概述说明以及解释1.引言1.1 概述Corba(Common Object Request Broker Architecture)是一种面向对象的分布式计算的标准化协议。
它定义了一套标准化的通信协议,使得不同的对象能够在网络上进行通信和交互。
Corba协议通过对象请求代理(ORB)实现对象之间的通信,使得对象在不同的计算机上可以相互调用,实现分布式计算。
该协议被广泛应用于企业级软件系统中,能够提高系统的可扩展性、可维护性和灵活性,为分布式系统的开发提供了良好的支持。
在本文中,我们将介绍Corba协议的基本原理、特点和应用领域,以便更好地理解和使用这一重要的分布式计算协议。
1.2文章结构1.2 文章结构本文将首先介绍Corba协议的概念和背景,包括其起源、发展历程和基本原理。
接着将详细探讨Corba协议的特点,包括其跨平台、语言中立和分布式的优势。
然后将深入分析Corba协议在各个应用领域的具体应用,包括企业级系统、网络通信和物联网等方面。
最后对Corba协议的发展前景进行展望,探讨其在未来的发展趋势和潜在挑战。
通过本文的阐述,读者将能够全面了解Corba协议的重要性和应用领域,以及对其发展方向有更深入的认识。
1.3 目的本文的主要目的是介绍和探讨Corba(通用对象请求代理结构)协议,旨在帮助读者了解该协议的基本概念、特点和应用领域。
通过对Corba协议的介绍,读者可以深入了解面向对象技术在分布式系统中的应用,以及Corba协议在不同领域中的实际应用情况。
同时,本文也将分析Corba 协议的优势和局限性,以及未来在分布式计算领域的发展趋势。
通过本文的阐述,读者将能够更好地理解和应用Corba协议,为其在实际项目中的应用提供参考和指导。
2.正文2.1 Corba协议介绍CORBA(Common Object Request Broker Architecture)是一种用于分布式系统中对象通信的协议。
CORBA简介
CORBA简介使⽤.NET开发corba应⽤⼀、什么是 是通过使⽤基于corba的IIOP⽀持.NET、javaEE和corba组件实现⽆缝互操作的技术。
如图1.1所⽰,这种解决⽅案依赖于.NET Remoting 体系结构的可扩展性,以提供透明的对象级的集成,同时不会导致⽹关或基于 SAOP 产品引起的性能上的开销。
hi.GRXX hr;intMZ mz = (intMZ) nameService.resolve(name);Console.WriteLine();//测试⽅法short[] res = mz.GetGRJBXX(yljgbm, ylzh, pass, czybm, czyxm, out hr);Console.WriteLine(TransformAS(res));Console.WriteLine(hr.ACCOUNT);Console.WriteLine(hr.YLZH);Console.WriteLine(hr.XB);Console.WriteLine("finished!");}catch (Exception e){Console.WriteLine("exception: " + e);}}//string类型转为short[]public static short[] transfromSA(string strArray){short[] shortArray = new short[strArray.Length];char[] chars = strArray.ToCharArray();for (int i = 0; i < strArray.Length;i++ ) {shortArray[i] = transCharToShort(chars[i]);}return shortArray;}public static short transCharToShort(char c) {char[] t = new char[1];t[0] = c;string strTemp = new string(t);byte[] cc = System.Text.Encoding.Default.GetBytes(strTemp);if (cc.Length == 1){return (short)(cc[0] < 0 ? cc[0] + 256 : cc[0]);}int v1 = cc[0] < 0 ? cc[0] + 256 : cc[0];int v2 = cc[1] < 0 ? cc[1] + 256 : cc[1];return (short)(v1 * 256 + v2);}//short[] 转为string类型public static string TransformAS(short[] sArray){char[] charArray = new char[sArray.Length];for (int i = 0; i < sArray.Length; i++){charArray[i] = TransShortToChar(sArray[i]);}return new String(charArray);}private static char TransShortToChar(short sTemp){if (sTemp >= 0){return (char)sTemp;}byte[] b = new byte[2];b[0] = (byte)(sTemp >>;b[1] = (byte)sTemp;string strTemp = System.Text.Encoding.Default.GetString(b);char[] charArrTemp = strTemp.ToCharArray();return charArrTemp[0];}}}1. 测试输出。
corba介绍(java语言)
1.C ORBA 简介CORBA(Common Object Request Broker Architecture)是为了实现分布式计算而引入的。
为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。
与过去的面向过程的RPC(Remote Procedure Call)不同,CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题。
MicroSoft 的DCOM (Distributed Component Object Model)也是解决这一问题的, 但它基于Windows操作系统,尽管到本书编写时,DCOM已有在其他操作系统如Sun Solaris, Digital Unix, IBM MVS 上的实现,但毫无疑问,只有在微软的操作系统上才会实现得更好。
而只有CORBA是真正跨平台的,平台独立性正是CORBA的初衷之一。
另一种做到平台无关性的技术是Java RMI(Remote Method Invocation),但它只能用JAVA实现。
CORBA与此不同,它通过一种叫IDL(Interface Definition Language)的接口定义语言,能做到语言无关,也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。
因此,可以这样理解CORBA:CORBA一种异构平台下的语言无关的对象互操作模型。
1.1 CORBA体系结构CORBA的体系结构如下:图1.1 CORBA体系结构CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C++或Java,并且分成两分,在客户方叫IDL Stub(桩), 在服务器方叫IDL Skeleton(骨架)。
两者可以采用不同的语言。
服务器方在Skeleton的基础上编写对象实现(Object Implementation),而客户方要访问服务器对象上的方法,则要通过客户桩。
corba标准
corba标准CORBA(Common Object Request Broker Architecture)是一种面向对象的分布式计算标准,它定义了如何在一个分布式系统中使用对象来交互和共享数据。
CORBA提供了一种通用的框架,使得不同的对象可以在不同的平台上进行交互和通信,从而实现跨平台的互操作性。
CORBA标准包括以下几个主要部分:1. ORB(Object Request Broker):ORB是CORBA的核心组件,它负责对象之间的通信和交互。
ORB提供了一种标准的通信协议,使得对象可以相互发现和调用对方的方法。
2. IDL(Interface Definition Language):IDL是一种用于定义对象接口的语言。
它定义了对象的行为和交互方式,包括对象的方法、参数和返回值等。
3. IIOP(Internet Inter-ORB Protocol):IIOP是一种基于TCP/IP的协议,用于在分布式系统中进行对象通信。
它提供了一种通用的传输机制,使得ORB可以相互通信。
4. OMG(Object Management Group):OMG是一个组织,负责管理和维护CORBA标准。
它定义了CORBA的核心组件和相关规范,并提供了相关的文档和指南。
CORBA标准的主要优点包括:1. 跨平台性:CORBA对象可以在不同的操作系统和硬件平台上进行交互和通信,从而实现跨平台的互操作性。
2. 语言无关性:CORBA标准支持多种编程语言,包括C++、Java、Python等,使得开发人员可以使用自己熟悉的编程语言来开发分布式应用程序。
3. 易于集成:CORBA提供了一种标准的接口定义语言,使得不同的系统可以更容易地集成在一起。
4. 安全性:CORBA提供了一些安全机制,如身份验证、授权和数据加密等,确保分布式系统中的数据安全。
总之,CORBA是一种重要的分布式计算标准,它提供了一种通用的框架,使得不同的对象可以在不同的平台上进行交互和通信,从而实现跨平台的互操作性。
1--Corba整体介绍
CORBA的产生 CORBA的产生
CORBA的产生有其特定的背景,它是在面 向对象的技术兴起,客户/服务器模式普遍 得到应用的前提下,为屏蔽通信和实现细 节的需求,继承已有系统,消除“孤岛” 现象而产生的。
最 初,OMG 在1990 年 制 订 了 对 象 管 理 体 系(Object Management Architecture), 即 OMA, 来 描 述 应 用 程 序 如 何 实 现 互 操 作。 作 为 其 中 的 一 部 分, 需 要 有 一 个 标 准 规 范应用程序片段即对象的互操作──这 导 致 了CORBA 的 诞 生。
Client
远程引用
Object Request Broker 详 述
OMA 定 义 了 组 成CORBA 的 四 个 主 要 部 分:
(1) 对象请求代理ORB(Object Request Broker)。
(2) 对象服务(Object Services)
(3) 公共设施(Common Facilitites)
(4) Business Objects
对象请求代理ORB(Object 对象请求代理ORB(Object Request Broker)
(1) 对象请求代理ORB(Object Request Broker): 负责对象在分布环境中透明地收发请求和响应, 它是构建分布对象应用、在异构或同构环境下实 现应用间互操作的基础。ORB是一个中间件,他 在对象间建立客户-服务器的关系。通过ORB, 一个客户可以很简单地使用服务器对象的方法而 不论服务器是在同一机器上还是通过一个网络访 问。ORB截获调用然后负责找到一个对象实现这 个请求,传递参数和方法,最后返回结果。客户 不用知道对象在哪里,是什么语言实现的,他的 操作系统以及其他和对象接口无关的东西。
组件技术(corba)
CORBA部分:CORBA的用途:存取桌面应用程序的分部信息和资源使现有业务和数据成为可利用的网络资源用特定业务的定制功能增强桌面工具和应用程序改变和发展基于网络的系统以反映新的拓扑或资源CORBA带来的好处:可以使用分布式在网络各处的信息、数据;对基于不同公司软件的信息、数据进行自动处理、无缝集成;可以灵活地改变事务处理流程,实现物业、工作流程的动态管理;与可接入互联网的嵌入式系统进行连接,方便地进行控制和使用。
程序员,混合编程、丰富的可复用资源、集成方便效率高、版本无关。
上、下兼容。
通过对EJB容器的了解,以及CORBA中间件ORB的理解,结合以上两点给出对中间件的理解。
IDL(Interface Definition Language)编译器的作用IDL是接口定义语言,在用IDL对接口和组件进行描述之后,可以通过IDL编译器来编译它。
IDL编译器将接受接口的IDL描述,并生成相应的代理和残根DLL的C代码。
对这些代码进行编译和连接之后,即可以得到相应的代理和残根DLL。
比手动实现DLL简单很多。
IDL编译器生成与编程语言相关的文件:客户桩文件、头文件、服务器框架。
客户桩文件STUB:把某个对象类型的IDL操作定义映射到例程。
头文件head:桩文件和框架文件都是用头文件来定义结构和常量。
服务器框架文件skeleton:服务器应用程序用skeleton把客户机操作映射到服务器实现的方法上。
对客户桩的理解答:客户桩:提供了在客户机应用程序中使用桩类型激发时所需要的定义和其它与CORBA 供应商有关的信息。
它是程序激发请求使用的一套例程它把一个对象类型的IDL操作定义映射到激发请求时调用的一套与编程语言相关的例程1)Stub-style要求客户机应用程序链接进客户桩2)不同的ORB有不同的客户桩3)每种语言映射为接口类型提供客户桩编程接口4)大多vendor提供源代码格式的客户桩实现一个CORBA组件/对象的步骤A.建立CORBA客户机的一般过程1)基于功能和界面等来设计和编写代码中的非CORBA部分2)选择通信样式(同步、延迟同步或单向)和激发类型(桩类型、动态或两者都选)3)定义IDL接口如果仅支持桩类型激发,生成客户桩并连入客户机如果仅支持动态激发,将IDL代码装入接口仓库如果两者都支持,做以上两项任务4)编写激发请求代码并获取激发所需信息,引用,参数5)编写成功请求的程序代码6)编写错误处理或异常处理程序7)如果客户机也是服务器,进行服务器编程处理B.构造CORBA服务器一般过程1)决定实现所支持的激活策略2)生成服务器框架3)把框架和服务器应用程序及对象适配器连接起来4)编写服务器初始化代码5)编写代码通知BOA实现已经被激活6)编写代码创建消息分发循环7)编写方法支持框架中的实现,上下文,异常8)编写代码冻结实现9)编写关闭服务器代码10)如果同时也是客户机,参照客户机过程对stub,skeleton的理解接口桩stub,在编译时确定的静态接口。
Java内建的Corba服务-关于NamingService
Java内建的Corba服务-关于NamingServiceorbd - The Object Request Broker Daemonorbd is used to enable clients to transparently locate and invoke persistent objects on servers in the CORBA environment.See also: Naming ServiceSYNOPSISorbdDESCRIPTIONThe Server Manager included with the orbd tool is used to enable clients to transparently locate and invoke persistent objects on servers in the CORBA environment. The persistent servers, while publishing the persistent object references in the Naming Service, include the port number of the ORBD in the object reference instead of the port number of the Server. The inclusion of an ORBD port number in the object reference for persistent object references has the following advantages: The object reference in the Naming Service remains independent of the server life cycle. For example, the object reference could be published by the server in the Naming Service when it is first installed, and then, independent of how many times the server is started or shutdown, the ORBD will always return the correct object reference to the invoking client.The client needs to lookup the object reference in the Naming Service only once, and can keep re-using this reference independent of the changes introduced due to server life cycle.To access ORBD's Server Manager, the server must be started using servertool, which is a command-line interface for application programmers to register, unregister, startup, and shutdown a persistent server. For more information on the ServerManager, see the section in this document titled Server Manager.When orbd starts up, it also starts a naming service. For more information on the naming service, link to Naming Service. REQUIRED OPTIONS-ORBInitialPort nameserverportSpecifies the port on which the name server should be started. Once started, orbd will listen for incoming requests on this port. Note that when using Solaris software, you must become root to start a process on a port under 1024. For this reason, we recommend that you use a port number greater than or equal to 1024. (required)OTHER OPTIONS-port portSpecifies the activation port where ORBD should be started, and where ORBD will be accepting requests for persistent objects. The default value for this port is 1049. This port number is added to the port field of the persistent Interoperable Object References (IOR). (optional)-defaultdb directorySpecifies the base where the ORBD persistent storage directory orb.db is created. If this option is not specified, the default value is "./orb.db". (optional)-serverPollingTime millisecondsSpecifies how often ORBD checks for the health of persistent servers registered via servertool. The default value is 1,000 ms. The value specified for milliseconds must be a valid positive integer. (optional)-serverStartupDelay millisecondsSpecifies how long ORBD waits before sending a location forward exception after a persistent server that is registered viaservertool is restarted. The default value is 1,000 ms. The value specified for milliseconds must be a valid positive integer. (optional)-JoptionPass option to the Java virtual machine, where option is one of the options described on the reference page for the java application launcher. For example, -J-Xms48m sets the startup memory to 48 megabytes. It is a common convention for -J to pass options to the underlying virtual machine.Starting and Stopping the Naming ServiceA Naming Service is a CORBA service that allows CORBA objects to be named by means of binding a name to an object reference. The name binding may be stored in the naming service, and a client may supply the name to obtain the desired object reference.Prior to running a client or a server, you will start ORBD. ORBD includes a persistent Naming Service and a transient Naming Service, both of which are an implementation of the COS Naming Service.The Persistent Naming Service provides persistence for naming contexts. This means that this information is persistent across service shutdowns and startups, and is recoverable in the event of a service failure. If ORBD is restarted, the Persistent Naming Service will restore the naming context graph, so that the binding of all clients' and servers' names remains intact (persistent).For backward compatibility, tnameserv, a Transient Naming Service shipped with older versions of the JDK, is also included in J2SE v.1.4. A transient naming service retains naming contexts as long as it is running. If there is a service interruption, the namingcontext graph is lost.The -ORBInitialPort argument is a required command-line argument for orbd, and is used to set the port number on which the Naming Service will run. The following instructions assume you can use port 1050 for the Java IDL Object Request Broker Daemon. When using Solaris software, you must become root to start a process on a port under 1024. For this reason, we recommend that you use a port number greater than or equal to 1024. You can substitute a different port if necessary.To start orbd from a UNIX command shell, enter:orbd -ORBInitialPort 1050&From an MS-DOS system prompt (Windows), enter:start orbd -ORBInitialPort 1050Now that ORBD is running, you can run your server and client applications. When running the client and server applications, they must be made aware of the port number (and machine name, if applicable) where the Naming Service is running. One way to do this is to add the following code to your application: Properties props = new Properties();props.put("org.omg.CORBA.ORBInitialPort", "1050");props.put("org.omg.CORBA.ORBInitialHost", "MyHost");ORB orb = ORB.init(args, props);In this example, the Naming Service is running on port 1050 on host "MyHost". Another way is to specify the port number and/or machine name when running the server or client application from the command line. For example, you would start your "HelloApplication" with the following command line: java HelloApplication -ORBInitialPort 1050 -ORBInitialHost MyHostTo stop the naming service, use the relevant operatingsystem command, such as pkill orbd on Solaris, or Ctrl+C in the DOS window in which orbd is running. Note that names registered with the naming service may disappear when the service is terminated if the naming service is transient. The Java IDL naming service will run until it is explicitly stopped.For more information on the Naming Service included with ORBD, see Naming Service.Server ManagerTo access ORBD's Server Manager and run a persistent server, the server must be started using servertool, which is a command-line interface for application programmers to register, unregister, startup, and shutdown a persistent server. When a server is started using servertool, it must be started on the same host and port on which orbd is executing. If the server is run on a different port, the information stored in the database for local contexts will be invalid and the service will not work properly.Server Manager: an ExampleUsing the sample tutorial for our demonstration, you would run the idlj compiler and javac compiler as shown in the tutorial. To run the Server Manager, follow these steps for running the application:Start orbd.To start orbd from a UNIX command shell, enter:orbd -ORBInitialPort 1050From an MS-DOS system prompt (Windows), enter:start orbd -ORBInitialPort 1050Note that 1050 is the port on which you want the name server to run. -ORBInitialPort is a required command-line argument. When using Solaris software, you must become root to start a process on a port under 1024. For this reason, werecommend that you use a port number greater than or equal to 1024.Start the servertool:To start the Hello server, enter:servertool -ORBInitialPort 1050Make sure the name server (orbd) port is the same as in the previous step, for example, -ORBInitialPort 1050. The servertool must be started on the same port as the name server.The servertool command line interface appears:Start the Hello server from the servertool prompt:servertool > register -server HelloServer -classpath . -applicationNameHelloServerApNameThe servertool registers the server, assigns it the name of "HelloServerApName", and displays its server id:The graphic above also shows the servertool listing all registered servers.Run the client application from another terminal window or prompt:java HelloClient -ORBInitialPort 1050 -ORBInitialHost localhostFor this example, you can omit -ORBInitialHost localhost since the name server is running on the same host as the Hello client. If the name server is running on a different host, use -ORBInitialHost nameserverhost to specify the host on which the IDL name server is running.Specify the name server (orbd) port as done in the previous step, for example, -ORBInitialPort 1050.When you have finished experimenting with the Server Manager, be sure to shut down or kill the name server (orbd) andservertool.To shut down orbd from a DOS prompt, select the window that is running the server and enter Ctrl+C to shut it down. T o shut down orbdfrom a Unix shell, find the process, and kill it. The server will continue to wait for invocations until it is explicitly stopped.To shut down the servertool, type quit and press the Enter key on the keyboard.See AlsoNaming ServiceservertoolCopyright ? 2001 Sun Microsystems, Inc. All Rights Reserved.Java Software。
JavaCorba编程技术
JavaCorba编程技术J a v a C O R B A编程技术EMAIL:ah_wangxiaochuan@/doc/427096093.html⼀、关于CORBA (1)⼆、CORBA的特点及体系结构 (1)三、关于IDL (2)四、CORBA例⼦ (2)五、接⼝⽂件CorbaDemo.idl (2)六、服务器代码CorbaDemoServer.java (2)七、客户端代码CorbaDemoClient.java (4)⼋、由IDL⽣产Java⽂件,idl.bat (5)九、启动服务器的批处理ts.bat (6)⼗、启动客户端的批处理tc.bat (6)⼗⼀、运⾏程序⽅法 (6)⼀、关于CORBACORBA(Common Object Request Broker Architecture,公⽤对象请求代理体系结构)是⼀种规范,是由OMG(Object Management Group)协会开发的标准分布式对象体系结构,它定义了分布式对象如何实现互操作。
CORBA同时做到了编程语⾔和运⾏平台的独⽴性,只要使⽤OMG组织的IDL(Interface Definition Language,接⼝定义语⾔),任何⼀个客户机都有能⼒调⽤任何⼀台服务器上的⽅法,并且客户机和服务器可以使⽤不同的语⾔编写,这样⼀来,就具有了巨⼤的灵活性。
⼆、CORBA的特点及体系结构CORBA对象主要有下⾯的特点:l CORBA对象可以在⽹络上位置定位。
l CORBA对象可与其它平台上⾯的对象实现互操作。
l CORBA对象可以使⽤任何语⾔编写,只要存在从OMG IDL到该语⾔的映射(当前包括Java,C++,C,SmallTalk,COBOL和Ada)。
三、关于IDL接⼝描述语⾔(InterfaceDescriptionLanguage)编写的对象接⼝,使得与语⾔⽆关的独⽴性成为可能。
IDL使得所有CORBA 对象以⼀种⽅式被描述,仅仅需要⼀个由本地语⾔(C/C++、CORBA、Java)到IDL的“桥梁”。
java corba实例
java corba实例Java CORBA(Common Object Request Broker Architecture)是一种分布式对象模型,它允许不同的应用程序在网络上进行通信和交互。
CORBA提供了一种机制,使得位于不同操作系统和编程语言中的对象可以透明地进行通信。
下面我将通过一个简单的实例来介绍Java CORBA的使用。
假设我们有两个应用程序:一个是客户端应用程序,另一个是服务器应用程序。
客户端应用程序需要从服务器应用程序中获取一些数据,并进行一些处理。
我们可以使用Java CORBA来实现这样的通信。
我们需要定义一个IDL(Interface Definition Language)文件,用于描述客户端和服务器之间的接口。
IDL是一种语言中立的描述语言,它可以用于描述接口的数据类型和方法。
在我们的例子中,我们可以定义一个简单的接口,包含一个获取数据的方法。
接下来,我们使用IDL编译器将IDL文件编译成Java代码。
编译器将生成一些接口和类,用于在应用程序中实现客户端和服务器之间的通信。
在客户端应用程序中,我们首先需要获得服务器应用程序的引用。
这可以通过ORB(Object Request Broker)来实现,ORB是CORBA 的核心组件,用于处理对象之间的通信。
通过ORB,我们可以将客户端和服务器之间的调用进行编码和解码。
一旦我们获得了服务器应用程序的引用,我们就可以使用它来调用服务器上的方法。
在我们的例子中,我们可以调用服务器上的获取数据方法,然后将数据传递给客户端进行处理。
在服务器应用程序中,我们需要实现在IDL文件中定义的接口。
我们可以创建一个实现了该接口的类,并在其中实现获取数据的方法。
一旦服务器应用程序启动,它将等待客户端的调用,并根据调用来执行相应的操作。
通过Java CORBA,我们可以实现客户端和服务器之间的透明通信。
客户端不需要了解服务器的实现细节,只需要通过接口来调用相应的方法。
CORBA(公共对象请求代理)
CORBA(公共对象请求代理)1.初始CORBA:CORBA(Common Object Request Broker Architecture)“公共对象请求代理结构”它首先是一种编程技术,是吸收了面向对象技术,分布式计算技术,多层体系结构技术以及接口技术的综合技术。
Corba的最终目的是分布式软件系统。
CORBA即代表了一种软件开发模式,一种软件开发标准,也提供了软件开发必须的服务,可以使用的集合。
因此整体上CORBA整体上是由“对象请求代理”“CORBA服务”“CORBA工具集”以及符合CORBA标准的各种应用程序,对象同一综合而成。
如下图:2.CORBA对象请求代理---ORB:ORB是连接应用程序,各种对象CORBA服务,CORBA工具集的核心。
也正是ORB将这些构成CORBA图景的元素有序的分割开来。
3.CORBA中IDL的作用:在CORBA标准中,客户与ORB接口对象被称为“接口存根”I DL Stub;CORBA服务器(即CORBA对象实现)与ORB接口对象别成为“接口框架”IDL Skeleton。
这样CORBA 客户对象与CORBA对象实现之间至少被三组对象隔离:接口存根,ORB,接口框架。
这种隔离为软件集成带来了巨大的灵活性,但同时需要CORBA客户对象,接口存根,ORB,接口框架,CORBA对象实现各个部分能够相互理解各自的数据,结构和行为。
这一要求可以通过接口技术以及CORBA接口定义语言(Interface Definition Language)--OMG IDL 实现。
OMG IDL不是编程语言,不能用于编写具体的操作算法,但是它可以用来定义对象能够进行的所有操作,包括全部输入,输出参数以及返回结果,还有可能产生的操作的错误等。
用OMG IDL 定义对象就得到了CORBA 接口,对于CORBA客户,这个接口意味着一种承诺,如果客户向ORB发送符合接口规定的请求,就一定会得到响应(出错,返回结果都是一种响应)对于CORBA对象实现(CORBA服务)这个接口意味着一种义务;软件开发人员必须实现接口规定的方法。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
1.C ORBA 简介CORBA(Common Object Request Broker Architecture)是为了实现分布式计算而引入的。
为了说明CORBA在分布计算上有何特点,我们从它与其它几种分布计算技术的比较中进行说明。
与过去的面向过程的RPC(Remote Procedure Call)不同,CORBA是基于面向对象技术的,它能解决远程对象之间的互操作问题。
MicroSoft 的DCOM (Distributed Component Object Model)也是解决这一问题的, 但它基于Windows操作系统,尽管到本书编写时,DCOM已有在其他操作系统如Sun Solaris, Digital Unix, IBM MVS 上的实现,但毫无疑问,只有在微软的操作系统上才会实现得更好。
而只有CORBA是真正跨平台的,平台独立性正是CORBA的初衷之一。
另一种做到平台无关性的技术是Java RMI(Remote Method Invocation),但它只能用JAVA实现。
CORBA与此不同,它通过一种叫IDL(Interface Definition Language)的接口定义语言,能做到语言无关,也就是说,任何语言都能制作CORBA组件,而CORBA组件能在任何语言下使用。
因此,可以这样理解CORBA:CORBA一种异构平台下的语言无关的对象互操作模型。
1.1 CORBA体系结构CORBA的体系结构如下:图1.1 CORBA体系结构CORBA上的服务用IDL描述,IDL将被映射为某种程序设计语言如C++或Java,并且分成两分,在客户方叫IDL Stub(桩), 在服务器方叫IDL Skeleton(骨架)。
两者可以采用不同的语言。
服务器方在Skeleton的基础上编写对象实现(Object Implementation),而客户方要访问服务器对象上的方法,则要通过客户桩。
而双方又要通过而ORB(Object Request Broker,对象请求代理)总线通信。
与传统的Client/Server模式(我们称为Two-tier client/server)不同,CORBA是一种multi-tier client/server architecture,更确切的说,是一种three-tier client/server模式。
双重客户/服务器模式存在的问题是两者耦合太紧,它们之间采用一种私有协议通信,服务器的改变将影响到客户方。
多重客户/服务器与此不同,两者之间的通信不能直接进行,而需要通过中间的一种叫代理的方式进行。
在CORBA中这种代理就是ORB。
通过它,客户和服务器不再关心通信问题,它们只需关心功能上的实现。
从这个意义上讲,CORBA是一种中间件(Middleware)技术。
下面列出CORBA中的一些重要概念1.2 CORBA中的几个概念1.2.1 ORB(Object Request Broker)CORBA体系结构的核心就是ORB。
可以这样简单理解:ORB就是使得客户应用程序能调用远端对象方法的一种机制。
图1.2 ORB模型具体来说就是:当客户程序要调用远程对象上的方法时,首先要得到这个远程对象的引用,之后就可以像调用本地方法一样调用远程对象的方法。
当发出一个调用时,实际上ORB 会截取这个调用(通过客户Stub完成,“提高”篇中会详细解释),因为客户和服务器可能在不同的网络、不同的操作系统上甚至用不同的语言实现,ORB还要负责将调用的名字、参数等编码成标准的方式(称Marshaling)通过网络传输到服务器方(实际上在同一台机器上也如此),并通过将参数Unmarshaling的过程,传到正确的对象上(这整个过程叫重定向,Redirecting),服务器对象完成处理后,ORB通过同样的Marshaling/Unmarshaling方式将结果返回给客户。
因此,ORB是一种功能,它具备以下能力:1.对象定位(根据对象引用定位对象的实现)2.对象定位后,确信Server能接受请求3.将客户方请求通过Marshaling/Unmarshing方式重定向到服务器对象上4.如果需要,将结果以同样的方式返回。
1.2.2 IDL(Interface Definition Language)IDL,接口定义语言,是CORBA体系中的另一个重要概念。
如果说ORB使CORBA 做到平台无关,那么IDL, 则使CORBA做到语言无关。
正像其名字中显示的那样,IDL仅仅定义接口,而不定义实现,类似于C中的头文件。
实际上它不是真正的编程语言。
要用它编写应用,需要将它映射它相应的程序设计语言上去,如映射到C++或JAVA上去。
映射后的代码叫Client Stub Code和Server Skeleton Code。
IDL的好处是使高层设计人员不必考虑实现细节而只需关心功能描述。
IDL可以说是描述性语言。
设计IDL的过程也是设计对象模型的过程。
它是编写CORBA应用的第一步,在整个软件设计过程中至关重要。
IDL的语法很像C++,当然也像Java。
很难想像一个程序设计人员是不懂C或Java的,所以,几乎所有的程序设计人员都能迅速理解IDL。
而这正是IDL设计者所希望的。
下面是一个IDL定义的简单例子:// grid.idl// IDL definition of a 2-D grid:module simpleDemo{interface grid {readonly attribute short height; // height of the gridreadonly attribute short width; // width of the grid// IDL operations// set the element [row,col] of the grid, to value:void set(in short row, in short col, in long value);// return element [row,col] of the grid:long get(in short row, in short col);};};This IDL defines an interface for a grid CORBA object that m aintains a grid or 2-D array of data values, which a client can access or m odify remotely.Module类似于Java中包(Package)的概念,实际上module simpleDemo映射到JAVA 正是package simpleDemo。
而Interface类似于C++中的类(classs)声明,或是Java中的Interface 定义。
附录中列出了IDL的全部语法。
1.2.3 Stub Code 和Skeleton CodeStub code 和Skeleton Code 是由IDL Complier自动生成的,前者放在客户方,后者放在服务器方。
不同厂商的IDL complier生成的Stub 和Skeleton会略有区别,但影响不大。
如上面的grid.idl, 编译后,Stub Code包含以下文件:grid.java_gridStub.javagridHelper.javagridHolder.javagridOperations.javaSkeleton Code则包含以下文件:gridOperations.javagridPOA.javagridPOATie.java(在Stud Code 也包含gridOperations.java, 是因为在使用Call back机制时会用到。
)这些文件的用途后面会讲到。
1.2.4 GIOP 和IIOP我们知道,客户和服务器是通过ORB交互的,那么,客户方的ORB和服务器方的ORB 又是通过什么方式通信呢?通过GIOP(General Inter-ORB Protocol)。
也就是说,GIOP是一种通信协议,它规定了两个实体:客户和服务器ORBs间的通信机制。
图1.3 ORBs通信机制GIOP在设计时遵循以下目标:Widest possible availabilitySimplicityScalabilityLow costGeneralityArchitectural neutrality也是说,GIOP设计的尽可能简单,开销最小,同时又具有最广泛的适应性和可扩展性,以适应不同的网络。
GIOP定义了以下几个方面:1.The Common Data Representation (CDR) definition.通用数据表示定义。
它实际上是IDL数据类型在网上传输时的编码方案。
它对所有IDL 数据类型的映射都作了规定。
2.GIOP Message Formats.它规定了Client和Server两个角色之间要传输的消息格式。
主要包括Request和Reply 两种消息。
一个Request 消息有以下几部分组成:A GIOP message headerA Request HeaderThe Request Body相应的,一个Reply消息则包括A GIOP message headerA Reply HeaderThe Reply BodyGIOP1.1规定GIOP message header格式如下:// GIOP 1.1struct Me ssageHeader_1_1 {char magic [4];Version GIOP_version;octet flags; // GIOP 1.1 changeoctet message_type;unsigned long message_size;};Request Header格式如下:// GIOP 1.1struct Reque stHeader_1_1 {IOP::ServiceContextList service_context;unsigned long request_id;boolean response_expected;octet re served[3]; // Added in GIOP 1.1sequence <octet> object_key;string operation;Principal requesting_principal;};Request Body则按CDR规定的方式编码,它主要对方法调用的参数进行编码,如方法:double example (in short m, inout Principal p);可表示成:struct example_body {short m; // leftmost in or inout parameterPrincipal p; // ... to the rightmost};3.GIOP Transport Assumptions:主要规定在任何面向连接的网络传输层上的一些操作规则。