java ee message driven beans programação com objetos distribuídos (cmp167) trabalho final eduardo...

40
Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Upload: domingos-aquino-espirito-santo

Post on 07-Apr-2016

216 views

Category:

Documents


2 download

TRANSCRIPT

Page 1: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Java EEMessage Driven Beans

Programação com Objetos Distribuídos (CMP167)

Trabalho Final

Eduardo Martins Machado

Page 2: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 2

Message Driven Bean

IntroduçãoO que é?Quando usar?O JMSComparação com outros BeansComo funciona um MDBCriando um MDB...

Page 3: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 3

Introdução

A message-driven bean (MDB) é um bean que permite aplicativos JEE processar mensagens de forma assíncrona.

Um MDB funciona “ouvindo” o Java Message Service (JMS), esperando por mensagens.

As mensagens podem ser enviadas por qualquer tipo de componente JEE: aplicação cliente, outro bean, um componente Web, uma aplicação JMS ou até mesmo um sistema que não use a tecnologia JEE.

MDB atualmente só processa mensagens do JMS.

Page 4: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 4

O que é?

MDB não salva dados dos clientes (stateless), fica no servidor (server-side), é transaction-aware para processar mensagens do JMS de forma assíncrona.

MDB é responsável por processar mensagens do JMS, enquanto o seu container cuida de forma transparente da gerência de seus componentes: transações, segurança, recursos, concorrência e reconhecimento de mensagens.

Page 5: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 5

O que é?

A principal característica de um MDB é que ele é capaz de processar mensagens de forma concorrente (paralelamente).

Isto proporciona uma enorme vantagem sobre clientes JMS tradicionais, que precisam ser construídos de forma a gerenciarem recursos, transações e segurança em um ambiente multithreaded.

O container MDB do EJB gerencia concorrência de forma automática. Assim, pode-se receber várias mensagens do JMS de várias aplicações e processá-las concorrentemente (várias instâncias do MDB podem ser executadas ao mesmo tempo no container).

O MDB é um EJB completo, assim como um session bean ou um entity bean; apesar de algumas diferenças.

Enquanto um MDB tem uma classe e um descritor XML, este não tem interface de componentes (não usa RMI).

Page 6: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 6

O que é?

Page 7: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 7

O que é?

Page 8: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 8

O que é?

@PostConstruct

@PreDestroy

Page 9: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 9

Quando usar?

Session beans e entity beans permitem o envio e recebimento de mensagens de forma síncrona(mas não assíncrona).

Para evitar bloquear recursos do servidor, é mais eficiente não usar recebimento síncrono no lado do servidor.

Para prover tal característica, deve-se usar um message-driven bean.

Page 10: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 10

O JMS

O Java Message Service, é um sistema que proporciona comunicação entre sistemas através de mensagens.

O uso de mensagem para comunicação é muito útil em sistemas distribuídos com acoplamento muito baixo entre os componentes, o que facilita a extensibilidade. Além disso, as mensagens são: Assíncrona: O JMS pode entregar a mensagem para um

cliente assim que esta chega. Confiabilidade: A API JMS assegura que a mensagem é

entregue uma e somente uma vez.

Page 11: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 11

O JMS

Quando usar comunicação através de mensagens aos invés de outras tecnologias (como RMI)?

Componentes independentes de informações de interfaces de outros componentes.

Aplicação funcional mesmo que alguns componentes não estejam online.

O modelo de negócio da aplicação permite que um componente envie dados a outro e não bloqueie na espera da resposta. Ou seja, não interreompe a lógica de negócio.

Page 12: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 13

O JMS

Page 13: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 14

Comparação com outros Beans

MDB Message Driven Bean SLSB Stateless Session Bean SFSB Stateful Session Bean BMP Bean-Managed Persistence CMP Container-Managed Persistence

Feature MDB SLSB SFSB BMP CMP

State type Stateless Stateless Stateful N/A N/A

Instance pooling Yes Yes No Yes Yes

Transaction Transaction aware

Transaction aware

Transaction aware

Transactional Transactional

Local and remote interfaces No Yes Yes Yes Yes

Type of communication Aynchronous Synchronous Synchronous Synchronous Synchronous

Communication method JMS messages RMI-IIOP RMI-IIOP RMI-IIOP RMI-IIOP

Business method onMessage() zero or more zero or more zero or more zero or more

Page 14: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 15

Comparação com outros Beans

Comparação entre diferentes requisitos, e tipos de EJB que atendem a estes, de diferentes arquiteturas de sistemas de mensagens.

A lista acima é apenas uma análise simplificada das arquiteturas.

  MDB JMS JavaMail

Asynchrony (receive) x    

Asynchrony (send) x x x

Concurrency x    

EJB Transactional Support   x x

E-mail Support     x

Guaranteed Delivery x x x

Non-JMS Client Access (RMI)   x(1)  

Stateful Message Sender   x(2)  

