MDB

1.755 visualizações

Publicada em

Visão geral de message-driven beans.

Publicada em: Tecnologia, Negócios
0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
1.755
No SlideShare
0
A partir de incorporações
0
Número de incorporações
8
Ações
Compartilhamentos
0
Downloads
39
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide



















































































  • MDB

    1. 1. MDB Message-Driven Beans
    2. 2. (As)síncrona • Java RMI (comunicação síncrona) • JMS (Java Message Service) (comunicação assíncrona)
    3. 3. Modelos de Comunicação Assíncrona • Point-to-Point (PTP) • Queue destination • Publish/Subscribe • Topic destination
    4. 4. Point-To-Point • Produtor cria mensagem • Mensagem entregue a um destino (neste caso um queue) • Mensagem é colocada em “fila” • MOM (Message-Oriented Middleware) entrega a mensagem a um consumidor registrado no destino
    5. 5. Publish/Subscribe • Mensagem é entregue a um destino (neste caso, um topic) • MOM entrega a mensagem a todos os consumidores subscritos no tópico • Uma mensagem, vários consumidores
    6. 6. Casos (queue) • Vários consumidores podem enviar mensagens para várias filas (queues) • Garantia Cada mensagem é entregue e consumida por apenas um consumidor • Mensagem é retida na queue até que haja um consumidor interessado
    7. 7. Casos (publish/ subscribe) • Mensagem tem como destino um tópico • Vários consumidores podem estar registrados no tópico • Se não há consumidores, a mensagem não é retida (exceto se a subscrição for durável)
    8. 8. Componentes de JMS • JMS provider (implementa a especificação JMS) • Clientes JMS: enviam/recebem msgs • Mensagens: objetos usados para troca de informações entre clientes JMS • Objetos administrados (administração)
    9. 9. Mensagem • Cabeçalho (obrigatório) • Propriedades (opcional) • Corpo (opcional) • Contém a ser trocado (payload)
    10. 10. Tipos de mensagens • Message (mensagem sem corpo) • StreamMessage • MapMessage • TextMessage • ObjectMessage • ObjectMessage • BytesMessage
    11. 11. Passos para produzir • ConnectionFactory cria Connection • Connection cria Session • Session cria mensagem • Obtém Destination (queue ou topic) • Session cria MessageProducer para Destination • MessageProducer envia mensagem
    12. 12. Passos para receber • ConnectionFactory cria Connection • Connection cria Session • Session cria mensagem • Obtém Destination (queue ou topic) • Session cria MessageConsumer para Destination • MessageConsumer recebe mensagem
    13. 13. Opção para receber • Síncrona • Chame Connection.start() • MessageConsumer.receive() • Assíncrona • Crie MessageListener • Registre MessageListener com o MessageConsumer • Chame Connection.start()
    14. 14. Esclarecimento • Troca de mensagens é assíncrona • A recepção propriamente dita de uma mensagem, após o envio assíncrono, pode ser • síncrona ou assíncrona (receive() ou via MessageListener)
    15. 15. Portanto... • Point-to-Point • Cliente1 envia msg para queue • Cliente2 consome msg da queue • Publish/subscribe • Cliente1 publica msg em topic • Cliente2,3,... assinam topic • MOM entrega msg aos clientes
    16. 16. Objetos administrados • Fábricas de conexão javax.jms.ConnectionFactory • Destinos (destination) javax.jms.Destination
    17. 17. Subinterfaces de javax.jms.ConnectionFactory • javax.jms.QueueConnectionFactory • javax.jms.TopicConnectionFactory
    18. 18. Cliente • Recurso JNDI de nome x é injetado em cf (código abaixo) • @Resource(mappedName=”x”) private static ConnectionFactory cf;
    19. 19. Cliente • Destino ou fonte de mensagens (javax.jms.Destination) • @Resource(mappedName=”d”) private static Queue queue; • @Resource(mappedName=”f”) private static Topic topic;
    20. 20. Criando conexão • Um ConnectionFactory permite criar uma conexão com o JMS provider • javax.jms.Connection (representa com JMS provider) • Connection c = cf.createConnection();
    21. 21. Conexão (detalhe) • Conexão deve ser fechada Connection.close() • Fecha sessões, produtores e consumidores associados • Antes de consumir mensagens Connection.start()
    22. 22. Sessão • Contexto (single-threaded) para produzir e consumir mensagens • Agrupa conjunto de envios e recepções de mensagens em transação • Uma sessão é criada a partir de uma conexão
    23. 23. Criando uma Session • javax.jms.Session s; • s = c.createSession(false,Session.AUTO_ACKNOWLEDGE); • false (sessão não é executada no contexto de uma transação) • Session.AUTO_ACKNOWLEDGE (mensagem foi consumida, ou seja, receive() ou onMessage(Message) sem exceções)
    24. 24. Usos de Session • Criar MessageProducer • Criar MessageConsumer • Criar mensagens (Message) • Criar browsers (Queue) Consultar msgs sem removê-las • Criar Queues e Topics temporários
    25. 25. MessageProducer • Session.createProducer(Destination) • javax.jms.Destination (subinterfaces) • javax.jms.Queue • javax.jms.Topic
    26. 26. MessageConsumer • Session.createConsumer(Destination) • javax.jms.Destination (subinterfaces) • javax.jms.Queue • javax.jms.Topic
    27. 27. Com um produtor... produtor.send(Message)
    28. 28. Com um consumidor... Síncrono Message consumidor.receive() Assíncrono consumidor.setMessageListener(listener)

    ×