gpt4 book ai didi

java - 从 servlet 访问 osgi 包类

转载 作者:行者123 更新时间:2023-11-28 23:39:55 25 4
gpt4 key购买 nike

我有两个项目。

  1. 一个 osgi 包(eclipse 插件项目)。
  2. 一个简单的网络应用程序(可部署在 tomcat 中)。

我已经通过下面的链接从 tomcat 启动了 felix 容器,没有任何问题

http://felix.apache.org/documentation/subprojects/apache-felix-http-service.html#using-the-servlet-bridge

现在我不知道如何从 servlet 调用包的类(已经安装在 felix 容器中)。它抛出类未找到错误,因为捆绑项目不在类路径中,而是在以下位置/WEB-IN/bundles。(我必须将此位置用于 bundle )。那么如何实现呢?

最佳答案

框架bundle的BundleContext放入ProvisionActivator中的servlet上下文:

servletContext.setAttribute(BundleContext.class.getName(), context);

这意味着您可以像这样通过 servletContext(在所有普通 servlet 中都可用)访问 BundleContext:

BundleContext context = servletContext.getAttribute(BundleContext.class.getName());

您可以通过以下方式访问嵌入式 OSGi 容器内的类:

  • 通过 bundleContext 请求包含类的包
  • 使用 bundle.loadClass("myClass") 方法获取类。仅当您转换到普通 WAR 或反射可用的接口(interface)时,您才能使用该类

这是实现它的方法,但是你不应该使用这种方法:)。以在 bundle 中注册实现来自 WAR 类路径的接口(interface)的 OSGi 服务的方式设计您的解决方案。之后,您应该使用 bundleContext 对象来检索 OSGi 服务对象。

其他好的解决方案是,如果您在包中而不是来自 WAR 的类中实现您需要的逻辑。

关于java - 从 servlet 访问 osgi 包类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20793509/

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