2010-11-30 77 views
3

我已經從現有的遺留戰爭中創建了一個osgi包。該應用程序有一個實現Spring接口ApplicationContextAware的類,然後使用上下文以編程方式獲取bean(不知道爲什麼,但最終需要重構)。該應用程序現在使用OsgiBundleXmlApplicationContext,但我認爲使用此問題存在一個問題,即setApplicationContext方法在實現ApplicationContextAware的任何類中都未調用,所以現在此類中的上下文始終爲null。從BundleContextAware類訪問應用程序上下文

因此,作爲一種解決方法,我已經實現了BundleContextAware,以便我可以獲取對發佈的上下文的引用並以這種方式訪問​​這些bean。這很好,但是上下文中唯一的bean是warDeployer(應該提到我使用spring dm bundle spring-extender來部署war)。上下文中的bundle是我的bundle,所以我不明白爲什麼我得到的上下文沒有我的bean。我必須讓應用程序上下文的代碼是:

ServiceReference ref = bundleContext.getServiceReference(ApplicationContext.class.getName()); applicationContext = (OsgiBundleXmlApplicationContext) bundleContext.getService(ref);

我可以在我的很多方面都花在創建,所以我不明白爲什麼他們不在我收到的背景下日誌中看到。

任何人都可以建議有什麼不對?我明白這種方法有點不合理,但在現有代碼重構之前它是暫時的。

在此先感謝。

巴里

回答

1

我相信ApplicationContext的服務是由Spring-DM擴展異步註冊。所以你可能有競爭條件,即在實際註冊之前要求服務。

你可能會引入一個延遲,但是你很深入討厭的黑客領土。最好找出爲什麼ApplicationContextAware bean上的setApplicationContext方法沒有被設置。您應該嘗試提出這是針對Spring-DM或在Spring-DM Google Group中提出的問題。

+0

嗨,謝謝你的回覆。我認爲這可能是一個錯誤,因爲我沒有看到任何文件表明這不應該工作。今年3月有一個jira登錄(https://jira.springframework.org/browse/OSGI-804),但沒有任何反應。我已經通過使用BeanFactoryAware接口來解決問題,它可以正常工作。謝謝 – 2010-12-03 10:42:27

相關問題