GlassFish JMS Connection Factories
Para melhor utilização dos recursos de hardware disponíveis para o GlassFish, é necessário realizar algumas configurações que são importantes para a performance e utilização correta dos recursos quando Workflow estiver sendo utilizado.
Estas configurações são bem sensíveis e variam de um ambiente para outro. As configurações também devem considerar os processos que serão executados nesse ambiente e a forma como estes serão executados (quantidade de vezes e periodicidade).
Um ambiente pode possuir algumas das características abaixo de processos e para isso a configuração é diferente para cada um deles:
- Processos que possuem grandes picos de inicializações – inicia-se muitos processos de uma única vez.
- Processos que possuem picos de tratamento de pendências, de forma sazonal ou não – pendências tratadas ao mesmo tempo.
- Processos que possuem quantidade de execuções mais espaçadas – poucas execuções espaçadas durante o dia.
- Entre outras possibilidades.
Sendo assim, é necessário primeiramente conhecer o ambiente a ser configurado antes de realizar a configuração, obtendo informações como disponibilidade de hardware, processos que serão executados e a frequência de utilização destes.
Nota
Com o passar do tempo as configurações devem ser ajustada conforme percepção dos processos e de seu uso, assim como, do desempenho do Workflow.
Configuração de Filas e Tópicos
- Acesse o console de administração do GlassFish, acessível pelo nome do servidor + a porta configurada no momento de sua instalação;
Nota
Para acessar o console é necessário utilizar o usuário e senha configurados na instalação/configuração do Glassfish.
- Acesse a tela Resources > JMS resources > Connection Factories;
- Após isso, é apresentada uma listagem com as connection factories existentes;
Nota
Não pode-se confiar na lista de connections factories exibida na árvore do GlassFish. Por isso, sempre olhe as connections factories através da lista exibida na página do lado direito.
- É necessário existir quatro connection factories do Workflow, estas possuem o seu nome iniciado com "jms/TaskManager" e terminado com "Factory";
- Acesse a configuração de cada uma das connection factories citadas acima, clicando sobre o seu nome;
Importante
- Initial and Minimum Pool Size: a configuração desse campo deve ser igual para todas as Filas e Tópicos do Workflow;
- Maximum Pool Size: a configuração desse campo deve ser igual para todas as Filas e Tópicos do Workflow. O valor padrão da instalação é 15. Esse valor deve ser configurado após a instalação para que fique adequado a realidade de cada ambiente. A não configuração pode ocasionar perda de desempenho e mal funcionamento do produto
Connection factories Descrição "Prende" conexão de banco Transaction Support Maximum Pool Size Initial/Minimum Pool Size Jms/TaskManagerFactory Responsabilidade:Responsável pela execução do processo, sendo utilizada para iniciar processos, cancelar, responder, entre outras ações.Ela somente é liberada quando processo parar esperando uma intervenção externa (Exemplo: aguardando uma pendência ser tradada).Impacto na execução:Possível demora na execução nessa fila não terá muito impacto no usuário, já que são transações mais demoradas. Sim. Cada execução prende uma conexão de banco, segurando-a até o término de sua execução.Não há nenhum controle sobre quando estas serão devolvidas. Marcar a opção NoTransaction. A quantidade irá variar conforme os processos utilizados no ambiente. Informar a metade da quantidade informada no campo Maximum Pool Size. Importante
Esse número é o mínimo de conexões de banco que não serão devolvidas ao banco.
Jms/TaskManagerValidationFactory Responsabilidade:Responsável por executar validações sobre a execução dos processos. Por exemplo: validações executadas pelo Workflow antes de iniciar um processo.Impacto na execução:Como se trata de transações mais rápidas, caso ocorra o atraso na execução por ter muitas execuções, o usuário perceberá o atraso. Sim. Cada execução prende uma conexão de banco, segurando-a até o término de sua execução.Não há nenhum controle sobre quando estas serão devolvidas. Marcar a opção NoTransaction. A quantidade irá variar conforme os processos utilizados no ambiente. Informar a metade da quantidade informada no campo Maximum Pool Size. Importante
Esse número é o mínimo de conexões de banco que não serão devolvidas ao banco.
Jms/TaskManagerUtilityFactory Responsabilidade:Responsável por executar funções mais utilitárias aos processos. Por exemplo: envio de e-mail. Sim. Cada execução prende uma conexão de banco, segurando-a até o término de sua execução. Não há nenhum controle sobre quando estas serão devolvidas. Marcar a opção NoTransaction. A quantidade irá variar conforme os processos utilizados no ambiente. Informar a metade da quantidade informada no campo Maximum Pool Size. Jms/TaskManagerResponseFactory Responsabilidade:Responsável por receber notificações de retorno de validações para que outras partes sejam notificadas. Não. Desvinculada de conexão de banco. Marcar a opção NoTransaction. A quantidade irá variar conforme os processos utilizados no ambiente. Informar a metade da quantidade informada no campo Maximum Pool Size.
Importante
Números mais altos não necessariamente significam mais performance, podenm significar problemas de performance.
Sobre as conexões de Banco disponíveis para o Workflow:
- Uma quantidade muito elevada de conexões com banco, em ambientes com restrição de conexões, pode impedir conexões de outras aplicações, como os demais sistemas Senior ou até demais produtos que venham a utilizar o banco;
- Deve ser configurado o número de conexões de Banco que o Workflow pode utilizar. Recomenda-se que esse número seja maior que a soma da propriedade Maximum pools size das connections: TaskManagerFactory e TaskManagerValidationFactory;
- As conexões, uma vez utilizadas pelo Workflow, só serão "liberadas" para outros produtos quando o GlassFish "destruir" os recursos criados (MDB) – ele não possui um momento específico para a liberação destes recursos. Nesse momento as conexões são fechadas e liberadas para o Pool de Conexões do SeniorTools, este por sua vez, possui uma configuração de chamada eviction_interval que indica quando tais conexões vão realmente voltar a estar disponíveis no Banco de Dados, e assim estarem disponíveis para outros produtos que as compartilham.
Nota
Nas Filas TaskManagerFactory e TaskManagerValidationFactory, a configuração Maximum pool size indica a quantidade máxima de conexões que o GlassFish abrirá para o OpenMQ - recurso para troca de mensagens. Isto quer dizer que, pode-se ter um Maximum pool size de 5 e ter 50 processos executando ao mesmo tempo no servidor. Isso implica em termos 50 conexões banco sendo utilizadas. Sendo assim, quanto menor o número de conexões que o GlassFish abrir para o OpenMQ, menos processos estarão sendo executados, pois menos mensagens serão consumidas.