java ee message driven beans programação com objetos distribuídos (cmp167) trabalho final eduardo...
TRANSCRIPT
Java EEMessage 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...
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.
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.
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).
Message-Driven Bean 6
O que é?
Message-Driven Bean 7
O que é?
Message-Driven Bean 8
O que é?
@PostConstruct
@PreDestroy
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.
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.
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.
Message-Driven Bean 13
O JMS
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
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
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.
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
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.
Message-Driven Bean 20
Como funciona um MDB
Message-Driven Bean 21
Como funciona um MDB
Message-Driven Bean 22
Como funciona um MDB
Message-Driven Bean 23
Criando um MDB...
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.
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
Módulo EJB
Message-Driven Bean 27
Criando um MDB...
Persistence.xml
Message-Driven Bean 28
Criando um MDB...
NewsEntity.java:
Message-Driven Bean 29
Criando um MDB...
NewMessage.java:
Message-Driven Bean 30
Criando um MDB...
NewMessage.java:
Message-Driven Bean 31
Criando um MDB...
Padrão de Projeto Façade:
Message-Driven Bean 32
Criando um MDB...
NewsEntityFacadelocal.java:
Message-Driven Bean 33
Criando um MDB...
NewsEntityFacade.java:
Módulo Web
Message-Driven Bean 35
Criando um MDB...
web.xml:
Message-Driven Bean 36
Criando um MDB...
ListNews.java:
Message-Driven Bean 37
Criando um MDB...
PostMessage.java:
Message-Driven Bean 38
Criando um MDB...
PostMessage.java:
Message-Driven Bean 39
Criando um MDB...
PostMessage.java:
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).
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
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)