实现库(Implementation Repository)
在先前的示例中,客户端与服务端必须至少联系一次。如果服务器被移动到不同的主机或端口,或服务器已关掉,服务器与客户端之间的绑就定会失败。通过外在的定位代理间接绑定,像实现仓库可以解决上述问题。
实现仓库维护一个数据结构,这个数据结构作为保存跟踪服务器的服务表。它维护已知服务的注册表、正在运行的服务器的记录和对应的端口号,并且如果服务器已注册,还可以根据需要启动服务器。
当服务器创建一个持久化的时候,它设置地址和端口号到IOR的profile body中,这是为了实现响应服务器的实现仓库。当客户端使用这个IOR的时候,如果实现仓库没有关掉,它就与这个实现仓库进行连接。仓库解码它的IOR和使用根据对象key从服务表在索引到的POA的名称。仓库返回当前实际服务器的地址信息。
在这个示例中,让我们继续修改我们先前的股票工厂来支持通过实现仓库的间接绑定。
我们必须做的唯一事情是把我们的子POA与实现仓库注册在注册。
orb->_tao_add_to_IOR_table ("childPOA", stock_factory.in ());
然后,我们和往常一样将对象引用字符串化后打印出来。
CORBA::String_var ior = orb->object_to_string (stock_factory.in ());
练习
修改在简单服务器中的
server.cpp 文件用于创建持久化的子POA。您可以使用相同的
Quoter.idl Stock_i.h Stock_i.cpp Stock_Factory_i.h Stock_Factory_i.cpp Client.cpp ,您可以使用MPC 文件。.
解决方案
把您的server.cpp 与
server.cpp 文件作比较。
测试
为了测试您的修改,您需要运行四个程序。第一步是启动TAO提供的实现仓库。实现仓库被包括至少一个定位器和一个激活器。定位品为期望使用仓库的应用程序(在这里指客户端)提供可见的接口,而激活器执行激活和维护服务器的实际工作。
首先,我们启动定位器。我们需要输出ImplRepo_Service的IOR到一个文件中,以便于激活器和客户端都能找到定位器。
$ $TAO_ROOT/orbsvcs/ImplRepo_Service/ImplRepo_Service -o implrepo.ior -d 0 -ORBobjrefstyle URL &
其次,我们启动激活器,指向定位器的IOR文件。
$ $TAO_ROOT/orbsvcs/ImplRepo_Service/ImR_Activator -ORBInitRef ImplRepoService=file://implrepo.ior
ImR Activator: Starting doc.ece.uci.edu
ImR Activator: Registered with ImR.
再次,我们要用实现库注册我们的服务器。我们可以使用TAO提供应用程序 $TAO_ROOT/orbsvcs/ImplRepo_Service/tao_imr 来添加我们的服务器到实现仓库中的服务器数据库中。
$ $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"
Successfully registered server
在Windows平台中,用下面的命令行往实现仓库中注册服务器。
$ACE_ROOT/bin/tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
add childPOA -c "./server -ORBUseIMR 1 -ORBobjrefstyle URL
-ORBInitRef ImplRepoService=file://implrepo.ior"
我们指定-ORBInitRef
选项来使用在implrepo.ior 文件中的IOR和指定-ORBUseIMR 选项分辩服务器启动还是关闭的通知而使用的IMR。
第二步是为与IMR一起使用的我们的服务器生成简单的IOR,使用ior选项,并写进stock_factory.ior文件。
$tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior ior
childPOA -f stock_factory.ior
corbaloc:iiop:1.1@doc.ece.uci.edu:2690/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
为了测试POA的持久化,让我们关掉服务器然后运行客户端。
$tao_imr -ORBInitRef ImplRepoService=file://implrepo.ior
shutdown childPOA
Successfully shutdown server
./client file://stock_factory.ior MSFT RHAT
The price of a stock in "RedHat, Inc." is $210
The price of a stock in "Microsoft, Inc." is $91
更多的阅读资料
欲知更多的实现库,请点这里 here。
The Henning and Vinoski CORBA book discusses POA policies in detail. Likewise, the Schmidt and Vinoski columns in C++ Report also include several articles about the POA. Finally, the TAO distribution includes examples that illustrate how to use the POA policies.
分享到:
相关推荐
Docker 仓库上传镜像出现 unauthorized to access repository 的解决方法 在 Docker 中,当我们尝试上传镜像到仓库时,可能会遇到 "unauthorized to access repository" 的错误。这是一种常见的错误, especially ...
Rancher下Docker拉取镜像出现unauthorized to access repository问题解决方案 Rancher是一个流行的容器编排工具,它可以帮助用户快速部署和管理容器化应用程序。然而,在使用Rancher时,可能会遇到拉取镜像出现...
1、工具作用:清理本地和远程maven仓库repository中的无效或者垃圾版本文件lastUpdated、_maven.repositories*、_remote.repositories; 2、使用方法1:在本地仓库repository文件夹中右键,打开Git Bahs Here命令...
2. 配置 PowerDesigner Repository:在 PowerDesigner 中配置 Repository,指定数据库连接信息和模型库存储位置。 3. 将模型文件上传到 Repository:使用 PowerDesigner 将模型文件上传到 Repository 中,Repository...
.NET Core 实现分表分库、读写分离的通用 Repository 功能是指使用 FreeSql.Repository 库来实现通用的仓储层功能,实现了基础的仓储层(CURD),并且支持分表分库、读写分离等功能。 FreeSql.Repository 库是基于 ...
解决ERROR: Failed to resolve: ...Android studio中没有support repository,放到Android Studio SDK\extras 详见https://blog.csdn.net/kaifei2018/article/details/115795215
settings.xml,本地maven仓库配置,注意:D:\maven\repository为我本地的maven仓库路径,改成你的。 settings.xml,本地maven仓库配置,注意:D:\maven\repository为我本地的maven仓库路径,改成你的。 settings.xml...
maven仓库所需要的jar包,包含完整的内容,可以去看一下简绍(https://blog.csdn.net/Fly_tom/article/details/81874197),由于csdn网站上传文件的限制,这个只是一部分,另一部分:...
【maven-repository:贪吃的Maven Repository】 Maven Repository,通常指的是Maven中央仓库,是Java开发中用于存储和检索Maven依赖的在线资源库。这个“贪吃的Maven Repository”可能是一个比喻,暗示了它包含了...
1. **Maven 本地仓库**:Maven 使用仓库来存储项目依赖的库文件,这些库文件包括 JAR、WAR、EAR 等格式。本地仓库是 Maven 在用户的机器上创建的一个特定目录,用于存放从远程仓库下载的依赖项。当 Maven 构建项目时...
这里的“repository下载下载”可能指的是用户或开发者从远程仓库下载代码库的行为。在本文中,我们将深入探讨`repository`的概念、它在软件开发中的作用以及如何进行下载。 `Repository`,在软件开发领域,尤其是...
* Local repository:Maven 的本地仓库路径,例如:E:/m2/repository。 ### 验证配置结果 打开命令行 CMD,执行 `mvn help:system` 会发现 Maven 会将从远程库下载的 jar 包都会放到新修改后的路径 E:/m2/...
资源分类:Python库 所属语言:Python 资源全名:repository-updater-1.0.1.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
存储库是C#中存储库模式的通用实现。 它提供了一个存储库基类Repository<T> ,它公开了用于存储/检索数据的函数,还提供了一个对象上下文基类ObjectContext<T> ,一旦检索到数据,就可以对其进行操作。 它还公开了...
在Laravel框架中,缓存是提升应用性能的关键技术之一。`cache-repository`是一个针对Laravel设计的简单易用的缓存库,它旨在帮助开发者更高效地管理和使用缓存,提高应用的响应速度。这个库通常被称为“雄辩缓存”...
Eloquent MongoDB Repository是针对Laravel框架的一个扩展,它允许开发者在MongoDB数据库上使用Repository模式。Repository模式是一种设计模式,可以将业务逻辑层与数据访问层解耦,提高代码的可测试性和可维护性。...
默认情况下,Maven使用的是Maven Central Repository,这是全球最大的公开Java库仓库,包含了大量的开源项目组件。然而,由于地理位置和网络条件的限制,有时从Central Repository下载依赖可能会比较慢。为了解决这...
MongoDBRepository则是这个模式的具体实现,用于处理MongoDB数据库中的数据操作。 MongoDB是一款基于分布式文件存储的文档型数据库,非常适合处理大量非结构化或半结构化数据。在PHP7中,我们可以使用`mongodb/...
标题“repository.xbmc-addons-chinese-1.2.1.zip”揭示了这是一个与XBMC(Xbox Media Center)相关的软件资源包,版本号为1.2.1,并且是针对中文用户定制的。XBMC是一款开源的媒体中心软件,后来更名为Kodi,允许...
资源库(Repository)是Kettle的核心组件之一,它提供了对作业(Job)和转换(Transformation)的集中管理和版本控制。资源库的表结构对于理解和操作Kettle的工作流程至关重要。 在Kettle资源库中,主要有以下几个...