问题标签 [tao]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
245 浏览

multithreading - TAO 异常:TAO (2723|139817071765312) - ServerRequest::tao_send_reply_exception,无法发送异常回复

我在 Linux 中使用 TAO 的通知服务实现了一个发布-订阅服务器对。有两个服务器 E1 和 E2。E2 订阅了新闻类型,例如 1,E1 订阅了新类型,例如 2。E1 发布类型 1 的新闻,随后 E2 进行一些计算并发布 E1 获得的新闻类型 2 的结果。这个循环继续。这些事件属于 CosNotification::StructuredEvent 类型。问题是,系统在服务器的两个终端上执行了一段时间后都会给出很多错误消息。

TAO (2723|139817071765312) - ServerRequest::tao_send_reply_exception,无法发送异常回复

我是 TAO(以及 CORBA)的初学者,所以我不确定这个问题是否是因为线程。如果我在 E1、E2 或两侧使用以下 svc.conf,事件通信会变得非常慢:

静态 Server_Strategy_Factory "-ORBConcurrency thread-per-connection" 静态 Client_Strategy_Factory "-ORBWaitStrategy rw -ORBTransportMuxStrategy 独占 -ORBConnectStrategy 阻塞 -ORBConnectionHandlerCleanup 1" 静态 Resource_Factory "-ORBflushingStrategy 阻塞"

我从TAO的网站复制了上述选项,每个连接一个线程,认为错误可能是由于达到线程限制引起的。此外,我尝试在 E1 和 E2 的两侧都将 -ORBConcurrency thread-per-connection 作为命令行选项。这会导致某些 CORBA 异常无法启动服务器。以下是我用于运行我的系统的命令,它给出了 ServerRequest::tao_send_reply_exception,一段时间后无法发送异常回复消息:

tao_cosnaming -ORBEndPoint iiop:localhost:12345 -ORBDaemon // 启动名称服务 tao_cosnotification -ORBDebugLevel 10 -ORBInitRef NameService=corbaloc:iiop:localhost:12345/NameService -ORBDaemon // 启动通知服务 ./E1 corbaloc:iiop:localhost: 12345/NameService // 启动 E1 ./E2 corbaloc:iiop:localhost:12345/NameService // 启动 E2

谁能建议这里发生了什么以及如何处理这个问题?

0 投票
0 回答
554 浏览

sequence - Corba 序列由于 stringstream.str().c_str() 错误导致的任何提取失败

IDL 文件定义了一个序列,其元素是 ICPParams 类型。

我的示例代码(它是在 VS08 中使用 ACE_TAO 开发的)如下:

上面的代码尝试演示将一个 ICPParams 序列 project::params 插入到任何对象中,然后从该对象中提取所有值。ICPParams 的一个成员也是任何对象,我只是在其中插入一个字符串。

这里的两个问题是:

  • 除了使用 dynamicAny 或 get_buffer 之外,还有其他方法可以提取序列信息吗?

  • 任何类型的 ICPParams::params 值的执行结果错误。这是输出:

显然,str 符合

在插入部分的循环中指向一个空字符串(它应该是非空白的)。我无法解释为什么

xxxx.str().c_str() => 正确的字符串

str => 空白..

有人可以帮忙吗?提前致谢。


在使用 C++ 进行高级 CORBA 编程中使用序列的 * 规则中的两条:

1-避免对复杂类型的元素使用数据构造函数。2- 除非确实需要,否则不要使用数据构造函数或缓冲区操作函数。

从 Any 中提取值后,我尝试使用以下方法获取第 i 个元素:

代替

但是编译失败,您可以在评论中看到错误消息。

0 投票
2 回答
943 浏览

corba - 使用 CORBA/TAO 输出参数进行内存管理

假设我有一个 IDL 函数:

当我从生成的代码继承时,签名将如下所示:

我的第一个问题是,我必须在客户端传递什么?我试过:

但这不起作用,因为 Data_out 没有默认构造函数。然后我尝试了:

但现在编译器无法从 IDL::Data* 转换为 IDL::Data_out。以下工作,但看起来过于复杂,因此不正确:

我该如何从那里开始?在执行 foo() 期间,servant 将在某些时候分配一个数据对象,如下所示:

在客户端使用它之后,我将删除该对象,如下所示:

