- jboss:service=WebService
RMIのダイナミッククラスローディングを行うためのWebサーバ。待ち受けるURL、つまりRMIのコードベースはデフォルトでは 「http://<ホスト名>:8083」。デフォルトで受け付ける実装クラスはorg.jboss.web.WebService。といってもWebサーバとしての処理はすべてorg.jboss.web.WebServerのインスタンスに委譲している。org.jboss.web.WebServerは体裁としてはごく普通のHTTPサーバになっているが、リクエストを受け付けた後はクラスローディングに特化している。汎用じゃないならこのクラス名(WebService、WebServer)は良くないんじゃないかなー。
ところが実際にクライアントからJBossにEJBをlookupしたところ、org.jboss.web.WebServerは使われていなかった…。
ダイナミックプロキシだからクラスローディングはいらないのか…?。むむむ、、、と思ったところでJBoss-srcのtestsuiteを調べることに気づいた。よし、org.jboss.test.jrmp.test.DynLoadingUnitTestCaseていうのがある。なるほど、EJB経由で知らないクラスのインスタンスが送られてきた場合にクラスローディングが発生するのか。
DynLoadingUnitTestCaseクラス内で
IString echo = bean.copy("jrmp-dl");
が実行されると、サーバ側では(TRACEレベルでログを出している)
TRACE [org.jboss.web.WebServer] raw request=GET /org/jboss/test/jrmp/ejb/AString.class HTTP/1.1 TRACE [org.jboss.web.WebServer] loaderKey = TRACE [org.jboss.web.WebServer] filePath = rg/jboss/test/jrmp/ejb/AString.class TRACE [org.jboss.web.WebServer] No loader, reset filePath = org/jboss/test/jrmp/ejb/AString.class TRACE [org.jboss.web.WebServer] loader = org.jboss.mx.loading.UnifiedClassLoader3@2bc3f5{ url=file:/C:/jboss/jboss-4.0.2-src/build/output/jboss-4.0.2/server/default/tmp/deploy/tmp20456jboss-service.xml ,addedOrder=2} TRACE [org.jboss.web.WebServer] loading className = org.jboss.test.jrmp.ejb.AString TRACE [org.jboss.web.WebServer] clazzUrl = file:/C:/jboss/jboss-4.0.2-src/build/output/jboss-4.0.2/server/default/tmp/deploy/tmp20532jrmp-dl.jar TRACE [org.jboss.web.WebServer] new clazzUrl: jar:file:/C:/jboss/jboss-4.0.2-src/build/output/jboss-4.0.2/server/default/tmp/deploy/tmp20532jrmp-dl.jar!/org/jboss/test/jrmp/ejb/AString.class DEBUG [org.jboss.web.WebServer] Retrieving jar:file:/C:/jboss/jboss-4.0.2-src/build/output/jboss-4.0.2/server/default/tmp/deploy/tmp20532jrmp-dl.jar!/org/jboss/test/jrmp/ejb/AString.class TRACE [org.jboss.web.WebServer] HTTP code=200 OK, Content-Length: 625
のようにorg.jboss.web.WebServerが実行される。
EJBのときにどうやってるかは今後の宿題ということで。
RMI の使用による動的なコードのダウンロード
http://java.sun.com/j2se/1.4/ja/docs/ja/guide/rmi/codebase.html
JavaでHello World RMI編
http://www.hellohiro.com/rmi.htm
RMI編もあったのか。なんでもHello Worldは大事ですね。