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アプリはこのデータをビジュアルに表示することが可能。クラスローダの違いが一目でわかるように、クラスローダごとに色分けされていると良いだろう。

提供パッケージは次のものから構成される。

  1. UclAspectをアーカイブしたJAR
  2. UclMonitorMBeanとWebアプリを含むSAR
  3. jboss-jmx.jarにUclAspectをWeaveするためのAntスクリプト

ここまで出来たら、初めてこれをJBossAOPベースへ移植することを考える。なぜ、最初からJBossAOPを使わないかというと、まだ現時点(DR2)ではJBossAOPの仕様・実装が安定していないと思われるから。