我添加了以下包,可以将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以使用war中已注册的服务,我添加了:
BundleContext ctx = (BundleContext) ServletActionContext.getServletContext().getAttribute("osgi-bundlecontext");但是,我发现了一个例外:
"java.lang.ClassCastException:不能将org.apache.felix.framework.BundleContextImpl强制转换为org.osgi.framework.BundleContext“
会有什么问题呢?
谢谢
发布于 2013-05-22 17:33:02
在评论中从讨论中做出回答:
您在类路径中有两次提到的类。一个存在于OSGi容器中,另一个包含在jar文件中。PAX模块从OSGi容器导入类,而您的webapp从外部jar文件导入类。
在本例中,jar包含在WEB-INF/lib中。当您使用Maven时,您应该将osgi-core依赖的范围设置为provided。
https://stackoverflow.com/questions/16673314
复制相似问题