私は、applicationContext.xml
がXmlWebApplicationContext
のContextLoaderListener
によってロードされたSpring Webアプリケーションを持っています。アプリケーションコンテキストには、(SchedulerFactoryBean
と定義されたhereのような)クォーツスケジューラがありますが、トリガもジョブの詳細もありません。Quartzジョブを複数のApplicationContext環境で実行するにはどうすればよいですか?
このメインアプリケーションコンテキストの読み込み中に、独自のpluginApplicationContext.xml
ファイルを含む「プラグイン」JARを読み込みます。 各pluginApplicationContext.xml
は、の子としてGenericXmlApplicationContext
にロードされています。XmlWebApplicationContext
これらのプラグインには、前述のスケジューラ内でスケジュールされたQuartzジョブ(QuartzJobBean
)が含まれている場合があります。スケジューリングはQuartz APIを介してプログラムで実行する必要がありますが、これは問題ありません。ジョブがトリガーされると、Quartzによってインスタンス化され、QuartzJobBean
が拡張されるため、現在ApplicationContext
からsetApplicationContext
まで取得できます。 問題は、ジョブがスケジュールされているGenericXmlApplicationContext
の代わりにXmlWebApplicationContext
が表示されることです。したがって、getBean
を呼び出して、プラグイン内で定義されたBeanを取得することはできません。
私はこれがなぜ起こるのかよく分かります。しかし、私はそれを処理するための清潔で再利用可能なソリューションを見つけることができません。私はすでにOSGiを見てきましたが、既存のアプリケーションにこのプラグインシステムを実装しています。新しいものを作成せず、アプリケーション全体をOSGiに移行するのはあまりにも手間がかかります。 OSGiやその他のプラグインフレームワークがこのような状況にどう対処しているか知っていますか?あなたの助けのための
おかげでたくさん
私には明らかではありません。 onw pluginApplicationContext.xmlを持つプラグインがあり、プラグインで定義されているBeanがメインコンテキストからアクセスできないことを理解しています。そうですか? – jddsantaella