Java 嵌入式OSGi或应用程序包
我刚刚花了两天的时间阅读了所有OSGi的资料,我想我终于明白了 我现在正试图将其与现有应用程序集成,原因有很多,比如第三方插件、自动更新,更不用说SOA让我感到高兴了 我现在有一个我正在努力做的决定,那就是天气Java 嵌入式OSGi或应用程序包,java,osgi,Java,Osgi,我刚刚花了两天的时间阅读了所有OSGi的资料,我想我终于明白了 我现在正试图将其与现有应用程序集成,原因有很多,比如第三方插件、自动更新,更不用说SOA让我感到高兴了 我现在有一个我正在努力做的决定,那就是天气 我的整个应用程序应该成为默认安装在容器中的OSGi包;或 我的应用程序应该启动一个嵌入式OSGi容器,并为所有插入的服务与之交互 我更喜欢1,因为这让我可以轻松地更新应用程序,并且体系结构是一致的。当然,我希望必须将应用程序重构为许多更小的包。然而,2在短期内使事情变得容易,但在将来会变
我更喜欢1,因为这让我可以轻松地更新应用程序,并且体系结构是一致的。当然,我希望必须将应用程序重构为许多更小的包。然而,2在短期内使事情变得容易,但在将来会变得尴尬。您看过Spring应用服务器吗?这难道不允许您管理这些东西吗?对于选项1)您确实不希望将整个应用程序放在一个捆绑包中—您将失去OSGi的所有好处—但这实际上取决于应用程序的大小 这实际上取决于您希望在何处运行应用程序以及希望它执行的任务。此外,您可能还需要某种远程处理来访问公开的服务 在选项1)中,您需要启用某种http/servlet捆绑包(存在一个网桥) 在选项2)中,您的应用程序可以在应用程序服务器内部运行,所以您不必担心这一点 您想问自己的第一个问题是关于操作环境的。谁将运行该应用程序?他们需要/想要接受OSGi培训吗?他们对J2EE堆栈是否更满意 我认为最好的选择是保持选项的开放性,1)和2)之间没有真正的区别,但是OSGi框架的出发点是什么,无论是您的代码还是框架代码。应用程序本身(即构成应用程序的包将完全相同)
我的建议是不要过分担心OSGi运行时,而是从OSGi开发开始,没有什么可以阻止您开发“OSGi风格”并在标准JRE环境中运行。我认为您希望使用选项1,并让您的应用程序由一组包组成(大部分是开箱即用的)OSGi容器
此外,我同意Patrick的断言,即大部分代码不需要关心它是在OSGi中运行还是在普通JVM中运行。特别是在使用声明性服务时,代码中使用OSGi接口和机制的需求大大减少:只需向jar的META-INF中添加一些描述符文件即可。我宁愿选择选项2, 您的应用程序本质上不是一个捆绑包,而是一个应用程序。 如果希望增加OSGi值,请从应用程序中生成OSGi容器。
这样,在将来的某个日期,如果你决定离开OSGi,你可以用一种简单的方式来做。我绝对推荐1-该应用程序应该成为一个OSGi捆绑包,而不仅仅是因为易于更新。如果一半的代码在OSGi框架中,一半在外部,那么您必须为这两部分之间的通信构建一座桥梁;您还可能在类可见性方面存在问题 1还有很多好处,实现起来并不困难。我的建议如下:
- 将应用程序按您认为合理的数量分成多个模块李>
- 将您在单独的捆绑包中使用的任何外部/开源库分开。它们很可能是那些需要更频繁更新的部分,并且更新的时间与您自己的代码不同。这里更重要的是定义清晰的包依赖关系、包版本,并避免依赖于实现部分而不仅仅是接口
- 考虑一下你想向插件公开应用程序的哪些部分。然后用这些部分创建OSGi服务,即在OSGi注册表中发布接口。您不需要实现任何特定的东西——您可以发布任何Java对象。然后插件将使用regitry进行查找
- 插件也是如此——想想你想从插件中得到什么,定义插件可以实现和发布的相应接口,你的应用可以在注册表中查找
- 作为最后一个提示,请查看哪些捆绑包已经可用