Python框架作为“Java + OSGi”组合的替代方案

时间:2012-08-28 15:57:02

标签: java c++ python osgi modularity

我正在考虑使用Python和C / C ++组合来替换我们SW架构中关于OSGi + Java + JNI + C / C ++的原始概念。

我绝对不需要替换像Felix或Equinox这样的OSGi框架的所有功能。

我的Python代码中真正需要的是:

  1. 应用程序层的模块化启用程序
  2. 基于组件的应用程序框架
  3. 服务/组件的中央注册局
  4. 非常轻量级的框架,它将在嵌入式设备上运行(尽管RAM已足够)
  5. 您能否就这样的Python框架提出建议?

2 个答案:

答案 0 :(得分:3)

我认为OSGi提供的很多内容与Java的体系结构密切相关:它的类加载器和类型安全性。实现服务注册表不应该太难,但以OSGi的准确性来管理它几乎是不可能的。显然,OSGi提供的多个命名空间的功能在Python中不起作用,除非您将模块移动到单独的进程中,这将需要更昂贵的进程间通信来进行模块间通信。您可以从基于本机的Apache Celix开始,但我对其实用程序有类似的疑虑,因为本机代码不提供有关其依赖项的大量信息。

更通用的解决方案是Universal OSGi的最初想法。在此模型中,您将保留OSGi框架,就像部署和管理一样。但是,您可以创建可以映射使用其他语言编写的包的处理程序包。例如。 Python处理程序或C ++本机。处理程序将本机服务注册表模型映射到OSGi服务注册表。由于OSGi服务注册表已正确处理,因此这非常容易实现。本机处理程序将映射bundle事件(如start / stop)以指示操作系统启动/停止本机代码。

答案 1 :(得分:1)

彼得已经提到过Apache Celix。可能值得一试。 Celix的一部分是远程服务管理(RSA)实现,可以在分布式环境中使用它。最终,这种实现还可以与基于Java的OSGi框架进行通信,使Celix + RSA成为JNI的替代方案。这具有额外的好处,即本机代码和Java代码不共享相同的进程。如果一端遇到问题,另一端仍然继续运行。

与Celix一致,你也可以看看Native-OSGi,这是Celix和一些类似C ++ OSGi的框架(CTK插件框架和nOSGi)的努力,为Native OSGi实现提供了一种组合方法。这包括定义良好的API,包格式,代码共享等内容。

考虑到你的要求,我认为Celix和Native-OSGi可能很合适。