2

メッセージ駆動型 Bean (MDB) から Spring Bean (@Component) を呼び出したいのですが、それへの参照を取得するのに問題があります。org.springframework.context.ApplicationContextAwareSpring ApplicationContext を class の static フィールドに格納するクラスを実装してみましたMyAppContext。の静的フィールドMyAppContextは、MDB からアクセスされます。しかしMyAppContext、異なるクラスローダーからロードされます。Spring アプリケーション コンテキストは Web モジュール クラスローダー コンテキストで正しく設定されていますが、MDB のクラスローダー コンテキストでは null です。

Web アプリと MDB に同じクラスローダーを使用するよう JBoss に指示することはできますか?

または、Spring アプリケーション コンテキストを静的フィールドに格納するよりも良い方法はありますか?

アドバイスをありがとう!

4

2 に答える 2

1

「ClassPathXmlApplicationContext」を使用して、MBean で必要な Spring Bean をロードして検索してみませんか?

于 2013-07-08T12:44:02.307 に答える
1

コンテキストの静的ホルダーは、実際には良い考えではありません。Java EE 環境で他のアプリケーションが Bean を使用できるようにするには、JNDI の使用を検討する必要があります。

残念ながら、すぐに使用できるプレーンな JNDI エクスポーターはありませんが、次のブログ投稿に示されているように、自分で作成するのはかなり簡単です。 export-spring-managed-bean-to.html

ただし、確認したいJndiRmiServiceExporterがあります。

Bean が JNDI で名前にバインドされると、クラスのロードの問題を心配することなく、メッセージ Bean で標準の CDI を使用して参照できます。

于 2013-07-06T01:07:22.833 に答える