【发布时间】:2011-08-15 18:42:10
【问题描述】:
我正在扩展一个使用 C++ 语言启动的项目。现在我正在开发项目的一个新部分。它将基于 OSGi (Java)。 现在我想知道有没有什么稳定的方法可以用新的部分组合旧项目?是否有任何步骤可以将 C++ 对象转换为 OSGi 包(或具有类似结构和元数据)?或者有什么方法可以让他们之间进行交流?
【问题讨论】:
我正在扩展一个使用 C++ 语言启动的项目。现在我正在开发项目的一个新部分。它将基于 OSGi (Java)。 现在我想知道有没有什么稳定的方法可以用新的部分组合旧项目?是否有任何步骤可以将 C++ 对象转换为 OSGi 包(或具有类似结构和元数据)?或者有什么方法可以让他们之间进行交流?
【问题讨论】:
虽然它不是 C++,而是纯 C,但您可以查看Apache Celix。 Apache Celix 是用 C 语言实现的 OSGi 规范,不依赖于任何 Java 实现等。目前Celix仍处于孵化阶段。
关于 C 和 Java 之间的通信,Celix 的(短期)待办事项列表中的一项是 OSGi 远程服务的实现。我们打算使用 hessian 作为实现,因为它已经存在于许多其他语言中,相对简单、二进制和紧凑。这为分布式系统以及 C - Java 通信提供了解决方案。
【讨论】:
我认为 Java 原生接口 JNI 没有任何替代品。
【讨论】:
您可以查看BUNDLE_NATIVECODE 标头和core specification 中的相关描述(第3.10 节)。尽管如此,你还是需要使用 JNI 来创建很多接口。
【讨论】:
仅供参考 - 对于 C Java 通信,Paremus 的 OSGi 远程服务实现(参见 Nimble)支持 Avro 分发提供程序。
【讨论】: