conf/jboss-service.xmlその4

実装クラスはorg.jboss.util.property.jmx.SystemPropertyClassValue。このクラスはcreate時にClassName属性のクラスが使えるか(ロードできるか)チェックし、使えるならばシステムプロパティに登録する。このMBeanでいうと、org.jboss.system.JBossRMIClassLoaderが使えるならばjava.rmi.server.RMIClassLoaderSpiというシステムプロパティ名の値となる。
で、JBossRMIClassLoaderが何かというと…

  1. RMIのクラスローディングはjava.rmi.server.RMIClassLoaderによって行われる
  2. RMIClassLoaderの各staticメソッド(loadClassなど)はデフォルトの実装があるが
  3. システムプロパティ「java.rmi.server.RMIClassLoaderSpi」にクラス名が指定されていれば、そのクラスが上記RMIClassLoaderの各メソッドの実装を提供する(java.rmi.server.RMIClassLoaderSpiをextendsしている必要あり)…これがJBossRMIClassLoader

JBossRMIClassLoaderは、デフォルト実装ではClassCastException等の問題が起こるため用意された。具体的にはJBossRMIClassLoaderでは、引数のクラスローダを無視し、スレッドコンテキストクラスローダを使おうとするところが異なる*1

*1:しかしRMIの流れ自体把握できてない…おいおいやるか…