(1) com Session Bean(2) com Stateful Session Bean

Page 15: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 17

Como funciona um MDB

O código de uma classe MDB requer o seguinte para codificação:

deve ser “anotada” com @MessageDriven se não usar um descritor de desenvolvimento.

tem que ser pública.

não pode ser abstract ou final.

tem que ter o construtor padrão (sem argumentos).

não pode definir o método finalize.

é recomendado que o MDB implemente a interface MDB para o tipo de mensagem que se quer escutar.

Page 16: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 18

Como funciona um MDB

Deve-se escolher o modelo de troca de mensagens mais adequado para o sistema.

Modelos de mensagens: leitores/escritores: tópico (topic) 1-*

ponto-a-ponto: fila (queue) 1-1

Page 17: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 19

Como funciona um MDB

Tipos de mensagens:

Tipo de Mensagem Estrutura de dados compatível

TextMessage java.lang.String

ObjectMessage objeto Java serializável

BytesMessage array de bytes

StreamMessage stream de tipos primitivos Java (int, double, char, etc.)

MapMessageConjunto de pares name-value. Os valores tem que ser tipos primitivos Java ouseus encapsulamentos OO (wrappers), como Integer, Float, etc.

Page 18: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 20

Como funciona um MDB

Page 19: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 21

Como funciona um MDB

Page 20: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 22

Como funciona um MDB

Page 21: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 23

Criando um MDB...

Page 22: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 24

Criando um MDB...

A aplicação exemplo usa um MDB para receber e processar mensagens para a fila, enviadas por um servlet.

A aplicação usa um servlet para enviar mensagens para o MDB e para exibir uma listagem das mensagens enviadas.

O exemplo é uma forma interessante de ver como se pode usar beans para integrar diferentes sistemas usando troca de mensagens, pois usa módulos EJB e web.

Page 23: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 25

Criando um MDB...

Módulo EJB:unidade de persistência (XML)classe do Entity Beanclasse do MDBclasse do Session Bean (Façade)

Módulo Web:servlet de listagemservlet de postagem

Page 24: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Módulo EJB

Page 25: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 27

Criando um MDB...

Persistence.xml

Page 26: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 28

Criando um MDB...

NewsEntity.java:

Page 27: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 29

Criando um MDB...

NewMessage.java:

Page 28: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 30

Criando um MDB...

NewMessage.java:

Page 29: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 31

Criando um MDB...

Padrão de Projeto Façade:

Page 30: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 32

Criando um MDB...

NewsEntityFacadelocal.java:

Page 31: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 33

Criando um MDB...

NewsEntityFacade.java:

Page 32: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Módulo Web

Page 33: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 35

Criando um MDB...

web.xml:

Page 34: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 36

Criando um MDB...

ListNews.java:

Page 35: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 37

Criando um MDB...

PostMessage.java:

Page 36: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 38

Criando um MDB...

PostMessage.java:

Page 37: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 39

Criando um MDB...

PostMessage.java:

Page 38: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 40

Observações

A especificação EJB 3.0 fez muitos avanços e realmente tornou o desenvolvimento de beans bem mais “agradável”, principalmente pelo foco em objetos Java simples (POJOs).

A nova versão do Sun Java System Application Server PE 9.0 simplificou bastante a gerência do servidor.

Documentação para aprendizado sobre o servidor de aplicação da Sun um pouco complexa.

Apesar de já estar presente na especificação EJB desde a versão 2.0, pelos trabalhos e exemplos estudados, ainda parece uma tecnologia pouco divulgada, apesar de muito eficiente e extremamente flexível.

Para a última especificação EJB (atualmente 3.0), existem muito poucos artigos sobre MDB explorando a forma mais simples de construção deste bean (usando Java annotations).

Page 39: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 41

Referências

1. Netbeans.org

2. Java Home da Sun

3. Sun J2EE Tutorial

4. Padrão de Projeto Façade

5. O'Reilly OnJava - Message Driven Bean 2.0

6. Enterprise Java Bean - Capítulo13 - O'Reilly Online Catalog

7. Tutorial sobre Message Driven Bean do Pramati JEE Server

Page 40: Java EE Message Driven Beans Programação com Objetos Distribuídos (CMP167) Trabalho Final Eduardo Martins Machado

Message-Driven Bean 42

Referências

8. WebLogic - Usando Message Driven Beans

9. Oracle - How-To Develop a Message Driven Bean using EJB 3.0

10. BEA WebLogic Server 8.1 Documentation - Programming Enterprise JavaBeans

11. Wiki Enterprise JavaBean

12. DevX - EJB Messaging, Part II: Message-Driven Beans

13. WebSphere Studio: Part 1 -- JMS and Message-Driven Beans

14. Prentice Hall - Professional Technical Reference - Developing Message-Driven Beans

15. Apresentação sobre MDB da UFRJ (somente no cache do Google)