【问题标题】:Get access to the ORB into an implementation?将 ORB 访问到实现中?
【发布时间】:2012-04-13 01:31:15
【问题描述】:

我有一个棘手的问题。作为 CORBA 的新手,我无法摆脱它。

如何从另一个实现实例化一个实现对象?

通常,如果我有一个接口 A。我会创建一个 A_Impl 类(在 A_Impl.java 文件中),从 idl 生成的 A_POA 类扩展。

然后,在服务器端我会做这样的事情:

AImpl  my_a_impl = new A_Impl ();
org.omg.CORBA.Object ref = orb.activate_object(my_a_impl);
A my_a_object = A.narrow(ref);

但是当另一个对象 B 的方法之一需要返回 A 时怎么办?

在我的 B_impl 类中,我无法访问球体,因此无法使用 activate_object 方法获取对我的对象的引用。

然后我怎样才能返回这样的对象?

任何帮助将不胜感激。 提前致谢!

【问题讨论】:

  • 您应该了解 CORBA 中仆人和引用之间的区别。这是一个非常重要的区别,将帮助您编写服务器代码。这里有两个很好的资源:@​​987654321@ 和 documentation.progress.com/output/Iona/orbix/6.3/develop/…
  • 谢谢!我很难在 CORBA online 上找到一些超越“教程”或“入门”的好东西。我希望这些是其中的一些:)

标签: java corba


【解决方案1】:

CORBA 已经提供了一个可用于获取现有 ORB 引用的函数 - ORB_init()。对于大多数 ORB,该函数的行为类似于单例,并将返回一个现有的 ORB 对象,假设您每次调用它时使用相同的 ORB ID。

【讨论】:

  • 永远不要使用ORB.init() 函数来创建对象。正如文档所说“它返回的 ORB 受到限制,因此它只能用作 TypeCode 对象的工厂”。
  • ORB_init() 用于创建 ORB 对象,如果它们不存在则查找它们。我不是说他应该用它来创建他的仆人对象(这是他自己的责任)。
  • 所以它不能用orb.activate_object(激活一个对象。
  • 当然可以,但是他必须使用 ORB 引用来获取 POA 引用才能激活他的对象。或者,他可以使用_this() 进行隐式激活。
【解决方案2】:

在单例类中引用当前活动的球体,您可以从非常对象*_Impl 访问它。

【讨论】:

    【解决方案3】:

    似乎(出于我无法理解的原因)构造函数不是由 idl 生成的。 创建构造函数允许我简单地将对象作为引用传递,并使它们对我的类可见。 是的...就这么简单:)

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-22
      • 2017-03-09
      • 1970-01-01
      • 2012-04-24
      • 2013-07-22
      • 2011-08-30
      相关资源
      最近更新 更多