我有两个项目。
我已经从tomcat启动了felix容器,没有问题,请点击下面的链接
现在我遇到了如何从servlet调用bundle(已经安装在felix容器中)的类。由于bundle项目不在classpath中,而是在以下位置,因此抛出class not found错误 /WEB-IN/bundles.(我必须使用此位置为捆绑)。那怎么可能实现呢?
答案 0 :(得分:0)
框架包的BundleContext被放入ProvisionActivator中的servlet上下文中:
servletContext.setAttribute(BundleContext.class.getName(), context);
这意味着您可以通过servletContext(在所有普通servlet中都可用)访问BundleContext,如下所示:
BundleContext context = servletContext.getAttribute(BundleContext.class.getName());
您可以通过以下方式访问嵌入式OSGi容器中的类:
这是这样做的方法,但是你不应该使用这种方法:)。以您在捆绑包中注册实现来自WAR类路径的接口的OSGi服务的方式设计您的解决方案。之后,您应该使用bundleContext对象来检索OSGi服务对象。
其他好的解决方案是,如果您在bundle中实现所需的逻辑,而不是来自WAR的类。