JBossクラスローダにWeaveする(2)
やりたいことはJBossサーバ内部のUnifiedClassLoader(UCL)とUnifiedLoaderRepository(ULR)の挙動を簡単に解析できるようにすること。プローブを入れるためにUCLの実装自体に手を入れると、JBossサーバのバージョンが変わるたびに作り直しになるので、AspectJを使ってAOP流のやり方で行く。
まず、UCLとULR用のAspectを作成する(これを仮にUclAspectと呼ぶ)。UclAspectは以下の機能を備える。
- クラスのローディングの過程をログに記録する。
- ULR内部のキャッシュやURLリストの情報を蓄積する。
- ClassCastException, illegalAccessException, LinkageErrorsをキャッチしてエラー状況を調べる。
次に、UclAspectに蓄積された情報にアクセスするためにMBeanを作る(UclMonitorMBean)。このMBeanではログを取るクラスのスコープの指定も行う。
- UclAspect内部の情報を操作する。
ユーザはWebアプリからこのMBeanにアクセスする。MBeanはUCL/ULR情報をXML形式のデータとして返すので、Webアプリはこのデータをビジュアルに表示することが可能。クラスローダの違いが一目でわかるように、クラスローダごとに色分けされていると良いだろう。
提供パッケージは次のものから構成される。
ここまで出来たら、初めてこれをJBossAOPベースへ移植することを考える。なぜ、最初からJBossAOPを使わないかというと、まだ現時点(DR2)ではJBossAOPの仕様・実装が安定していないと思われるから。