Corba应用之TAO 实现库ImR(Implementation Repository)的使用

OpenDDS Java开发(一):理解Messenger示例 目录   一.准备 二.发送消息:TestPublisher 三.接收消息:TestSubscriber & DataReaderListenerImpl 四.在IDEA中运行示例 一.准备 首先需要安装好OpenDDS并开启Java支持:Windows下OpenDDS安装 然后在IDEA创建空项目 Java开发OpenDDS需要以下jar包: 其中 messeng... 阅读详情

Corba应用之TAO 实现库ImR(Implementation Repository)的使用
作者:  wulanshi@163.com
零、前言
这篇文章是在学习ACE_wrappers/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/范例时碰到问题时才想到写的,按照范例的步骤是无法运行(Implementation Repository)样例的,后来研究了相关了README文档才找到了问题所在,于是为了方便后来的同学者,并把相关的阅读材料翻译出来,整理成了下面的文章。由于自己的学识有限,也可能原文本身就有含糊之处,所以可能其中有翻译不准或理解不精确之处,希望大家体谅,并指正出来。
一、本文术语约定:
        实现库:本身也是一个CORBA的服务(系统自带)
        服务:指要被 应用 调用的实体,本身也是一个CORBA服务(一段程序,非系统服务),注册在实现库中
        应用:泛指客户端的的应用程序,和客户端同意,这个应用程序可能与服务在一台机器上,也可能在不同的机器上,用来调用服务
二、实现库的概述:
        当某个应用调用某个服务时,相关的请求先发送到实现库,如果该服务没有启动,则先启动这个服务,然后把调用转发到这个服务。当服务激活时,实现库用来跟踪某个服务,并且记录下相关的信息,以便于下次重新激活这个服务。
三、实现库的使用方法:
        一个应用如果要去使用实现库中的某个服务,这个服务必须通过ImR文件通信方式,以实现跟踪和同步服务的最新运行状态。这个功能已经包含在POA中,所以一个服务使用持久化POA,并且别指定-ORBUseImR参数,那么它将能够和实现库保持通信。
        ImR的特性用来提高tao系统的吞吐量和平衡度,它使的实现库可以把任务分解成ImplRepo_Service 和ImR_Activator两层来实现。
        1.ImplRepo_Service
        ImplRepo_Service“实现库”实现的主要程序,它对使用ImR的应用是可见的,它接受一个来自于tao_ImR的请求,然后把这个请求分派到注册过的ImR_Activator上。ImplRepo_Service是无状态的,除了注册在其上的ImR_Activato信息,其他信息都不维护。它的任务是作为一个应用和实际执行请求的ImR_Activator中间媒介。
        到目前为止,任何时刻只能有一个ImplRepo_Service可以运行,通过常用的方法,如-ORBInitRef、-ORBDefaultInitRef 或者广播(multicast)的方式都可以调用到ImplRepo_Service。
ImplRepo_Service程序运行的参数:
        -d  调试信息的开关,缺省是打开,0 是关闭
        -m 支持广播发现
        -o 如果想生成ior文件,该参数后跟一个文件名
当然,还有其他与ORB相关的参数。可以加参数-h查看具体的命令格式,下文也有示例。
        2.ImR_Activator
        ImR_Activator是真正执行的实体,它可以激活服务、关闭服务,也可以维护与它相关的各个服务程序的信息。一台主机上只能运行一个ImR_Activator实例,ImR_Activator对应用是透明的,只有ImplRepo_Service可以直接和它接触,也只有ImplRepo_Service才需要它。
        一个ImR_Activato实例首先要使用ImplRepo_Service进行注册,这样才可以接受请求。当进行注册时,它传递当前的主机名和它自己的IOR文件给ImplRepo_Service。在以后ImplRepo_Service访问它时,会使用到这些同样的信息。
