Possuo um fluxo A que uma vez por mês inicia diversas solicitações do fluxo B ao mesmo tempo.
O fluxo A funciona perfeitamente iniciando todas as solicitações do B, via hAPI corretamente.
No fluxo B, a segunda atividade é uma atividade de serviço, e muitas solicitações estão ficadas paradas nesta atividade. Por exemplo, o fluxo A inicia cerca de 30 solicitações do B, e dessas 30, umas 25 ficam paradas. As outras cinco dão erro de conexão (Erro org.hibernate.exception.GenericJDBCException: Unable to acquire JDBC Connection) uma ou duas vezes e depois caminham.
Isso me parece ser algum bug causado pela quantidade de atividades abertas simultaneamente, mas queria saber se tem algum modo alternativo de evitar isso.
Claudio ao meu ver isso acontece pela disponibilidade de recursos e não por bug, explico.
As atividades de serviços são processadas em threads (as quais existe um pool de threads com quantidade máxima), essas ao processarem precisam fazer operações no banco de dados, para isso devem adquirir uma conexão com banco (as quais existe um pool de conexões máximas).
Provavelmente, da forma como estão parametrizados esses recursos no seu /configuration/domain.xml você tem uma quantidade de conexões de banco insuficientes para quantidade de processamentos que podem ocorrer pelas threads.
Avalie a connection pool nos datasources e aumentem de forma saudável isso. Importante lembrar que não se deve aumentar de forma indiscriminada esses parâmetros.
Obrigado Rafael. Nós já solicitamos ao cloud uma mudança nesses parâmetros. Não sei se o cloud já alterou, mas assim que fizerem, vou analisar se resolveu o problema.
Rafael, o cloud fez a alteração no pool. Colocamos um máximo de 100, e mesmo assim ainda estamos tendo problemas. Foram abertas 10 solicitações simultâneas, e 3 ficaram paradas na atividade de serviço, ou seja, 30%, e isso é um valor alto.
Claudio, para julgar se é bug ou não, é necessário parar e analisar, logs, o que está sendo feito e como, ambiente, porque foi feito como está etc.
Sobre ser bug, pode ser que seja, sugiro abrir o ticket, sem dúvidas há um problema que precisa ser solucionado.
Completo com uma analogia, imagina que tu tem um funil que tu usa pra encher uma garrafa. Tu vai enchendo, enchendo mas o funil vaza devagar. Tu não para de encher, até que vaza por cima. Deveria acontecer isso? Não deveria. É uma falha ou uma limitação?