![[AIX Solaris HP-UX Linux Windows]](../images/dist.gif)
![[IBM i]](../images/iseries.gif)
Evitando Tempos Limites de Transação no Modo Não ASF
Se seu sistema de mensagens for executado no modo não Application Server Facilities (não ASF), você deverá configurar a propriedade do serviço de transações Tempo Limite Total do Tempo de Vida da Transação e a propriedade customizada do serviço de listener de mensagens NON.ASF.RECEIVE.TIMEOUT corretamente, para evitar tempos limites de transação indesejados.
Antes de Iniciar
Para executar as etapas nesta tarefa, seu sistema de mensagens deverá estar em execução no modo não ASF. Para alterar do modo ASF para o modo não ASF, inclua a propriedade customizada NON.ASF.RECEIVE.TIMEOUT no serviço de listener de mensagens conforme descrito em Configurando o serviço listener de mensagens.
Sobre Esta Tarefa
Para WebSphere Application Server Versão 7 e posterior, as portas listener são estabilizadas. Para obter informações adicionais, leia o artigo
sobre recursos estabilizados. Você deve planejar migrar as configurações de implementação do bean acionado por mensagens do WebSphere MQ do uso de portas do listener para o uso de especificações de ativação. Para obter informações adicionais sobre como configurar as especificações de ativação para o modo não ASF, veja Configurando especificações de ativação para o modo não ASF. No entanto, você não deve iniciar esta migração até ter certeza de que o aplicativo não precisa funcionar nos servidores de aplicativos anteriores ao WebSphere Application Server Versão 7. Por exemplo, se você possuir um cluster do servidor de aplicativos com alguns membros na Versão 6.1 e alguns em uma versão posterior, não deverá migrar os aplicativos nesse cluster para usar as especificações de ativação até depois de ter migrado todos os servidores de aplicativos no cluster para a versão posterior.
Se seu sistema de mensagens estiver em execução no modo não ASF, para evitar tempos limites de transação não desejados, você deverá permitir uma quantidade suficiente de tempo para que o processamento seja concluído antes do tempo limite total do tempo de vida da transação ser atingido. Portanto, você deve certificar-se de que o valor especificado para a propriedade customizada do serviço de listener de mensagens NON.ASF.RECEIVE.TIMEOUT seja menor do que o valor especificado para a propriedade do serviço de transações Tempo Limite Total do Tempo de Vida da Transação e, também, que a diferença entre os valores das duas propriedades seja maior do que a quantidade de tempo que o método onMessage() do bean acionado por mensagens (MDB) demora para processar a mensagem.
Procedimento
- Para configurar a propriedade de serviço de transações Tempo Limite Total do Tempo de Vida da Transação, conclua a etapa 8 em Configurando propriedades de transação para um servidor de aplicativos.
- Para configurar a propriedade customizada de serviço de listener de mensagens NON.ASF.RECEIVE.TIMEOUT, clique em .
- Clique em NON.ASF.RECEIVE.TIMEOUT. A página Propriedades Gerais é exibida.
- Modifique o campo Valor. O valor de NON.ASF.RECEIVE.TIMEOUT deve ser especificado em milissegundos. Certifique-se de que o valor especificado, quando convertido em segundos (dividindo por 1000), seja menor do que o valor especificado para Tempo Limite Total do Tempo de Vida da Transação e que a diferença entre os valores das duas propriedades seja maior do que o número máximo de segundos que o método onMessage() de seu MDB demora para processar uma mensagem.
- Clique em OK.
- Pare e reinicie o servidor de aplicativos.
Exemplo
- A porta do listener inicia e aloca um encadeamento do conjunto de encadeamentos e cria uma transação no encadeamento.
- O encadeamento chama o método receive() para receber as mensagens.
- Após 110 segundos, uma mensagem aparece no destino.
- O encadeamento remove a mensagem do destino e chama o método onMessage() do MDB para iniciar o processamento da mensagem.
- Dez segundos depois, o tempo limite da transação é atingido. O servidor de aplicativos marca a transação para retrocesso.
- Cinco segundos mais tarde, o método onMessage() conclui o processamento da mensagem e tenta confirmar a transação.
- A quantidade total de tempo que decorreu desde que a transação foi iniciada é de 125 segundos (110 segundos esperando uma mensagem, mais 15 segundos para processar a mensagem). Como este tempo é mais longo do que o tempo limite da transação, o servidor de aplicativos evita que a transação seja confirmada e ela é retrocedida.