ImR_Activator程序运行的参数:
-c  运行的服务命令      
        -d  打印调试信息
        -l  锁住数据库
        -o  生成 IOR文件,用于可能其他的需要此信息
        -r  允许WIN32注册实现
        -t  设一个延时时间
        -h  打印帮助信息
        当一个持久化的ImR_Activator被请求时,可能需要保存一些信息,如启动参数、定位信息、工作目录动。这些信息可以设置参数保存在一个文件里,保存的格式如下:
        -p  传递一个ImplRepo_Service文件名,用ACE_Configuration_Heap方式存储
        -x  存储在一个XML格式的文件 里
        存储的这些信息可以在与具体服务相关的tao_imr里作为参数传递。
        3.工作过程
        1)运行一个ImplRepo_Service。
        只有ImplRepo_Service running运行,才能实例化应用需要的一个或多个ImR_Activato。
        2)选择ImR_Activator
        当一个服务需要新增到实现库,或者一个已经存在的服务需要更新时,一个请求就通过tao_imr程序发送到ImplRepo_Service,如上所说,启动的命令、工作目录、服务的当前主机以及其他的信息都要通过tao_imr传递给ImplRepo_Service。ImplRepo_Service在传递过来的主机中选择ImR_Activator来激活相应的服务,如果选择不到相应的ImR_Activator,则通过一定的算法来选择。一旦一个ImR_Activator被选择,它还需要对激活的服务的生命周期负责。
3)执行服务
当ImR_Activator被选中后,ImplRepo_Service传递相关的请求给ImR_Activator,这个ImR_Activator调用服务执行相关的请求,并且更新它的数据库以反应服务的最新状态。
4.ImR的运行及使用
结合TAO 1.4 关于Implementation Repository文档(见ACE_wrappers/TAO/docs/tutorials/Quoter/Simple/Impl-Repo/index.html)来说明,本人在linux9.0 环境下根据该文档提供的步骤无法进行服务的注册(返回Could not register server . Activator <> not found!),主要是因为缺少了中间ImR_Activator的过程,所以该样例无法正常运行。下列过程在Server的当前目录下运行。
1)        首先运行ImplRepo_Service
$TAO_ROOT/orbsvcs/ImplRepo_Service/ImplRepo_Service -o implrepo.ior -d 0 -ORBobjrefstyle URL &
2)然后运行ImR_Activator
$TAO_ROOT/orbsvcs/ImplRepo_Service/ImR_Activator -ORBInitRef ImplRepoService=file://implrepo.ior  &
3)$TAO_ROOT/orbsvcs/ImplRepo_Service/tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior add childPOA -c "./server -ORBUseIMR 1 -ORBobjrefstyle URL -ORBInitRef ImplRepoService=file://implrepo.ior"
系统返回:
Imr Activator: Register server childPOA.
Successfully registered server
这表明服务已经注册成功
4)启动服务用来生成IOR文件,并且写入stock_factory.ior文件
        $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior ior childPOA -f stock_factory.ior
        5)应用启动时将把stock_factory.ior文件作为参数传递出去,并且自动进入到实现库ImR服务中,如果服务没有启动,则实现库ImR启动服务。
        如果一个服务当前不再被应用所使用,则可以通过如下命令关闭:
        $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
       shutdown childPOA
        如果一个服务任何时候都不再被使用,则可以从ImR数据库中去除它:
        $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
       remove childPOA
        6)客户端应用
         ./client file://stock_factory.ior MSFT RHAT
        返回:
       The price of a stock in "Microsoft, Inc." is $91
       The price of a stock in "RedHat, Inc." is $210
        测试一下持久化POA的运行情况,把当前服务停掉:
        $tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
       shutdown childPOA
        则再执行./client file://stock_factory.ior MSFT RHAT
        返回:
       The price of a stock in "Microsoft, Inc." is $91
       The price of a stock in "RedHat, Inc." is $210
        结果情况说明,虽然服务被停掉,但是客户端应用可以通过ImR机制完成服务的调用。
四、在实现库ImR机制中,服务Server实现需要做哪些工作
        1.在以前的版本中,实现库需要显式的使用IR_Help类,现在只需要使用-ORBUseImR 1参数说明即可。
        2.Server实现需要一些限制,在Server中,只有持久化的POA才能被ImR支持,并且Server中的POA名称作为ImR的key作为入口索引,换句话说,一个Server只能有一个唯一的持久化的POA。
五、ImR -ORBDefaultInitRef参数的使用
1.一个基本的(或缺省的)IOR被作为默认参数被ORB传递。当resolve_initial_reference方法被调用时,这个ORB会把sevice名称附加在基本的IOR里,形成一个完成的IOR。使用这样的ImR时,会有一个非常有用的特征,就是当ImR's endpoint被作为基本的IOR使用时,那么这个ImR可以通过resolve_initial_reference方法的调用提供许多服务。比如,如果一个ImR service运行在一个主机为doriath端口为5555上,那么可以认为名字服务也已经注册在这个ImR service上了。
        应用可以通过缺省参数-ORBDefaultInitRef使用名字服务:
        client -ORBDefaultInitRef corbaloc:iiop: doriath:5555
        当应用调用resolve_initial_reference(“Nameservice”),ORB将解析成“corbaloc:iiop:doriath:5555/NameService”,此时ImR就可以识别这个IOR并作为一个指针定位到实际的NameService,然后在需要的情况下启动这个NameService服务,最后,应用连接到该名字服务上。
        2.以缺省参数的方式使用一个服务必须满足两个条件
        1)这个服务必须注册成resolve_initial_reference调用的名字。比如,Name服务必须注册成“NameService”,并且也包含一个POA,这个POA的名字也要是“NameService”
        2)这个服务必须能够处理这个名字"corbaloc:iiop:machine:port/poa_name"
六、服务Server被激活的模式
        1) NORMAL
        缺省的方式。应用发出请求,然后自动通过tao_imr 方式激活
        2) MANUAL
        手动方式。通过手动tao_imr命令行方式激活
        3) PER_CLIENT
        每个应用请求会激活一个新的服务进程启动。
        因为每个客户端缓存前面的引用,所以一个客户端对应一个服务。这也会有一些异常,比如最原始的IOR被用于不同的线程(每个线程获得不同的服务)。因为在这种模式下实现库并不保存每个启动的服务的信息,所以它也就不能关闭服务,由此这个服务必须有一个可以被关闭的的方式。
        4) AUTO_START
        当实现库启动时,服务自动启动。tao_imr也有一个自动启动的命令,可以自动启动标记为自动方式的所有服务。
七、未来实现库的发展:
        未来实现库使用ORT(Object Reference Template)技术,这个技术使的实现库可以省去ImR_Activator的中间过程,只需要IO指向ImplRepo_Service即可。

OpenDDS在两台机器上使用方式 【注意】,以下转载内容来自【http://blog.youkuaiyun.com/zhangrongrong123/article/details/78596669】,部分说法、内容和方法值得商榷,评论区可讨论或留言。------------------------------------------转载内容——开始------------------------------------------经过同事Z... 阅读详情

相关推荐

OpenDDS集中发现配置文件repo.ini

OpenDDS集中发现的最简单配置文件repo.ini 1)DCPSInfoRepo -ORBListenEndpoints iiop://111.222.222.111:12345 2)publisher -DCPSConfigFile repo.ini 3)subscriber -DCPSConfigFile repo.ini 通讯 就成功了

TAO教程之五:实现库(Implementation Repository)

实现库(Implementation Repository) 在先前的示例中,客户端与服务端必须至少联系一次。如果服务器被移动到不同的主机或端口,或服务器已关掉,服务器与客户端之间的绑就定会失败。通过外在的定位代理间接绑定,像实现仓库可以解决上述问题。 实现仓库维护一个数据结构,这个数据结构作为保存跟踪服务器的服务表。它维护已知服务的注册表、正在运行的服务器的记录和对应的端口号,并且如果服务器

TAO工作室Stone Jiang的专栏 2215

jacorb生成固定的ior文件

使用jacorb生成固定的ior文件的方法,需要的同学速度了。

IE惯导数据紧组合处理过程与方法

