在OSGi的规范详细介绍了WAB(Web存档包)格式。
而大同的Web提供了WAB /
WAR大力支持的webapps(PAX Web上的春分,菲利克斯等运行正常)
使用pax web,您可以通过ServletContext获得BundleContext,例如:
BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext");对于您提到的用户驱动的可插拔性,建议您为插件包提供一些服务接口,以使其实现,并在您的Web应用程序中使用ServiceTracker监听其注册(除非您使用的是声明式服务)。您还可以轻松地从上载servlet
安装捆绑软件。
我猜上载插件的用户必须先登录并获得授权,所以此时会解决安全问题。
编辑:由于评论字段中的空间不足,因此在此处回复评论
抱歉,我误解了您的问题-
您有一个现有的webapp容器,并且想部署具有OSGi功能的WAR?如果是这样的话,那么既可以使用ServletBridge如其他人所说的或嵌入OSGi框架到你的战争(这是比较容易的,看到这个为例)。
您甚至可以通过尝试从ServletContext获取BundleContext来使其成为可选对象,如果返回的结果为null,则启动您自己的嵌入式框架。这样,它将在本机OSGi容器(例如Glassfish)或Java
EE应用服务器中运行。
否则,PaxWeb是HttpService和WebApp OSGi规范的实现,但是具有许多扩展使生活变得更轻松-但您可以将其部署到OSGi容器中。



