我有一個彈出的Web應用程序,其中applicationContext.xml
通過ContextLoaderListener
加載到XmlWebApplicationContext
中。應用程序上下文有一個Quartz調度程序(用SchedulerFactoryBean
定義,如here),但沒有觸發器和作業詳細信息。如何讓Quartz作業在多ApplicationContext環境中運行?
在這個主應用程序上下文的裝載,我加載包含自己pluginApplicationContext.xml
文件中的一些「插件」的JAR文件。 作爲主要的XmlWebApplicationContext
的孩子,每個pluginApplicationContext.xml
被加載在GenericXmlApplicationContext
中。
這些插件可能含有石英作業被調度上面討論的調度器內(QuartzJobBean
)。調度必須通過Quartz API以編程方式完成,但這對我來說很好。當作業被觸發時,它很好地被Quartz實例化,並且因爲它擴展了QuartzJobBean
,所以我能夠獲得當前的ApplicationContext
到setApplicationContext
。 這裏的問題是,我得到XmlWebApplicationContext
而不是已經安排作業的GenericXmlApplicationContext
。因此,我不能調用getBean
來檢索插件中定義的bean。
我很明白爲什麼會發生這一切。但是我找不到一個乾淨的,可重用的解決方案來處理它。我已經看到了OSGi,但是我們正在現有的應用程序上實現這個插件系統,而不是從頭開始創建一個新的插件系統,並且將整個應用程序遷移到OSGi將是很難完成的工作。你知道OSGi和其他插件框架如何處理這種情況嗎?
非常感謝您的幫助
目前還不清楚。我知道你有一個pluginApplicationContext.xml插件,插件中定義的bean不能從主要上下文訪問。是對的嗎? – jddsantaella 2012-03-23 17:44:17