解算质量为1的数量占总数量的80.5%,质量为2的占17.3%,所有轨迹点均成功解算。位置标准差分布情况为,10cm以下的数据点占比97.7%,10-30cm的数据点占比0.9%,不存在误差超过5m的数据点。

十八与她的博客 7927

《CORBA Programming with TAO》

用TAO进行CORBA编程的经典文章,对CORBA编程初学者会有很大帮助。是我自己从网上整理的,因网上的博客分多页不便下载收藏,故将其整理成word文档

基于TAO的CORBA程序设计

简单介绍了基于TAO的CORBA实现框架和基本概念。并有可执行的C++代码片段,对于刚解除CORBA和TAO的同学来说,这是个不错的入门资料。

实时CORBA平台TAO的安装和使用

实时CORBA平台TAO的安装和使用 这里以ACE-5.4+TAO-1.4+CIAO-0.4.tar.gz为例。 一.     Win32+VC6.0下编译和安装ACE和TAO 将网上下载的TAO软件包解压缩到某个目录(本文为C:\),该目录下会有ACE_wrappers目

hu_zhi_de的专栏 1135

紫光同创PGL50H开发板实战:盘古50KH视频板的多媒体处理与高速通信方案

本文详细介绍了基于紫光同创PGL50H FPGA芯片的盘古50KH视频开发板在多媒体处理与高速通信方面的实战应用。文章从开发板硬件架构解析入手,逐步指导开发环境搭建、DDR3内存控制器配置、HDMI视频输入输出实战,并重点探讨了利用板载HSST高速收发器实现光纤通信与万兆以太网的方案。最后,通过构建一个集多路视频采集、处理与光纤传输于一体的系统案例,展示了该开发板在高性能实时数据处理领域的强大潜力。

b9c0d的博客 485

Implementation Repository测试说明

TAO自带的一个例子程序中的说明有点小问题,写的不是很全,按照上面的步骤做了以后还是不能运行。结合STONE的说明,再根据里面的其它说明,作个补充性的描述:1,implrepo_service -orbendpoint iiop://localhost:9000 -d 1 -m 1 -p 1 -o implrepo.ior(同STONE的描述)2,imr_activator -d 1

fan6662000的专栏 738

从SFF-8087到SFF-8643:详解服务器硬盘背板连接线缆的演变与实战接线

本文深度解析了服务器硬盘背板连接技术从SFF-8087到SFF-8643的演进历程,重点介绍了SAS、SATA和U.2接口的技术特点与实战接线方案。通过对比不同连接器标准的物理特性和电气规范,提供了混合环境下的线缆选择策略和常见故障排查指南,帮助IT专业人员优化存储系统性能与稳定性。

weixin_30603633的博客 276

1.全基因组重测序数据分析介绍

二代测序原理及fastq数据解读、全基因组重测序数据分析内容

weixin_53682198的博客 1883

CORBA Programming with TAO - 1.Start(基本概念)

 摘要:简要介绍CORBA的基本原理,并解释POA、stub、skeleton、servant等重要概念。一、CORBA及TAO简介CORBA是个为简化跨平台应用而提出的规范,他独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。CORBA能作为不同平台应用间信息传递的中间件,CORBA通过引入经过充分验证的有效的框架结构和通信手段,最大限度地简化了网络通信相

技术收藏 924

数字IC物理验证实战 | 从Calibre LVS报告到Innovus定位的Debug全链路解析

本文详细解析了数字IC物理验证中Calibre LVS报告的Debug全流程,从INCORRECT NETS错误的初探到Innovus定位技巧,提供了实战案例和高效工具的使用方法。重点介绍了Calibre高亮功能、Innovus验证命令以及前后端工具联动的关键策略,帮助工程师快速定位和解决LVS问题,提升物理验证效率。

weixin_30919429的博客 127

ASC格式惯导数据文件转IMR格式文件

