我添加了以下捆绑包,可以将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”
可能是什么问题?
由于
答案 0 :(得分:0)
通过评论中的讨论回答:
你在类路径中有两次提到的类。它存在于OSGi容器中,它包含在jar文件中。当您的webapp从外部jar文件中导入时,PAX模块从OSGi容器导入类。
在您的情况下,jar包含在WEB-INF / lib中。在使用Maven时,您应该将osgi-core依赖的范围设置为提供。