2016-06-15 4 views
0

私はLiferay(CE 6.2.5 GA6)にメッセージリスナを実装して、作成/更新されたDLFileEntriesを外部DMSに非同期に保存しました。Liferayメッセージリスナ(メッセージバス)クラスパス

tomcatのlib/extフォルダにあるWSクラスのインターフェイスを含むJARファイルを作成しました。

このJARファイルにServiceLocatorクラスがあります。このServiceLocatorクラスは、WebアプリケーションのSpringコンテキストで初期化されています。サービスロケータの初期化は正常に機能しているようで、他のWebアプリケーションのサービスインスタンスにアクセスできます。しかし、MessageListenerクラスからサービスロケータサービスにアクセスしようとすると、instanncesはnullになります。

私が理解しているように、MessageListenerクラスは、web.xml portalContextConfigLocation context-paramを通じてspring-messaging.xmlファイルを使用してインスタンス化されています。メッセージリスナーが実行されるthreadyには、webappとは異なるクラスローダーがあると思われます。そのため、メッセージリスナーが実行されるスレッドのクラスパスを出力しようとしました。クラスパスにtomcatのlib/extフォルダのJARファイルが含まれていないことに驚きました。

これは意図しないのですか?誰も似たような問題で走ったのですか?

何か助けていただければ幸いです。

+0

好奇心が強い、GA6用のTomcatバンドルを使用していますか、このTomcatを別途ダウンロードしましたか? – Paras

+0

こんにちは、私はTomcatバンドルを使います – shimon001

答えて

0

私は解決策を見つけたと思います。私はちょうどこのようcontextConfigLocationにweb.xmlのportalContextConfigLocationコンテキストのparamからメッセージング・spring.xmlコンテキストが使う初期を変更しなければならなかったように思える:

<context-param> 
    <param-name>contextConfigLocation</param-name> 
    <param-value>/WEB-INF/spring-context/portlet-application-context.xml, /META-INF/messaging-spring.xml</param-value> 
</context-param> 

メッセージリスナーが私の残りの部分のような同じクラスローダに比べですwebapp。

関連する問題