Waypoint将所有自定义IMU原始二进制格式转换为通用格式(IMR),该格式在IMU数据转换器中的解码过程后从惯性探测器读取。由于它包含读取和解码数据的重要信息,通用IMU数据格式的前512个字节是一个必须填写、读取和解释的标头。我们使用惯导采集数据之后,如果需要用现有软件进行解算,比如POSMind等等,就会涉及到IMR格式的惯导数据文件。而NovAtel Convert转换软件只能将原始DAT格式的文件转成ASCLL文件,因此我自编程实现了ASC格式文件到IMR格式文件的转换。

qq_73763569的博客 1630

【Visual Assist X助手安装问题】Visual Assist X无法安装(双击安装包没反应) | Visual Assist X安装后在Visual Studio中找不到(亲测有效)

本文分享了Visual Assisant X助手的安装与使用问题的详细解决办法,因为网上搜集的信息比较少,所以有一定的参考价值。考虑到很多开发新手会遇到上述问题,可能对Windows系统不熟悉,所以相关操作步骤讲解的很详细!

dvlinker的技术专栏 6万+

【RT-DETR多模态融合改进】| 自研 多模态大核选择模块:MM_LSK,适配多模态图像信息融合

本文记录的利用改进的多模态大核选择模块(MM-LSK)优化RT-DETR,构建可见光-红外双模态目标检测网络。在遥感等大尺寸图像的可见光-红外双模态小目标检测任务中,单模态检测易受光照、云雾、背景干扰等因素影响,且小目标外观信息匮乏,无法仅基于单模态外观实现较好的识别,因此需要融合双模态互补特性与广泛的跨模态上下文信息进行辅助。

Limiiiing的博客 381

【原创】OpenDDS笔记(二) Linux环境下的环境搭建

1.1 环境 Linux:Ubuntu 16.04LTS Perl:V5.22.1 Make:GNU Make V4.1 gcc:V5.4.0 1.2 下载ACE+TAO与OpenDDS ACE+TAO下载地址:http://download.dre.vanderbilt.edu/ OpenDDS下载地址:http://download.ociweb.com/OpenDDS/ 下载时注意: ACE+TAO下载选择FULL版本。 FULL版本:包含所有GNU make预生成makefile的源

jam12315的专栏 3662

华为OD机试 - TLV格式(Python/JS/C/C++ 2025 C卷 100分)

两端通过TLV格式的报文来通信,现在收到对端的一个TLV格式的消息包,要求生成匹配后的(tag,length,valueOffset)列表。和需要匹配的n个tag对应的n行匹配结果,每一行由长度和偏移量组成。第二行:需要匹配的tag数量n(0 < n < 1000)后面N行:需要匹配n个tag值(十进制表示),递增排列。标签10(0A)存在,长度3,valueOffset=2。标签15(0F)长度4,valueOffset=2。标签14(0E)长度2,valueOffset=8。

学Java,找哪吒 2040

TAO使用指南

1. 什么是TAO?TAO是美国华盛顿大学的CORBA界大牛Douglas C. Schmidt博士领导开发的一个实时CORBA平台. 它是一个开放源码项目, 所以是完全免费的. 用C++语言开发. 符合CORBA2.6版本.支持语言: C++支持平台: Win32, 常见的各种Unix, Linux, 实时操作系统如VxWorks等等. 在所有的CORBA平台中, TAO支持的平台应该是最多的.

bitman的专栏 3729

MAVEN教程-第一篇:MAVEN基础入门

MAVEN基础入门摘要 Maven是Java项目自动化构建工具,核心解决依赖管理(自动下载JAR包)、标准化构建流程(统一目录结构)和插件扩展问题。安装需配置环境变量(MAVEN_HOME),通过mvn -v验证。使用archetype:generate命令快速生成项目,标准结构包含src/main/java(主代码)和pom.xml(配置依赖/插件)。关键操作:mvn compile编译代码,mvn exec:java运行主类。POM文件定义项目元数据(如groupId)、依赖(如JUnit)和构建插件(

无 231

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

上一篇: 跟我从头学TAO编程系列(3) -- 通过实例学习CORBA核心概念
下一篇: 面朝大海 春暖花开
Stone
博客等级 码龄21年 1715粉丝 158原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值