Не удается получить BundleContext в веб-приложении
Я добавил следующие пакеты, чтобы развернуть войну (веб-приложение) в среде 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 ответ
Делая ответ из обсуждения в комментариях:
У вас есть упомянутый класс дважды в classpath. Он существует в контейнере OSGi и включен в JAR-файл. Модули PAX импортируют класс из контейнера OSGi, а веб-приложение импортирует его из внешнего файла JAR.
В вашем случае баночка включена в WEB-INF/lib. Поскольку вы используете Maven, вы должны установить область зависимости от osgi-core.