当前位置: 首页 > 面试题库 >

OSGI创建模块化Web应用程序

夏弘文
2023-03-14
问题内容

我一直在寻找创建模块化Web应用程序的解决方案,该模块是模块化的,即用户可以以简单jar的形式提供自己的插件,然后将其自身的数据提供给我的Web应用程序,而我的webapp将负责用于显示它。

现在的问题是,我希望我的Web应用程序尽可能通用,而不依赖于j2ee
Web容器来支持任何内容。即,我不能依靠我的Web容器来提供osgi支持并将Web应用程序作为osgi捆绑包本身部署(这确实使事情变得非常简单,例如glassfish和WAS)。

我打算使用Equinox,而我目前看到的唯一解决方案是他们在其官方站点上提供的servlet桥,但是对我来说,将所有内容委派给servlet确实很痛苦,而servlet将反过来解释请求并找到合适的bundle类然后再次以某种方式仅将数据传递回Web应用程序

对我来说,如果我的网络应用程序也捆绑在一起,那就太好了。有什么可以尝试的理想解决方案附近的东西吗?还是在osgi和Web应用程序(容器)这两个方面之间有任何其他通信方法?


问题答案:

在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容器中。



 类似资料:
  • 问题内容: 我正在使用将Spring用于DI / bean管理的超大型JSF / Facelets应用程序。我的应用程序具有模块化结构,我目前正在寻找使模块化标准化的方法。 我的目标是由许多模块(可能相互依赖)组成一个Web应用程序。每个模块可能包含以下内容: 类; 静态资源(图像,CSS,脚本); Facelet模板; 托管Bean-具有请求,会话和应用程序范围的Bean的Spring应用程序上

  • 问题内容: 我有一个定义明确的界面的应用程序。它使用CDI解析模块(具体地说,它使用API​​接口上的Instance <>注入点来解析模块),并通过接口将各种数据传回第四个,而不会出现问题。我故意将API和实现分开,并且模块仅从API继承以避免紧密耦合,并且应用程序仅通过运行时相关性以及通过API完成的数据传递来了解模块。应用程序在没有模块的情况下运行良好,只需将jar放到WEB- INF /

  • 我试图为我的java fx应用程序创建一个安装程序,但它不起作用。我第一次用的是罐子。安装程序已创建,但应用程序未启动。我认为这是非模块化应用的方法。我尝试了模块化的应用方式:,但它回答说模块不存在,我尝试了在没有eurogogrip/的情况下为模块编写不同的代码。。。。。和类型化java——列出模块。我的模块根本不存在。如何部署模块化应用程序? 这是我的模块信息。JAVA } 非常感谢。

  • 我已经研究这个错误好几天了。虽然我尝试了几种不同的方法,但仍然没有在Liferay论坛上做出回应,我无法找出错误的真正原因。如果我能找到原因,我可能会解决它。错误是: 原因:java。lang.VerifyError:操作数堆栈上的类型错误\u异常详细信息:\u位置:\uufInternational/api/core/service/impl/EmailLocalServiceImpl。send

  • 问题内容: 因此,截至昨天早上,我对OSGi到底是什么一无所知。 OSGi 只是一个流行语,我不断看到它反复出现,因此我终于拨出一些时间来仔细研究它。 实际上,它看起来很酷,因此,我想(从记录开始)说我在任何方面都不是反OSGi的,这也不是“打击OSGi”的问题。 归根结底,似乎OSGi实质上已经解决了Java Modularity上的JSR 277 ,该文件认识到文件规范存在缺陷,在某些特殊情况

  • 使用npx create react应用程序创建新的react项目时,该过程停止并出现错误:内部/modules/cjs/loader。js:311。 内部/模块/cjs/loader.js:311抛出err;^错误:找不到模块'C:\用户\shonm\桌面\Web开发\WebSites\test1\node_modules\fs-额外\lib\index.js'。请验证package.json是