【问题标题】:CORBA: Can a CORBA IDL type be an attribute of another?CORBA:CORBA IDL 类型可以是另一个属性吗?
【发布时间】:2010-08-23 10:28:59
【问题描述】:

在我开始使用 CORBA 之前,我想知道一些事情。

在我看来很直观,您可以使用 IDL 类型作为另一个类型的属性,然后该属性的方法也会暴露给客户端应用程序(使用“.”)。

但这可能吗?

例如(对不起,我的 IDL 不好):

interface Car{ 
      attribute BrakePedal brakePedal; 
      //... 
}



//then.. (place above) 

interface BrakePedal{ 
      void press(); 
      //... 
} 

//... 

然后在客户端应用中,你可以这样做:myCar.brakePedal.press();

如果你不能做这些多层次的事情,CORBA 会显得很糟糕 对象接口。毕竟,现实世界的对象是多层次的,对吧?所以可以 有人让我放心并确认(或尝试,如果您已经设置了 CORBA)这是否确实有效? IDL 文档都没有在示例中明确显示这一点,这就是我担心的原因。谢谢!

【问题讨论】:

    标签: interface object corba idl


    【解决方案1】:

    声明一个属性在逻辑上等同于声明一对访问器函数,一个读取属性值,一个写入属性值(你也可以有readonly属性,在这种情况下你只会得到读取函数)。

    它确实出现在 CORBA 规范中。您可以将接口名称作为属性名称。我尝试将这样的 IDL 提供给omniORB 的 IDL 到 C++ 的翻译器,它并没有拒绝它。所以我认为是允许的。

    但是,我真的不确定您是否愿意在实践中这样做。大多数 CORBA 专家建议,如果要使用属性,则只使用 readonly 属性。对于这样的事情,我只需声明我自己的返回接口的函数。

    请注意,无论如何,在 C++ 映射中您无法真正实现您想要的语法;例如

    server->brakePedal()->press();   // major resource leak here
    

    brakePedal() 是返回 CORBA 对象引用的属性访问器函数。如果你立即在上面调用press(),你将泄漏对象引用。

    要做到这一点而不发生泄漏,您必须执行以下操作:

    BrakePedal_var brakePedal(server->brakePedal());
    brakePedal->press();
    

    在这种情况下,使用 C++ 映射(也许您可以在 Python 映射中),您根本无法从属性中获得所需的符号便利。正因为如此,而且我一般不喜欢属性,所以我只使用一个常规函数来返回 BrakePedal 接口。

    【讨论】:

    • 我认为您只是不了解属性。属性是函数的简写。在这种情况下,您正在调用“读取”函数。第二级调用发生在客户端。当您进行属性“读取”调用时,服务器完全不知道您将这样做,因此无法“优化”它。它不知道您将对该对象引用做什么。不,我认为我们不会看到新的主要版本的 CORBA。它目前仅用于少数专门的利基应用程序和遗留应用程序。
    【解决方案2】:

    您不了解分布式对象的一些重要内容:远程对象(无论是使用 CORBA、RMI、.NET 远程处理还是 Web 服务实现)与本地对象不同。对 CORBA 对象的调用成本高、速度慢,并且可能由于网络问题而失败。 object.attribute.method() 语法会让人很难看到在那一行上执行了两个不同的远程调用,并且很难处理可能发生的任何故障。

    【讨论】:

    • 哦,很有趣,谢谢!除了我打算纯粹在本地系统上使用它(新硬件设备与想要在同一台台式计算机上支持它的第 3 方应用程序交互,无论平台/语言如何)。还是绝对不行吗?? (请原谅我在阅读您的帖子时很愚蠢,但我不确定您是说这在网络中是不可取的,还是在 IDL 技术上实际上是不可能的)。
    • 这个答案应该是一个评论,因为你没有回答这个问题。 RPC 的整个想法是让它看起来像一个本地调用。
    猜你喜欢
    • 2010-10-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-28
    • 2014-12-09
    • 1970-01-01
    • 2012-02-04
    相关资源
    最近更新 更多