这至少从它的想法上是正确的还是有不同的工作方式?将不胜感激一些帮助或指向以易于理解的方式描述的文档。

0 投票
1 回答
68 浏览

memory-management - 静态内存是否由不同的线程清理?

所以,在我的项目中发生的事情如下:

我有一个以通常方式定义的单例:

在它的构造函数中,这个单例对象初始化了一个 CORBA ORB 并开始在一个单独的(提升)线程(包装器)中运行它,类似于:

现在破坏 CorbaController 时的正常行为是它在其析构函数中调用 ORB 上的 shutdown,然后 run 方法跳出 orb.run() 并完成单独的线程。但是,这仅在 CorbaController 被显式删除或定义为局部或类变量时才有效,然后在某些时候超出范围。但是,如果我依赖于在程序结束时清理单例的静态变量,则 orb.shutdown() 会死锁,因为 ACE/TAO 库无法在 ORB 关闭时破坏某些对象上的信号量。

有人知道这里可能存在什么问题吗?这可能是一个线程问题,即构造单例的线程(并且还运行我的应用程序的主要功能)与清理静态内存实例的线程不同吗?

0 投票
1 回答
230 浏览

corba - 如何将 TAO 事件通道绑定到特定的命名服务

假设我已经启动了一个命名服务并关闭了多播以监听特定的 ip:port 配置,我如何将事件通道绑定到这个命名服务?我认为这必须是可能的,因为如果网络中有多个事件通道,如何确定在哪个名称服务上绑定事件通道?

它可以在打开多播的情况下正常工作,通道自行找到命名服务的位置。但是我还没有找到一种方法让事件服务在启动时知道它。这甚至可以直接从代码中完成吗?

0 投票
1 回答
276 浏览

asynchronous - Corba AMI 回调从未被调用

我对 CORBA 异步调用 (AMI) 有一个问题。问题是客户端的回调永远不会被调用。

我简化了 ACE_Wrappers\TAO\examples\Content_Server\AMI_Observer 中的示例。IDL:

在我的代码中,AMI 调用仅适用于 ContentFactory。代码是:

指针 request_count 被传递给 MyServer_AMI_ContentFactoryHandler_i 构造并且其指向的值增加。一旦调用了 AMI 回调 register_callback,指向的 request_count 值就会减小,这反过来又会完成 main 函数中的 while 循环。

服务端的 register_callback 只是休眠 5 秒,然后返回一个 hello 字符串。此代码编译正常,但从未调用 MyServer_AMI_ContentFactoryHandler_i::register_callback。在调试过程中,orb->work_pending() 一直返回 false..

我还将我的代码与 AMI_Observer 和页面上的原始示例进行了比较:http ://www.dre.vanderbilt.edu/~schmidt/DOC_ROOT/TAO/docs/tutorials/Quoter/AMI/index.html 。这个问题花了我一天的时间,我迷路了..

谢谢,如果你能帮助指出我的错误......

///////////////////////////////////////// /////////////////

更新

调试级别为 10 的日志:

我对TAO日志不太熟悉,但是根据上面的日志,似乎服务器没有响应..

////////////////////////////////// 更新:现在找出根本原因。 。 服务员

将return语句更改为:

该示例现在有效..

0 投票
1 回答
1272 浏览

corba - 常数 TAO CORBA IOR

如何配置 TAO corba 服务器,以便从 object_to_string 生成的此服务器的 IOR 字符串是恒定的?

每次服务器重新启动后,从 object_to_string 生成的 IOR 字符串都会发生变化。这很不方便,因为客户端必须通过重新加载 IOR 文件或访问命名服务来更新其缓存的服务器 IOR 字符串。因此,如果服务器可以生成一个恒定的 IOR 字符串,无论它重新启动多少次,这将是有用的。

我的 corba 服务器基于 ACE+TAO,我记得 TAO 支持常量 IOR 字符串:每次生成的 IOR 字符串都是相同的,解决方案是为服务器添加一些配置。但我现在不记得这些配置了。

=============================================== 更新:

在 ACE_wrappers/TAO/tests/POA/Persistent_ID/server.cpp 中,我添加了一个名为 testUniqe() 的新函数,它类似于 creatPOA 方法。而更新文件内容为:

