繁体   English   中英

从servlet访问osgi包类

[英]Accessing osgi bundle classess from servlet

我有两个项目。

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

我通过以下链接从tomcat启动了felix容器,没有问题

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

现在,我陷入了如何从Servlet调用捆绑软件(已安装在felix容器中)的类的问题。 由于bundle项目不在类路径中,而是在以下位置/ WEB-IN / bundles中,因此抛出类未找到错误(我必须将此位置用于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可用的接口或使用反射时,才可以使用该类。

这是这样做的方法,但是您不应该使用此方法:)。 通过在捆绑包中注册实现来自WAR类路径的接口的OSGi服务的方式来设计解决方案。 之后,您应该使用bundleContext对象检索OSGi服务对象。

另一个好的解决方案是,如果在捆绑软件中实现所需的逻辑,而不是在WAR中提供类。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM