使用 JACORB maven 编译器生成自定义 IDL

发布于 2024-11-14 12:51:28 字数 322 浏览 4 评论 0原文

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

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

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

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

I need to integrate Java system with legacy C++ system. Those two system communicate through CORBA.
Since Java system runs on JBoss we use JacORB.

To generate java stubs from .idl files we use maven-idl-compiler plugin (using JacORB)

org.codehaus.mojo
idlj-maven-plugin

org.jacorb
jacorb-idl-compiler
2.2.3
provided

Everything works fine but I would like to modify the way stubs are being generates (changes names of methods,classes etc). Is there any way to do it?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

又爬满兰若 2024-11-21 12:51:28

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

这是不可能的。

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

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

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

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

Everything works fine but I would like to modify the way stubs are being generates (changes names of methods,classes etc). Is there any way to do it?

This is not possible.

The Server Skeleton and the Client Stub are generated by Corba in the implementation you have chosen. They basically contains Marshaller and Unmarshaller to handle ORB object parameters when you interfere with distributed objects.

All this code is highly coupled with the IDL language used by CORBA, since the generation is dependent on the IDL you provided.

Thus, you cannot modify the stub nor the skeleton directly, that wouldn't make sense since the IDL language is there to ensure a common interface between all distributed objects, no matter the implementation language.

However, you can always modify the IDL itself to adapt it to your needs.

━╋う一瞬間旳綻放 2024-11-21 12:51:28

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

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

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

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

Typically what people do in this situation is to use the Façade Pattern.

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

Create the IDL as normal then create another class that effectively wraps the IDL class but just passes the calls down to the IDL interface. Using this method you can create new names for the method which you can use in your program. You also have the opportunity to simplify methods if you for example always pass the same parameters in certain situations.

Another advantage is that if the IDL authors decided to rename one of their methods or alter the parameters you have a certain amount of protection because you are not using their interface directly in your program.

提笔书几行 2024-11-21 12:51:28

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

You could modify the code under $JACORB_HOME/src/org/jacorb/idl to generate whatever you want. Take a look at the printStreamBody method in OpDecl.java for an example of generation code that looks easy to understand and modify.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文