実装クラスはorg.jboss.util.property.jmx.SystemPropertyClassValue。このクラスはcreate時にClassName属性のクラスが使えるか(ロードできるか)チェックし、使えるならばシステムプロパティに登録する。このMBeanでいうと、org.jboss.system.JBossRMIClassLoaderが使えるならばjava.rmi.server.RMIClassLoaderSpiというシステムプロパティ名の値となる。
で、JBossRMIClassLoaderが何かというと…
- RMIのクラスローディングはjava.rmi.server.RMIClassLoaderによって行われる
- RMIClassLoaderの各staticメソッド(loadClassなど)はデフォルトの実装があるが
- システムプロパティ「java.rmi.server.RMIClassLoaderSpi」にクラス名が指定されていれば、そのクラスが上記RMIClassLoaderの各メソッドの実装を提供する(java.rmi.server.RMIClassLoaderSpiをextendsしている必要あり)…これがJBossRMIClassLoader
JBossRMIClassLoaderは、デフォルト実装ではClassCastException等の問題が起こるため用意された。具体的にはJBossRMIClassLoaderでは、引数のクラスローダを無視し、スレッドコンテキストクラスローダを使おうとするところが異なる*1。