问题是输出服务器 IOR 在重新启动后仍然不同。我还将这段代码与第 412 页(高级 Corba 编程)中的代码进行了比较,但仍然失败..

//////////////////////////////

更新:

使用“server -ORBListenEndpoints iiop://:1234 > /tmp/ior1”,生成的两个 IOR 是:

IOR:010000000d00000049444c3a746573743a312e300000000001000000000000007400000001010200150000007368696a69652d5468696e6b5061642d543431300000d2041b00000014010f0052535453f60054c6f80c000000000001000000010000000002000000000000000800000001000000004f41540100000018000000010000000100010001000000010001050901010000000000 IOR:010000000d00000049444c3a746573743a312e300000000001000000000000007400000001010200150000007368696a69652d5468696e6b5061642d543431300000d2041b00000014010f0052535468f60054da280a000000000001000000010000000002000000000000000800000001000000004f41540100000018000000010000000100010001000000010001050901010000000000

ior1 和 ior2 的 tao_catior 的结果:

差异结果是:

类似的差异结果是:

区别在于 ObjectKey。

============================================

更新:

我没有使用上面的代码,而是找到了一个更好的解决方案,它使用了使用 NamingService 和 TAO/examples/Simple 的助手 TAO_ORB_Manager。TAO_ORB_Manager 封装 API 并生成持久性 IOR,如 Simple.cpp 中的示例代码:

这是 TAO_ORB_Manager 的一些描述:

构建后,我可以使用 -ORBListenEndpoints iiop://localhost:2809 选项获得我想要的东西。感谢@Johnny Willemsen 的帮助

0 投票
1 回答
610 浏览

multithreading - 当 corba 服务器进程停止时,客户端调用被阻止

这里的问题是 Corba 调用不会返回,并且当 corba 服务器停止时不会抛出任何异常。在我的例子中,只有一个多线程 corba 代理(窗口),监控一个后端 corba 服务器。corba 服务器的 IDL 为:

代理通过 echo heartbeat 调用检查后端的运行状况。如果在 echo 中抛出 corba 异常,代理会将后端分类为 DOWN 状态。此过程在大多数情况下都有效,但后端已关闭。

1)如果我关闭后端机器,回显会立即抛出异常。

2)如果我停止后端corba进程,回显调用挂起并且没有返回,而不是客户端异常。客户不能再去未来了。

以上两种情况均未发生运行调用。

带有“ORBDebugLevel 10”的日志显示代理完成了回显请求发送,并且 netstat 显示尽管后端 corba 服务器进程已停止,但代理和后端机器之间存在一个 TCP 连接(我承认后端服务器无序或编程错误)。但是作为代理,如果它既不返回也不抛出异常,如何避免被个别调用失败阻塞?

以下是两个日志,采用默认策略:

使用静态 Client_Strategy_Factory "-ORBTransportMuxStrategy EXCLUSIVE"

我知道这可能是线程和 ORB 模型问题。我尝试了一些客户策略:

静态 Client_Strategy_Factory "-ORBTransportMuxStrategy EXCLUSIVE -ORBClientConnectionHandler RW"

这可以减少问题发生的频率,但不能完全解决问题。


这与我 6 年前的经历相似。在这种情况下,调用会在客户端的一个线程中发送。在收到响应之前,由于反应器模式,该线程被重用于发送另一个 corba 请求。这个案例似乎与这里的案例帖子不同,因为它只是一个 corba 调用。我对线程栈的印象有点像:

0 投票
1 回答
633 浏览

c++ - 为什么在尝试编译我的第一个 CORBA 服务器(使用 ACE/TAO ORB 实现)时会出现链接器错误?

尝试实现我的第一个 CORBA 服务器(使用 ACE/TAO ORB 实现)我使用以下 makefile:

我在编译时收到以下错误:

整个编译日志: http: //pastebin.com/0KpLXixw

我在我的 CentOS 6.6 上使用这个 repo中的ACE (6.2.8) 和 TAO(2.2.8)

0 投票
1 回答
488 浏览

c++ - Solaris 程序在空闲时因 SIGABRT 而崩溃

我在 solaris 中的一个程序突然崩溃,在 SIGABRT 的日志中没有任何痕迹

以下是核心转储

代码似乎没有问题,因为进程在空闲时突然崩溃。

然后我决定查看系统日志,发现以下消息

知道为什么会这样吗?