Message Driven Beans e destinations associados  XML
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Autor Mensagem
gcobr
JavaEvangelist
[Avatar]

Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline

Pessoal

Minha dúvida sobre MDBs:

Qual é a diferença entre associar MDBs a Queues ou a Topics?

Se for Queue as messagens vão ser despachadas em ordem de chegada para os MDBs?
[Email] [MSN]
badjceo
Thread.start()

Membro desde: 20/08/2007 21:27:48
Mensagens: 40
Offline

Basicamente a diferença entre um topico e uma fila é a seguinte:

Enviando uma mensagem para um tópico vários consumidores podem receber essa mensagem
Enviando para uma fila , somente um consumidor vai recebe-la.


Ou seja: Tópico = um para muitos
Fila = um para um

Espero ter ajudado

Não tenho certeza, mas todas as mensagens tanto para tópicos quanto para filas irão ser enviadas em ordem.
gcobr
JavaEvangelist
[Avatar]

Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline

Você quer dizer que se um MDB estiver associado a uma fila, o container nunca vai criar mais do que uma instância deste MDB?

Pois aí, se ele criasse múltiplas instâncias do MDB, teríamos múltiplos consumidores recebendo, não é?

Além disso, com múltiplas instâncias, a próxima mensagem seria enviada para a próxima instância, antes que a primeira instância tivesse terminado de processar a mensagem anterior...

Esta parte para mim é a mais confusa, porque me parece que os app servers podem criar mais do que uma instância do MDB sim.

This message was edited 2 times. Last update was at 17/05/2008 08:25:15

[Email] [MSN]
Berkamps
Thread.start()

Membro desde: 01/09/2007 17:52:21
Mensagens: 46
Offline

É importante estar ciente também do comportamento do JMS quando têm 2 ou mais servidores em cluster:


1) Since JMS topics use the publich/subscribe model, it's possible thata a message sent to a JMS topic will be delivered to more than one consumer.
2) Many containers will create a pool of many message-driven bean instances to process multiple messages concurrently.
3) A container that subscribes to a topic consumer any given message only once, in other words, just to one bean instance of that MDB.
4) The JMS subsystem will treat each JMS message-driven bean container as a separate subscriber to the message.
5) This means that if the same JMS message-driven bean is deployed to many containers in a cluster, then each deployment of the LMS message-driven bean will consume a message from the topic it subscribes to.
6) If this is not the behavior that you want, you need to consume messages of a queue instead of a topic.

Desculpe por não ter traduzido para português...

Abraço.

SCJP 1.4
SCWCD 1.4
SCBCD 5.0
SCEA 5.0
OMG OCUP Fundamental
CFPS
[MSN]
gcobr
JavaEvangelist
[Avatar]

Membro desde: 21/01/2004 16:55:29
Mensagens: 305
Localização: São Paulo/SP
Offline

Certo Berkamps

Mas imaginando um cenário sem cluster:

1. Se o container criar mais do que uma instância do MDB e este MDB estiver associado a uma fila, o container garante que não vai entregar a mesma mensagem para mais do que uma instância?
2. Ainda no caso de uma fila, caso o container crie mais do que uma instância do MDB, ele vai entregar a próxima mensagem da fila para outra instância antes que a primeira tenha sido completamente processada? Se isso for assim, a segunda mensagem não pode depender de algum estado que a primeira tenha mudado no sistema (no banco de dados, por exemplo), certo?

Você poderia informar de onde copiou o texto que você colou no post anterior?

Obrigado.
[Email] [MSN]
Berkamps
Thread.start()

Membro desde: 01/09/2007 17:52:21
Mensagens: 46
Offline

1. A resposta é sim
2. Não, isso a especificação não garante. O recebimento de mensagens pode acontecer concorrentemente.
A especificação EJB 3.0 diz: "Message-driven beans should therefore be prepared to handle messages that are out of sequence: for example, the message to cancel a reservation may be delivered before the message to make the reservation."

Não tenho a referência web das anotações anteriores, mas se encontrar do um post aki.

Abraço

SCJP 1.4
SCWCD 1.4
SCBCD 5.0
SCEA 5.0
OMG OCUP Fundamental
CFPS
[MSN]
 
Índice dos Fóruns » Java Enterprise Edition (Java EE)
Ir para:   
Powered by JForum 2.1.8 © JForum Team