Deployment callback
昨日の日記で、JBoss5のMainDeployerはStructuralDeployersとDeployersという2種類のデプロイヤの集合を持つと書きました。しかし、bootstrap-beans.xmlをよく見ると、明示的にStructuralDeployersにJARStructureやWARStructureのようなDeployerをDIを使って注入していません。一体どうやって、Deployerの集合を集めるのでしょうか。
ポイントは下から2行のincallbackとuncallbackという指定です。これはカーネルに任意のPOJOがデプロイされるとき、引数の型が一致していればコールバックされるというものです。つまり、bootstrap-beans.xmlでは単純にDeployerを宣言しておくだけで、StructuralDeployer型のDeployerは自動的にVFSStructuralDeployersImpl::addDeployerがコールバックされて、StructuralDeployers beanに登録されるという訳。
/** * Add a structure deployer * * @param deployer the deployer */ public synchronized void addDeployer(StructureDeployer deployer) { if (deployer == null) throw new IllegalArgumentException("Null deployer"); structureDeployers.add(new StructureDeployerWrapper(deployer)); log.debug("Added structure deployer " + deployer); }
参考:Deployment callback, JBoss Microcontainer 2.0.0 User Guide