我们正在开发一个包含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”目标;但是构建日志有一个警告消息,不鼓励它使用)?
答案 0 :(得分:0)
最好的解决方案是删除静态并继续使用公共库作为捆绑包。
如果无法做到这一点,那么您可以将maven bundle插件与webapp包一起使用。只需在webapp的maven bundle配置中定义要嵌入为私有的公共包。然后将嵌入这些类。