无法在Web应用程序中检索BundleContext

时间:2013-05-21 15:04:53

标签: osgi war

我添加了以下捆绑包,可以将war(Web应用程序)部署到OSGi框架中。我使用“Apache Felix可分发二进制文件”:

   32|Active     |   20|OPS4J Pax Logging - API (1.7.0)
   33|Active     |   20|OPS4J Pax Logging - Service (1.7.1.SNAPSHOT)
   34|Active     |   20|OPS4J Pax Url - mvn: (1.3.5)
   35|Active     |   20|OPS4J Pax Url - war (1.3.5)
   36|Active     |   20|OPS4J Pax Url - wrap: (1.3.5)
   37|Active     |   20|OPS4J Pax Web - API (1.1.12)
   38|Active     |   20|OPS4J Pax Web - FileInstall Deployer (1.1.12)
   39|Active     |   20|OPS4J Pax Web - Extender - WAR (1.1.12)
   40|Active     |   20|OPS4J Pax Web - Extender - Whiteboard (1.1.12)
   41|Active     |   20|OPS4J Pax Web - Jetty Bundle (1.1.12)
   42|Active     |   20|OPS4J Pax Web - Jsp Support (1.1.12)
   43|Active     |   20|OPS4J Pax Web - Runtime (1.1.12)
   44|Active     |   20|OPS4J Pax Web - Service SPI (1.1.12)

所以,我使用了一个简单的struts 2应用程序(Hello world)进行测试,我创建了war,然后我把它放在“file install”目录中,它变得活跃了,我可以看到我的欢迎页面。登记/> 在此之后,我尝试检索BundleContext以便可以使用来自战争的注册服务,我已添加:

BundleContext ctx = (BundleContext) ServletActionContext.getServletContext().getAttribute("osgi-bundlecontext");

但是,我发现了例外:

“java.lang.ClassCastException:org.apache.felix.framework.BundleContextImpl无法强制转换为org.osgi.framework.BundleContext”

可能是什么问题?

由于

1 个答案:

答案 0 :(得分:0)

通过评论中的讨论回答:

你在类路径中有两次提到的类。它存在于OSGi容器中,它包含在jar文件中。当您的webapp从外部jar文件中导入时,PAX模块从OSGi容器导入类。

在您的情况下,jar包含在WEB-INF / lib中。在使用Maven时,您应该将osgi-core依赖的范围设置为提供。