在OSGi中重用bundle

时间:2013-10-05 03:38:31

标签: osgi osgi-bundle

我们正在开发一个包含OSGi包的网站(Adobe CQ / Apache Sling / Felix和Maven)。有2个捆绑:1)Webapp 2)Commmon。
Common bundle包含Webapp开发常用的模块,如加密,分页,排序等 捆绑包部署在CQ / OSGi容器中,如下所示:

OSGi parent class loader ---|--- Webapp
                            |--- Commmon

Common bundle包含一些功能,用于维护配置(类似于log4j中的PropertyConfigurator),连接池等作为静态数据。
现在又出现了另一个网站,我们想要1)重新使用Commmon包2)在同一个CQ容器中部署新的网络应用程序。
新的部署布局可以是:

OSGi parent class loader ---|--- Webapp
                            |--- New web app
                            |--- Commmon

如果我们使用上述部署策略,Common bundle中的静态数据将在2个Web应用程序之间共享并创建重叠(因为Common bundle加载在1个类加载器中,该加载器与2个Web应用程序的类加载器共享)。登记/> 什么是重用Common bundle的好架构?它应该嵌入在Webapp和新的Web应用程序中(因此每个Web应用程序都将在其类加载器中加载自己的Common bundle副本)?如果是的话,哪个Maven插件适合这个(我使用“maven-bundle-plugin”和“wrap”目标;但是构建日志有一个警告消息,不鼓励它使用)?

1 个答案:

答案 0 :(得分:0)

最好的解决方案是删除静态并继续使用公共库作为捆绑包。

如果无法做到这一点,那么您可以将maven bundle插件与webapp包一起使用。只需在webapp的maven bundle配置中定义要嵌入为私有的公共包。然后将嵌入这些类。