gpt4 book ai didi

java - 如何从 Pax Web 部署的网络包访问(蓝图)OSGi 服务?

转载 作者:行者123 更新时间:2023-11-29 05:53:39 24 4
gpt4 key购买 nike

我目前正在使用 Pax Web 部署 OSGi 网络应用程序包。从这个网络包中,我需要访问一组 OSGi 服务。在系统的其余部分,我使用蓝图来创建和使用服务。这很棒,因为它提供代理、阻尼等。

从 Pax Web 部署的 Web 应用程序 bundle 中,访问这些 OSGi 服务的最佳方式是什么?

我的想法是

1) 通过 osgi-bundlecontext 属性从 ServletContext 中获取 BundleContext,然后使用 OSGi ServiceTracker 类。

2) 在 Web 包中创建一个蓝图上下文文件,其中包含对我需要的服务的引用。蓝图上下文由蓝图扩展程序在 OSGi 服务注册表中注册,我可以从中检索它,然后通过 ID 查找 bean。

3) 使用类似 Springs ContextLoaderListener 的东西在 web.xml 文件中创建一个蓝图上下文。

选项 1 很好,但意味着我必须跟踪服务并且无法获得 Blueprint 的任何好处。

选项 2 也可以正常工作,但它会遇到时间问题。实际上,现在有两个服务正在部署应用程序——使用 web.xml 文件部署的 Pax Web 扩展器和部署蓝图上下文文件的(在我的例子中是 Gemini)蓝图扩展器。在启动时,这些扩展器会同时部署,并且当 Pax web 扩展器实例化任何 servlet 上下文监听器时,无法保证应用程序上下文在 OSGi 服务注册表中可用。这意味着无法从上下文监听器代码调用 OSGi 服务。

选项 3 - 不太确定是否可以这样做。貌似Spring DM曾经用过这种方式?

我觉得我一定遗漏了一些东西 - 有没有一种简单的方法可以在Pax Web 部署的网络包?

最佳答案

是的,你错过了另一个可以工作的使用 jndi 作为桥梁。如果使用白羊座(虽然我不知道双子座),您也可以检索任何 OSGi 服务作为 jndi 查找。现在通过 web.xml 检索它,你会没事的。

例如使用

osgi:service/<interface>[/<filter>]

作为来自 web.xml 的 jndi 源这样做的好处是,您不会遇到#2 的问题关于现在无法完成的#3。所以基本上你仍然可以选择 3,但我建议使用 #4

关于java - 如何从 Pax Web 部署的网络包访问(蓝图)OSGi 服务?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13011222/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com