【问题标题】:Custom IDL generation with JACORB maven compiler使用 JACORB maven 编译器生成自定义 IDL
【发布时间】:2011-09-11 15:21:56
【问题描述】:

我需要将 Java 系统与旧版 C++ 系统集成。这两个系统通过 CORBA 进行通信。 由于 Java 系统在 JBoss 上运行,我们使用 JacORB。

要从 .idl 文件生成 java 存根,我们使用 maven-idl-compiler 插件(使用 JacORB)

org.codehaus.mojo idlj-maven-插件 org.jacorb jacorb-idl 编译器 2.2.3 假如

一切正常,但我想修改存根的生成方式(更改方法、类等的名称)。有什么办法吗?

【问题讨论】:

  • 为什么要更改生成的代码?如果一切正常,您要解决什么问题?

标签: java c++ corba jacorb


【解决方案1】:

通常人们在这种情况下会使用外观模式。

https://en.wikipedia.org/wiki/Facade_pattern

像往常一样创建 IDL,然后创建另一个有效地包装 IDL 类但只是将调用传递给 IDL 接口的类。使用此方法,您可以为可在程序中使用的方法创建新名称。如果您在某些情况下总是传递相同的参数,您也有机会简化方法。

另一个优点是,如果 IDL 作者决定重命名他们的方法之一或更改参数,您将获得一定程度的保护,因为您没有直接在程序中使用他们的接口。

【讨论】:

    【解决方案2】:

    一切正常,但我想修改存根的生成方式(更改方法、类等的名称)。有什么办法吗?

    这是不可能的。

    服务器骨架和客户端存根由 Corba 在您选择的实现中生成。它们基本上包含 Marshaller 和 Unmarshaller 以在您干扰分布式对象时处理 ORB 对象参数。

    所有这些代码都与 CORBA 使用的 IDL 语言高度耦合,因为生成依赖于您提供的 IDL。

    因此,您不能直接修改存根或骨架,这是没有意义的,因为 IDL 语言用于确保所有分布式对象之间的通用接口,无论实现语言如何。

    但是,您始终可以修改 IDL 本身以使其适应您的需要。

    【讨论】:

    • 我基本得出了同样的结论,放弃了修改生成的stub的想法。最后我调整了 idl 并提供了一些包装器来隐藏一些自动生成的东西。这不是我正在寻找的解决方案,但我想这是我可以用那个特定版本的 JacORB 做的所有事情(我无法更改它)。感谢您的回答。
    • @MarcinKozłowicz 哈哈,所以你说的是你用了我的答案!
    【解决方案3】:

    您可以修改 $JACORB_HOME/src/org/jacorb/idl 下的代码以生成您想要的任何内容。看看 OpDecl.java 中的 printStreamBody 方法,看看生成代码的例子,看起来很容易理解和修改。

    【讨论】:

      猜你喜欢
      • 2011-04-23
      • 2016-02-26
      • 1970-01-01
      • 2010-10-03
      • 2021-06-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2010-11-28
      相关资源
      最近更新 更多