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