Beans acionados por mensagens – manipulação de transação com o barramento de integração de serviços

Os beans orientados a mensagens podem manipular mensagens nos destinos (ou nós de extremidade) no escopo de uma transação.

Há três casos possíveis, com base na configuração do descritor de implementação de bean acionado por mensagens escolhida: transação gerenciada por contêiner (obrigatória), transação gerenciada por contêiner (não suportada) e transação gerenciada por bean.

Nas configurações do descritor de implementação de bean acionado por mensagens, é possível escolher se o bean acionado por mensagens gerencia suas próprias transações (transação gerenciada por bean) ou se um contêiner gerencia transações em nome do bean acionado por mensagens (transação gerenciada por contêiner). Para obter informações sobre as configurações do descritor de implementação do bean acionado por mensagens, consulte os atributos do descritor de implementação do bean acionado por mensagens. Se você optar por transações gerenciadas por contêiner, no bloco de notas do descritor de implementação, é possível selecionar um tipo de transação de contêiner para cada método do bean para determinar se as transações de contêiner são necessárias ou não suportadas. O tipo de transação de contêiner padrão é necessário.

Transação gerenciada por contêiner (obrigatória)

Neste caso, o servidor de aplicativos inicia uma transação global antes de ler qualquer mensagem recebida do destino e antes de o método onMessage() do bean acionado por mensagens ser chamado pelo servidor de aplicativos. Isso significa que outros EJBs chamados, por sua vez, pela mensagem e interações com recursos como bancos de dados podem todos ter o escopo definido dentro dessa única transação global, na qual a mensagem que chega foi obtida.

Se esse fluxo do aplicativo for concluído com êxito, a transação global será confirmada. Se o fluxo não for concluído com êxito (se a transação for marcada para retrocesso ou se ocorrer uma exceção de tempo de execução), a transação será retrocedida e a mensagem recebida será retrocedida para o destino do bean acionado por mensagens.

Transação gerenciada por contêiner (não suportada)

Nesse caso não há nenhuma transação global, mas o provedor JMS ainda pode entregar uma mensagem a partir de um destino de bean acionado por mensagens para o servidor de aplicativos em uma unidade de trabalho. Você pode considerar isso como uma transação local, pois não envolve outros recursos em seu escopo transacional.

O servidor de aplicativos reconhece a entrega de mensagem na conclusão bem-sucedida do despacho onMessage() do bean acionado por mensagens (usando o modo de reconhecimento especificado pelo assembler do bean acionado por mensagens).

Entretanto, o servidor de aplicativos não executa um reconhecimento se uma exceção de tempo de execução não verificada for lançada a partir do método onMessage(). Assim, a mensagem é retrocedida para o destino do bean acionado por mensagens (ou é confirmada e excluída)?

A resposta depende se o ponto de sincronização é usado por seu provedor JMS e pode variar dependendo da plataforma operacional (em particular, a plataforma operacional z/OS pode contribuir para um comportamento diferente aqui).

Se o seu provedor JMS estabelecer um ponto de sincronização em torno do consumo de mensagens do bean acionado por mensagens nesse caso de transação gerenciada por contêiner (não suportado), a mensagem será retrocedida no destino após uma exceção não verificada.

Se um ponto de sincronização não for utilizado, a mensagem será excluída do destino depois de uma exceção não verificada.

Para obter informações relacionadas, consulte a nota técnica "O comportamento do MDB no z/OS é diferente de distribuído ao obter mensagens não persistentes no ponto de sincronização" em http://www.ibm.com/support/docview.wss?uid=swg21231549.

Transação gerenciada por bean

Nesse caso, a ação é semelhante ao caso de transação gerenciada por contêiner (não suportado). Embora possa haver uma transação do usuário neste caso, as transações de usuário iniciadas no despacho onMessage() do bean acionado por mensagens não incluem o consumo da mensagem do destino do bean acionado por mensagens dentro do escopo de transação. Para fazer isso, utilize o cenário da transação gerenciada por contêiner (obrigatória).


Ícone que indica o tipo de tópico Tópico de Conceito



Ícone de registro de data e hora Última atualização: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cmb_trans_sib
Nome do arquivo: cmb_trans_sib.html