我们需要使用C ++代码中的Java库。我的想法是,如果我们可以为Java RMI(理想情况下使用某些框架或向导)构建C ++客户端,那么我们可以将Java lib作为单独的服务器运行。这似乎比尝试在C ++应用程序中运行Java VM更简洁。
或者,如果您对如何使用C ++中的Java有任何其他想法,我会很高兴听到。我们在Linux上工作。
非常感谢,
大卫
答案 0 :(得分:3)
RMI与JVM(和Java序列化)密切相关,因此这是不合理的。除非C ++客户端包含JVM。
CORBA是明显独立于平台的等价物。这是一个委员会设计,现在被认为是非常不公平的。 WS- / JAX-WS是一种具有大量XML的现代等价物,但可能被认为是对CORBA的不良尝试。 REST是对轻量级WS的尝试 - ,但是看到Joel的Stackoverflow DevDay咆哮声称“简单”。
你可以去旧学校,只需通过TCP / IP(或管道)推送字节。或者如果是本地的,只需要exec
C ++程序。或者使用本机接口:JNI内置于JRE中,或者JNA是顶层的更好的层。
答案 1 :(得分:2)
不要打扰RMI。如果您愿意将Java应用程序作为单独的服务器,请让您的C ++客户端通过JMS(Java Messaging Service)进行通信。 ActiveMQ是一个免费的JMS消息代理实现,它提供嵌入式服务以及C++ client libraries。 JMS协议很容易使用(至少从Java开始)。它可能没有REST那么灵活,但它可能更容易实现。
答案 2 :(得分:1)
JNI是解决C / C ++到Java集成问题的预期解决方案。这并不困难。
对于较大粒度的交互或可通过网络访问消息队列的远程交互,消息队列更好。
CORBA和RMI也是网络访问机制。
根据您的描述,您不希望如此。您希望在C ++中使用Java库,为此,您使用JNI。
How to start the JVM and invoke a Java method, from C++(JDK doc)