2013-05-21 48 views
0

我加入以下捆綁可以部署一戰(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「

有什麼問題?

感謝

+0

我看到在第LOG此消息: [WebListenerExecutor:1] DEBUG org.ops4j.pax.web.pax幅材的運行時 - 組織/ OSGi的/服務/網絡/部署階段 PackageAdmin服務不可用。 – Jugu

+1

是否有可能將osgi-core添加到捆綁包中,並且org.osgi.framework.BundleContext類在OSGi容器中存在兩次?它來自容器和來自jar文件的內容。 PAX模塊連接到框架,而您的電線連接到osgi-core.jar –

+0

感謝您的迴應,是的,看起來這是問題,從簡單的戰爭生成的jar包將所有的戰爭依賴關係嵌入到jar並將它們添加到包類路徑(Bundle-ClassPath :: ....,WEB-INF/lib/org.osgi.core-5.0.0.jar)中。 我現在不知道如何管理這個清單文件以避免這種情況,如果我嘗試使用包maven插件來生成捆綁而不是戰爭,我不能擁有相同的正確jar包裝 – Jugu

回答

0

從製作討論一個答案評論:

你所提到的類在classpath的兩倍。它存在於OSGi容器中,它包含在jar文件中。 PAX模塊從OSGi容器中導入類,而您的webapp從外部jar文件導入該類。

在你的情況下,jar包含在WEB-INF/lib中。在使用Maven時,應該將osgi-core依賴的範圍設置爲提供。

+0

直到這,它是完美的,但我也應該添加此包的導入,而不是從本地類路徑使用它,因爲有了這個解決方案我有一個新的InvocationTargetException(找不到org.osgi.framework.BundleContext)。那麼我怎麼做到這一點(向生成的包清單中添加一個導入)。謝謝:) – Jugu

+0

是否存在像「maven bundle plugin」這樣的插件來生成一個wab包(使我可以管理web項目中的導入/導出包列表)? – Jugu

+1

maven-bundle-plugin可以生成wab項目。在說明中,您可以定義Web-ContextPath,_wab-我認爲您可以在Google中輕鬆找到關於詳細文檔的信息。 –