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:
