FUD*_*FUD 9 java osgi web-applications java-ee
我一直在寻找一种创建模块化Web应用程序的解决方案,它是模块化的,用户可以以简单的jar形式提供自己的插件,然后将自己的数据提供给我的Web应用程序,我的webapp将负责用于显示它.
现在抓住的是我希望我的网络应用程序尽可能通用,而不依赖于j2ee web容器来支持任何东西.即我不能依赖我的Web容器来提供osgi支持并将Web应用程序部署为osgi包本身(这对于例如glassfish和WAS来说真的很简单).
我计划使用equinox并且只有解决方案,我目前看到的是他们在官方网站上提供的servlet桥,但对我而言,将所有内容委托给servlet真的很痛苦,而servlet又会解释请求并找到合适的bundle类然后再次以某种方式仅将数据传回Web应用程序.
对我而言,如果我的网络应用程序也是一个包,那将是很棒的.有什么能接近我能尝试的理想解决方案吗?或osgi和web应用程序(容器)的两个相关之间的任何其他通信方法?
在OSGi的规范详细介绍了WAB(Web存档包)格式.
而大同的Web提供了WAB /战争的webapps(PAX网络运行正常春分,菲利克斯等)的大力支持
使用pax web,您可以通过ServletContext获取BundleContext,例如:
BundleContext bundleContext = (BundleContext) getServletContext().getAttribute("osgi-bundlecontext");
Run Code Online (Sandbox Code Playgroud)
对于您提到的用户驱动的可插拔性,我建议您为插件包提供一些服务接口来实现,并且在您的webapp中使用ServiceTracker来监听他们的注册(除非您使用声明式服务).您还可以轻松地从上载servlet 安装捆绑包.
我猜测上传插件的用户必须登录并获得授权,因此此时会遇到安全问题.
编辑:在评论栏中回复评论时没有足够的空间
道歉,我想我误解了你的问题 - 你有一个现有的webapp容器,你想部署一个带OSGi功能的WAR吗?如果是这种情况,那么要么像其他人提到的那样使用ServletBridge,要么将OSGi框架嵌入到WAR中(这是相对简单的,请参阅此示例).
您甚至可以通过尝试从ServletContext获取BundleContext来使其成为可选项,如果这返回null,则启动您自己的嵌入式框架.这样它将在本机OSGi容器(例如Glassfish)或Java EE应用服务器中运行.
否则,PaxWeb是HttpService和WebApp OSGi规范的实现,但是有许多扩展可以让生活更轻松 - 但是你将它部署到OSGi容器中.
归档时间: |
|
查看次数: |
7899 次 |
最近记录: |