【问题标题】:Porting java interface to IDL将 java 接口移植到 IDL
【发布时间】:2011-05-13 05:14:18
【问题描述】:

我有一个 Java RMI 应用程序,我想移植到使用 CORBA。为此,我必须将远程接口定义从 java 更改为 IDL,但我不确定该怎么做。

目前,java 接口中的一种方法的参数不是预定义的数据类型(如字符串、int 等),而是我自己定义的。在 java 接口中你可以这样定义它:

public int doSomething(MyObject o);

在 RMI 实现中,可以传递对象,因为客户端和服务器在它们的构建路径上都有 MyObject 类的定义。

所以我想知道如果我将 MyObject 文件放在客户端和服务器上,然后将 IDL 中的方法定义更改为类似这样的内容,它是否会起作用:

long doSomething(in MyObject o);

或者我是否需要在 IDL 中也以某种方式定义此类及其方法?

【问题讨论】:

    标签: java interface corba idl


    【解决方案1】:

    你需要在你的idl模块中定义好MyObject。在客户端和服务器的构建路径中定义类是不够的。

    【讨论】:

    • 不,您只需在 idl 模块中定义一个接口,然后 MyObject 将实现,您的方法签名变为 doSomething(MyInterface ) 等...
    • 在这个 MyInterface 中,我需要只定义在服务器上使用的对象的方法还是所有方法?我也必须让这个对象类在java中实现这个接口吗?
    • 您在界面中公开的内容是一个设计决策,但至少您需要接收实现的类所需的一切。除非您将其转换为 MyObject,然后您将获得 MyObject 公开的所有内容。是的,你必须让 Myobject 实现 MyInterface
    • 谢谢,我想我现在明白了。
    • 没问题 :),我很想知道您为什么要从 RMI 转到 CORBA?实际上,出于多种原因,我进行了相反的转换(CORBA 到 RMI),更多的开发人员熟悉 RMI,性能,它是一个全 Java 系统,因此它也降低了 CORBA 的优势。是什么原因让你转向另一种方式(与 java 以外的语言交互?)
    【解决方案2】:

    rmic -idl 会为你做到这一点。请参阅工具文档。

    【讨论】:

    • 是的,看起来那是最简单的方法。不过,已经手动完成了 idl。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-05-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多