Ontem eu passei por um problema gravíssimo em ambiente de produção: pouco tempo após a aplicação entrar no ar, o diretório $JBOSS_HOME/server/${jboss.server.name}/tmp/vfs-nested.tmp/ estava estourando o espaço em disco destinado a partição em que o JBoss estava instalado e, em função disto, a aplicação começou a apresentar erros. Resultado: tivemos que retroceder num processo de migração até descobrir solução para o defeito :-( O que causou o problema?

Foi solicitada a adição de um novo diretório de deploy no JBoss. Na versão 5 ou superior do JBoss esta adição deve ser realizada conforme descrito nesta página do Wiki da comunidade JBoss. Por favor, leiam a página inteira e não se esqueçam dos comentários... Pelo exemplo citado, configuramos um novo diretório de deploy adicionando-o ao arquivo $JBOSS_HOME/server/${jboss.server.name}/conf/bootstrap/profile.xml como demonstrado no exemplo abaixo:

<bean name="BootstrapProfileFactory"
     class="org.jboss.system.server.profileservice.repository.StaticProfileFactory">
     <property name="bootstrapURI">${jboss.server.home.url}conf/jboss-service.xml</property>
     <property name="deployersURI">${jboss.server.home.url}deployers</property>
     <property name="applicationURIs">
          <list elementClass="java.net.URI">
               <value>${jboss.server.home.url}deploy</value>

               <!-- Add your own deploy folder -->
               <value>file:///home/jpai/test/deploy</value>
          </list>
     </property>
     ...
</bean>

A configuração realizada possibilita que um pacote (.war, .ear, .sar, ...) também possa ser implantado no diretório /home/jpai/test/deploy. O único problema é que somente esta configuração não basta! Como citado neste comentário, outro arquivo também deve ser alterado! Caso contrário, o problema que descrevi acima poderá ocorrer pois os pacotes que forem implantados neste diretório serão explodidos no diretório temporário do JBoss, repetidamente, causando a lotação do espaço em disco.

Logo, a solução para o problema é adicionar, também, a seguinte configuração ao arquivo $JBOSS_HOME/server/${jboss.server.name}/conf/bootstrap/vfs.xml:

  <bean name="VFSCache">
    <constructor factoryClass="org.jboss.virtual.spi.cache.VFSCacheFactory" factoryMethod="getInstance">
      <!-- Use the CombinedVFSCache implementation -->
      <parameter>org.jboss.virtual.plugins.cache.CombinedVFSCache</parameter>
    </constructor>
    <start ignored="true"/>
    <property name="permanentRoots">
      <map keyClass="java.net.URL" valueClass="org.jboss.virtual.spi.ExceptionHandler">
        ...
        <entry>
          <key>file:///home/jpai/test/deploy</key>
          <value><inject bean="VfsNamesExceptionHandler"/></value>
        </entry>
      </map>
    </property>
    <property name="realCache">
      <bean class="org.jboss.virtual.plugins.cache.IterableTimedVFSCache"/>
    </property>
  </bean>

A base para o entendimento deste problema num nível menos superficial é a compreensão do artigo "A Look Inside JBoss Microcontainer, Part 3 - the Virtual File System" e a leitura dos links relacionados logo abaixo.

Fique atento e faça boas configurações!

Alguns outros textos que também falam sobre este problema: