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: