我正在编写一个在OSGI环境中运行的应用程序。现在,我想提取一些代码并将其放在单独的bundle/jar文件中,以便在其他应用程序(OSGI或非OSGI)中重用它。
我的目标是删除对OSGI环境类的任何依赖,因为它也应该在其他没有各种OSGI框架的所有罐的应用程序中运行(例如:春分)。但同时,如果应用程序是一个OSGI应用程序,我想在OSGI环境中注册一个OSGI服务。
我已经分离了代码,唯一剩下的依赖OSGI的代码是目前我的Activator类,它将一些类注册为OSGI服务:
context.registerService(MyServiceInterface.class.getName(), new MyServiceImpl(), new Hashtable());
为了消除依赖,我考虑以下几点:
最后我有了我的包裹。只有清单的jar。mf文件,使其具备OSGI功能,但现在已经没有依赖于OSGI框架类的代码了。我有另一个bundle,它只属于导入bundle1的当前应用程序。jar,其唯一目的是注册MyService。使用激活器在OSGI容器上初始化。
另一种方法是使用blueprint。至少在简单的情况下,它允许对OSGi完全没有依赖关系。对于实际情况,您通常至少需要一些OSGiAPI,但在非OSGi情况下,让它们处于非活动状态是没有问题的。
你也可以试试PojoSR。它允许在OSGi之外使用激活器和OSGi服务。我们开始在ApacheCamel中使用它来测试OSGi代码。
在大多数情况下,您可以在没有Activator的情况下发布服务。看看OSGI ComUnity Wiki和Equinox的例子。
为什么不把激活类留在你的捆绑包里。在非OSGi环境中运行时,不会调用激活器类。在OSGi环境中运行时,它会。将OSGi依赖隔离到激活器是一个很好的策略。
问题内容: 是否可以在OSGi应用程序中使用非osgi库? 例如,我正在开发一个基于语义的搜索引擎,并且正在为其使用第三方自然语言处理库(http://wiki.opencog.org/w/RelEx_Dependency_Relationship_Extractor)。 是否可以在OSGi应用程序中连接不支持OSGi(作为几个jar文件)的库? 问题答案: 如先前答案中所写,如果要在包中使用其他
我们面临的最大问题是,我们无法找出如何构造项目C,以使其在项目A和B中都能正常工作。在项目A中,我们希望maven能像往常一样工作,并根据需要降低依赖项。但我们也希望在项目B(也许结合Nexus+Tycho??)中实现该功能。 我们应该如何解决这个问题。我还没有找到一个好的解决办法如何做这件事。我已经在maven中尝试了apache felix捆绑插件,但不能让它像我想要的那样工作。这是正确的解决
我试图构建一个使用嵌入式OrientDB(当前为“Memory:”)图形数据库的应用程序。我用的是OrientDB2.2 orientdb-graphdb不应该依赖于一个合适的包,或者包括并导出类吗?
问题内容: 首先一些背景: 我正在研究一些基于Apache Sling的 webapp原型代码,该代码基于OSGI并在Apache Felix上运行。尽管我认为到目前为止我已经掌握了大多数概念,但我对OSGI还是比较陌生。但是,令我感到困惑的是,我找不到一个“完整的”依赖项注入(DI)框架。我已经使用声明式服务(DS)成功地使用了基本的DI。但是我的理解是DS可以用作参考- 我该如何处理?-OSG
问题内容: 我有一个引用许多开源库的项目,其中一些是新的,有些不是那么新。也就是说,它们都很稳定,我希望坚持使用我选择的版本,直到我有时间迁移到较新的版本为止(我昨天测试了hsqldb 2.0,并且其中包含许多api更改)。 我希望嵌入的库之一是Jasper Reports,但众所周知,它附带了许多支持jar文件的程序,我只需要一部分(已知的)jar文件,因此我打算自定义捆绑所有程序包我的依存库。
问题内容: 是什么使应用程序功能的模块/服务/位成为OSGi模块的特别好的候选者? 我对在我的应用程序中使用OSGi感兴趣。我们是一家Java商店,我们广泛使用Spring,因此我倾向于将Spring动态模块用于OSGi(tm)服务平台。我正在寻找一种将OSGi一点点集成到应用程序中作为试用的好方法。这里有人使用过此技术或类似的OSGi技术吗?有陷阱吗? @Nicolas-谢谢,我已经看过那个了。