我加入以下捆綁可以部署一戰(Web應用程序)到一個OSGi framework.I使用無法檢索的BundleContext「阿帕奇菲利克斯distribuable二進制」:在Web應用程序
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)進行測試,我創建了這個戰爭,然後把它放在「文件安裝」目錄中,並且它變得活躍,我可以看到我的歡迎頁面。
在此之後,我試着檢索的BundleContext到可以從戰爭使用已註冊的服務,我已經加入:
BundleContext ctx = (BundleContext) ServletActionContext.getServletContext().getAttribute("osgi-bundlecontext");
但是,我發現了異常:
「java.lang.ClassCastException: org.apache.felix.framework.BundleContextImpl無法轉換爲org.osgi.framework.BundleContext「
有什麼問題?
感謝
我看到在第LOG此消息: [WebListenerExecutor:1] DEBUG org.ops4j.pax.web.pax幅材的運行時 - 組織/ OSGi的/服務/網絡/部署階段 PackageAdmin服務不可用。 – Jugu
是否有可能將osgi-core添加到捆綁包中,並且org.osgi.framework.BundleContext類在OSGi容器中存在兩次?它來自容器和來自jar文件的內容。 PAX模塊連接到框架,而您的電線連接到osgi-core.jar –
感謝您的迴應,是的,看起來這是問題,從簡單的戰爭生成的jar包將所有的戰爭依賴關係嵌入到jar並將它們添加到包類路徑(Bundle-ClassPath :: ....,WEB-INF/lib/org.osgi.core-5.0.0.jar)中。 我現在不知道如何管理這個清單文件以避免這種情況,如果我嘗試使用包maven插件來生成捆綁而不是戰爭,我不能擁有相同的正確jar包裝 – Jugu