2011-06-09 46 views
1

我需要將Java系統與傳統C++系統集成。這兩個系統通過CORBA進行通信。 由於Java系統在JBoss上運行,我們使用JacORB。使用JACORB maven編譯器生成自定義IDL

爲了從我們用maven-IDL編譯器插件(使用JacORB)

org.codehaus.mojo IDLJ - Maven的插件 org.jacorb jacorb-IDL編譯的.idl文件Java存根 2.2.3 提供

一切工作正常,但我想修改存根正在方式產生(改變方法,類等名稱)。有什麼辦法可以做到嗎?

+0

爲什麼要更改生成的代碼?如果一切正常,你想解決什麼問題? – 2011-06-10 04:51:59

回答

1

一切正常,但我想修改正在生成的方式存根(更改方法,類等名稱)。有什麼辦法可以做到嗎?

這是不可能的。

服務器骨架和客戶端存根由Corba在您選擇的實現中生成。當你干涉分佈式對象時,它們基本上包含Marshaller和Unmarshaller來處理ORB對象參數。

所有這些代碼都與CORBA使用的IDL語言高度耦合,因爲這一代依賴於您提供的IDL。因此,您不能直接修改存根或骨架,這是沒有意義的,因爲IDL語言是爲了確保所有分佈式對象之間的通用接口,而不管其實現語言如何。

但是,您始終可以修改IDL本身以適應您的需求。

+1

我基本上達到了同樣的結論,並放棄了修改生成的存根的想法。最後我調整了idl並提供了一些包裝以隱藏一些自動生成的東西。這並不是我尋找的解決方案,但我想這是我可以用特定版本的JacORB做的(我無法改變它)。感謝你的回答。 – 2015-10-23 13:00:41

+0

@MarcinKozłowicz哈哈,所以你說的是你用我的答案! – 2016-02-29 00:02:56

0

您可以修改$ JACORB_HOME/src/org/jacorb/idl下的代碼來生成您想要的任何內容。查看OpDecl.java中的printStreamBody方法,看看容易理解和修改的代碼示例。

1

通常情況下,人們在這種情況下所做的就是使用立面圖案。

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

創建IDL正常然後創建了另一類有效地包裝了IDL類,但只是向下傳遞到IDL接口的調用。使用此方法,您可以爲您可以在程序中使用的方法創建新名稱。如果您在某些情況下總是傳遞相同的參數,您還有機會簡化方法。

另一個優點是,如果IDL作者決定重命名他們的某個方法或更改參數,則由於您沒有在程序中直接使用它們的接口,所以您有一定的保護。