2013-05-16 7 views
5

私はaspectJのアスペクトを1つのWar(aspectsWar.war)ファイルにバンドルし、既存の実行中のアプリケーションを持つアプリケーションサーバーに展開し、tomcatサーバー上のjavaagent 。単一のJVMに配備されたすべてのアプリケーションのAspectJ LTW

aspectWar.warではアスペクトを傍受しているが、同じjvmで動作している他のアプリケーションでは傍受されていないことがわかります。

おそらく、アプリケーション・サーバーへのいくつかのカスタムクラスローディングの変更を通じて、認識し、(好ましくは、個々のwarファイルを変更することなく)他のすべての実行中のアプリケーションを織るために私のAspectJのアスペクトを持ってする方法はあり...

注意:これは、Spring関連の統合なしで単独でaspectJを使用しています。

アドバイスをしてください。

答えて

2

特定のクラスローダーへの読み込み時間の制限は、スプリングによって提供される機能です。 documentationが説明したよう:

AspectJのLTWは、製織工程オーバーより細かな制御が可能であるとSpringフレームワークがもたらす価値を追加します。 'Vanilla' AspectJ LTWは、Java(5+)エージェントを使用して実行されます。このエージェントは、JVMの起動時にVM引数を指定することでオンになります。したがって、JVM全体の設定ですが、状況によっては問題はありませんが、しばしば少し粗すぎます。 Spring対応のLTWを使用すると、ClassLoader単位でLTWをオンに切り替えることができます。これは明らかにより細かく、「単一JVMの複数アプリケーション」環境では意味があります(典型的なアプリケーションサーバー環境)。

ご迷惑をかけて申し訳ありませんが、基本的にあなたの質問に対する回答です。 JVMワイドのアスペクトを適用する場合は、Spring load time weaving configurationの代わりにagent provided by AspectJを使用してください。

+0

申し訳ありませんが、AspectJエージェントを-javaagent:E:\ workspace \ tomcat6 \ lib \ aspectjweaver-1.7.2.jarオプションで使用していることを忘れてしまったことがあります。 aspectjアスペクト(アノテーションなし) Spring固有のものはありません(アプリケーションがSpring管理アプリケーションであることを期待しています:))。 – Sammy

+0

他のアプリケーションの前にロードされるように、あなたのアスペクトをシステムクラスパスに置くのが理にかなっているかもしれません。 – kriegaex

関連する問題