WARの例
URLDeploymentScannerがコピーされた新しいファイルを見つけると
MainDeployer.deploy(DeploymentInfo)
↓
MainDeployer.init(DeploymentInfo)
tmpディレクトリにファイルをコピーする
deployment.localClはそのtmpファイルを見るURLClassLoader
担当デプロイヤを決める(WARならorg.jboss.web.tomcat.tc5.Tomcat5)
→ deployer.init()
Tomcat5#init()…AbstractWebContainer#init()
tmpWARファイルを展開
WebMetaDataをnewしDeploymentInfoにセット
parseMetaData():web.xml、jboss-web.xmlを読む(読むときのクラスローダは、展開したtmpWARを見るURLClassLoader)
jboss-web.xmlの
loaderRepositoryClassを指定することで、自前のリポジトリを使える。デフォルトだとorg.jboss.mx.loading.HeirarchicalLoaderRepository3
さっき出来たLoaderRepositoryConfigもDeploymentInfoにセット
DeploymentInfo#createClassLoaders()
LoaderRepositoryFactory#createLoaderRepository()でリポジトリが初期化される。定義したリポジトリ名でMBeanServerに登録
リポジトリのnewClassLoaderメソッドを呼んで、このDeploymentInfoのuclにセットする。自前のクラスローダを使いたければ、やはりリポジトリから作らなければいけないようだ。自前のクラスローダはRepositoryClassLoaderをextendsする必要がある。別のアプローチはあるのだろうか?
↓
MainDeployer.create(DeploymentInfo):Mbean登録とか
↓
MainDeployer.start(DeploymentInfo):MBeanのstart()