2

我们正在构建一个产品,它使用 apache hadoop 和 hbase 框架来处理我们的一些大数据需求。我们还使用 Oracle 来满足我们的报告要求。我们热衷于采用 OSGi 捆绑软件的方式,以利用 OSGi 容器提供的远程部署、服务管理和松散耦合的打包功能。

我们在这方面有几个疑问:

  1. 当涉及到我们自己的 Java 应用程序时,我们现在知道如何从中创建 OSGi 包并将它们部署在 OSGi 容器上。但是我们如何处理具有集群架构的基于 Java 的 3PP,例如 HBase/Hadoop?我们看到 Fuse Fabric 创建了一个 Hadoop(实际上只有 HDFS 而不是 Map Reduce)包,但一般来说,您如何为 3PP 创建包?

  2. 我们如何处理非基于 Java 的 3PP,例如 Oracle。我们应该为它创建一个 OSGi 包并部署在 OSGi 上,还是应该在 OSGi 之外安装这些 3PP 并编写一些通过 OSGi 触发的监视脚本来跟踪这些 3PP 的状态?该领域的最佳实践是什么?

  3. 是否所有通过 OSGi 容器(如 Karaf)启动的包都在容器的同一个 JVM 中运行?我们的一些应用程序和 3PP 非常庞大,如果它们都在单个 JVM 中运行,我们可能会遇到堆/GC 问题。这里有哪些最佳实践?

感谢和问候斯坎达

4

2 回答 2

0
  1. 从非 OSGi 库创建包可以像使用适当的清单重新打包它一样简单(有用于此的工具,见下文),但它也可能变得非常困难。OSGi 有一个特殊的类加载模型,许多执行动态类加载的 Java EE 库不能很好地适应它。

  2. 我不确定你在这里的意思。从理论上讲,OSGi 支持使用Bundle-NativeCodemanifest-header 加载本机库,但我没有这方面的经验。

  3. 通常,所有捆绑包都在同一虚拟机中运行。不过,Karaf 支持通过Cellar进行集群,不过我不知道其他容器。

用于包装 3rd 方库的工具

一般来说,您可以使用bnd它(在自动生成 OSGi 捆绑清单时选择的工具)。PAX-URL提供wrap协议处理程序,默认情况下存在于 Karaf 中。使用它,包装一个库可以很简单(例如,从 Karaf 命令行或功能描述符):

wrap:file:path/to/library
于 2012-11-26T14:20:43.097 回答
0

Oracle 和大多数其他数据库库的情况很简单。您可以使用 pax url 的 wrap 协议。在幕后,它使用带有默认选项的 bnd。我有一个在 Apache Karaf 中使用 dbs的教程。

一般来说,从第三方库制作捆绑包的范围从简单到相当复杂。这主要取决于 lib 使用了多少脏类加载技巧。在您尝试自己捆绑东西之前,您应该查看是否有现成的捆绑包。今天的大多数库要么直接作为捆绑包提供,要么已经作为来自某些来源的捆绑包提供。例如 servicemix 项目创建了很多包。您可以在那里的用户列表上询问是否有可用的东西。

于 2012-11-27T07:51:03.433 回答