Introducao EJB 3

75
Slide 1 Globalcode Mini-curso Gratuito

description

MC09 - Introdução EJB 3Globalcode / VOffice

Transcript of Introducao EJB 3

Page 1: Introducao EJB 3

Slide 1Globalcode

Mini-curso Gratuito

Page 2: Introducao EJB 3

Slide 2Globalcode

IntroduIntroduççãoão

Enterprise Java Beans (EJB) 3.0Enterprise Java Beans (EJB) 3.0

Mini-curso Gratuito

Page 3: Introducao EJB 3

Slide 3Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 4: Introducao EJB 3

Slide 4Globalcode

Rodrigo Rodrigo CândidoCândido dada Silva Silva –– [email protected]@gmail.com

TrabalhaTrabalha: : ArquitetoArquiteto Java / Java / InstrutorInstrutor

ExperiênciaExperiência: : 8 8 anosanos nana áárearea de de desenvolvimentodesenvolvimento

de de sistemassistemas, , trabalhandotrabalhando com Java com Java desdedesde 2001;2001;

CertificaCertificaççõesões: : SCJA, SCJP, SCWCD, SCBCD, SCEASCJA, SCJP, SCWCD, SCBCD, SCEA

Hobby Hobby FavoritoFavorito: : FutebolFutebol, Praia, , Praia, FilmesFilmes, etc, etc

Palestrante

Page 5: Introducao EJB 3

Slide 5Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 6: Introducao EJB 3

Slide 6Globalcode

Plataforma Java EE

• Suporte ao desenvolvimento de aplicações “enterprise”

� Aplicações distribuídas, seguras, escaláveis, de alta disponibilidade e com

baixo custo de manutenção

• Plataforma para desenvolvimento de componentes paraaplicações em multicamadas

� Enterprise JavaBeans

� JavaServer Pages

� Servlets

• Componentes “rodam” em um servidor Java EE

� Gerencia e oferece serviços de alto nível aos componentes por meio de

Containers

� container � segue uma especificação padrão

Page 7: Introducao EJB 3

Slide 7Globalcode

Plataforma Java EE

• Arquitetura em camadas

Page 8: Introducao EJB 3

Slide 8Globalcode

Plataforma Java EE

• Containers Java EE

Page 9: Introducao EJB 3

Slide 9Globalcode

Plataforma Java EE

• Serviços oferecidos pelos containers:

� Escalabilidade

� Gestão de memória, ciclo de vida de objetos e estado de objetos

� Conexões, Transações, Serviço de nomes

� Segurança

� Tolerância a falhas

� Integração

� WebServices

� Clustering

� Alta disponibilidade

� Confiabilidade

� …

Page 10: Introducao EJB 3

Slide 10Globalcode

Plataforma Java EE

• Servidores 100% compatíveis com a especificação Java EE 5

Page 11: Introducao EJB 3

Slide 11Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 12: Introducao EJB 3

Slide 12Globalcode

Rede LocalJVM + Container EE

Regras de Negócio

Java Web

Swing / JavaFX

Web Browser

web

Cliente SOA / WS

Porque Precisamos de EJB?

Conceitos Iniciais (EJB)

Page 13: Introducao EJB 3

Slide 13Globalcode

Conceitos Iniciais (EJB)

• Plataforma para criação de aplicações de negócio portáveis,

robustas e reutilizáveis usando a linguagem de programação Java;

• Componente para construir aplicações sem precisar reinventar uma série de recursos e serviços (transações, segurança,

persistência);

• Modelo de alto nível para objetos distribuídos (computação

distribuída);

• Padrão de mercado para componentes de negócio;

• É o CICS do Java.

Page 14: Introducao EJB 3

Slide 14Globalcode

Rede LocalJVM + Container EE

EJB Session Bean

Java Web

Swing / JavaFX

Web Browser

web

Cliente SOA / WS

Componentes de Negócio Compartilhados

Conceitos Iniciais (EJB)

Page 15: Introducao EJB 3

Slide 15Globalcode

TCP / IP

Aplicação

Apresentação

Transporte

rede

EJB Server / Container

JRMP / RMI - IIOP

java.net

java.rmi

javax.ejb

Nív

elpro

gra

mação

Conceitos Iniciais (EJB)

Page 16: Introducao EJB 3

Slide 16Globalcode

Seg

ura

nça

Co

ntr

ole

Tra

nsacio

nal

Escala

bilid

ad

e

Dados Legados

EJB

EJBSession Bean

Config. de Ambiente

Middleware de

Mensagens

Conceitos Iniciais (EJB)

Infra Estrutura do Container

Page 17: Introducao EJB 3

Slide 17Globalcode

• Tipos de EJB:

�Session Bean

� Representa um simples processo de negócio

�Message-Driven Bean

� Trabalha de forma assíncrona

�Entity Bean

� Representa um objeto persistente

� Definido pela especificação JPA

Conceitos Iniciais (EJB)

Page 18: Introducao EJB 3

Slide 18Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 19: Introducao EJB 3

Slide 19Globalcode

• Representa um processo de negócio (regra de negócio);

• Pode ser do tipo Stateless ou Stateful;

• Stateless

� Não mantém estado de conversão com o cliente;

� Não tem compromisso de manter uma sessão;

� Não devemos utilizar atributos de negócio, somente atributos técnicos em

cache;

� É um EJB econômico;

• Stateful

� Mantém estado de conversão com o cliente;

� Cada cliente terá uma instancia do EJB exclusiva, desde a criação até a

remoção;

� Podemos ter atributos de negócio com métodos getters e setters;

Session Bean

Page 20: Introducao EJB 3

Slide 20Globalcode

Session Bean

• Stateless (sem estado)

Período que uma instancia do EJB fica “preso” a um cliente

Page 21: Introducao EJB 3

Slide 21Globalcode

Session Bean

• Stateless (sem estado)

Page 22: Introducao EJB 3

Slide 22Globalcode

Session Bean

• Stateful (com estado)

Período que umainstancia do EJB fica“preso” a um cliente

Page 23: Introducao EJB 3

Slide 23Globalcode

Session Bean

• Stateful (com estado)

Page 24: Introducao EJB 3

Slide 24Globalcode

Session Bean

• Clientes acessam o Session Bean através de uma interface Java

simples (POJI);

• Métodos (serviços) são publicados através desta interface;

• A interface deve ser implementada pela classe do Bean;

• Tipos de Interfaces

� Local (@Local)

� Somente acesso local (mesma JVM);

� Cliente pode ser um componente Web ou outro EJB;

� Localização não é transparente (não suporta clusterização).

� Remota (@Remote)

� Suporta acesso remoto (fora da JVM);

� Cliente pode ser um componente Web, outro EJB ou aplicação desktop;

� Transparência de localização (suporta clusterização).

Page 25: Introducao EJB 3

Slide 25Globalcode

Session Bean

• Local Interface

• Remote Interface

Page 26: Introducao EJB 3

Slide 26Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 27: Introducao EJB 3

Slide 27Globalcode

Message-Driven Bean (MDB)

• EJB que é acionado de forma assíncrona;

• Trabalha totalmente vinculado ao conceito de

utilização de um serviço de mensagens;

• Utiliza a API do Java Message Service (JMS) em

conjunto com Session Beans;

• Facilita a quebra de acoplamento entre o cliente e o

destino;

• Serviços de mensagens introduzem novos conceitos de

arquiteturas e aumenta a confiabilidade da solução;

Page 28: Introducao EJB 3

Slide 28Globalcode

Message-Driven Beans (MDB)

• Vejamos o comparativo de uma chamada síncrona, e uma

chamada assíncrona utilizando um serviço de mensagens

Síncrono Assíncrono

Page 29: Introducao EJB 3

Slide 29Globalcode

Message-Driven Beans (MDB)

• Existem dois tipos de destinos JMS

� Point-to-point (queue): uma mensagem enviada para a fila será consumida

apenas por um cliente;

� Publish-subscriber (topic): uma mensagem pode ser recepcionada por

múltiplos clientes;

Page 30: Introducao EJB 3

Slide 30Globalcode

Message-Driven Beans (MDB)

• MDB fica anexado a uma fila ou tópico;

• Ao receber uma mensagem, o EJB será acionado para consumir a

mensagem, o container chama o método onMessage(...) do EJB;

• Vantagens:

� Limitar o número de EJBs consumidores, evitando super-consumo do servidor;

� Requisições dos usuários são armazenadas em filas e processadas conforme

capacidade do servidor;

Page 31: Introducao EJB 3

Slide 31Globalcode

Message-Driven Bean (MDB)

• Exemplo de um MDB

Page 32: Introducao EJB 3

Slide 32Globalcode

Message-Driven Bean (MDB)

• Como enviar uma mensagem

� Configurar um repositório de conexões;

� Abrir uma nova conexão;

� Criar uma sessão de envio;

� Criar um produtor de mensagens

associado a um destino;

� Criar uma nova mensagem;

� Solicitar ao produtor enviar a

mensagem para o destino associado.

Page 33: Introducao EJB 3

Slide 33Globalcode

Message-Driven Bean (MDB)

• Exemplo de um cliente JMS

Page 34: Introducao EJB 3

Slide 34Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 35: Introducao EJB 3

Slide 35Globalcode

Java Persistence API

• Primeira especificação (padrão) de mapeamento de objetos Java para base de dados relacional� Integração com outros frameworks

� Hibernate é uma implementação de JPA

� TopLink Essencials é uma implementação de JPA (RI)

• POJO (Plain Old Java Objects) ���� Entidades� Mapeamento via metadados (annotation Java 5)

• Pode ser utilizado fora de containres EJBs (ligthweigthcontainer)

• Uso de injeção de dependência ao invés de lookups JNDI

Page 36: Introducao EJB 3

Slide 36Globalcode

Java Persistence API

Page 37: Introducao EJB 3

Slide 37Globalcode

Java Persistence API

• Entidades JPA

Page 38: Introducao EJB 3

Slide 38Globalcode

Java Persistence API

• EntityManager (javax.persistence)

�Gerencia o ciclo de vida das entidades

(B) find / query(C) persist(D) clear / serialização(E) merge(F) remove

Page 39: Introducao EJB 3

Slide 39Globalcode

Java Persistence API

• PersistenceContext

�Conjunto de objetos “managed” associados a um

EntityManager

EntityManager PersistenceContext

obj1 obj4obj2 obj3obj5

MANAGED MANAGED MANAGED MANAGED

NEW / DETACHED

Page 40: Introducao EJB 3

Slide 40Globalcode

Java Persistence API

• Persistence Unit

�Uma unidade de persistência define um contexto de

funcionamento para os EntityManagers

Page 41: Introducao EJB 3

Slide 41Globalcode

Java Persistence API

• Exemplo de utilização de JPA

Page 42: Introducao EJB 3

Slide 42Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 43: Introducao EJB 3

Slide 43Globalcode

Injeção de Dependência

• Mecanismo de “injeção” de recursos necessários a um

componente de forma automática

�Sem a presença de instruções explícitas para acessar o

recurso

• Exemplo:

�O componente de negócios A depende do componente de

negócios B e do pool de conexões C.

AB

C

Page 44: Introducao EJB 3

Slide 44Globalcode

Injeção de Dependência

• Sem injeção de dependência:

�Código fonte do componente A contém instruções para

“buscar” o componente B e o recurso C.

A

B

C

Serviço de Nomes

“ejb/componenteB”

“jdbc/dataSourceC”

lookups

Page 45: Introducao EJB 3

Slide 45Globalcode

Injeção de Dependência

• Exemplo Sem Injeção de Dependência

Page 46: Introducao EJB 3

Slide 46Globalcode

Injeção de Dependência

• Com injeção de dependência

�Código do componente A não busca recursos e outros

componentes

�Devemos declarar as dependências de componentes e

recursos nos atributos ou métodos setters do componente A

�Container (Java EE) interpreta as dependências declaradas no

componente A e “injeta” os recursos e componentes

necessários

Page 47: Introducao EJB 3

Slide 47Globalcode

Injeção de Dependência

A

B

C

Serviço de Nomes

“ejb/componenteB”

“jdbc/dataSourceC”

injeção

class ComponenteA {

@EJB(name=“ejb/componenteB”) InterfaceB b;

@Resource(name=“jdbc/dataSourceC”) DataSource c;

}

Page 48: Introducao EJB 3

Slide 48Globalcode

Injeção de Dependência

• Exemplo de Utilização

Page 49: Introducao EJB 3

Slide 49Globalcode

Injeção de Dependência

�Quem pode receber injeção ?

� EJB, Interceptor

� Servlet, Filter, *Listener, JSP Tag Handler

� JSF Managed Beans

� Endpoints JAX-WS e Handlers

�O que pode ser injetado ?

� Referências a EJBs e a Web Services

� DataSource JDBC

� Destination e ConnectionFactory JMS

� UserTransaction

� EntityManager (JPA)

Page 50: Introducao EJB 3

Slide 50Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 51: Introducao EJB 3

Slide 51Globalcode

Callback Methods

• Anotações para tratamento de eventos nas fases do ciclo de

vida dos EJBs;

• Gerenciados pelo container Java EE;

• Substitui os antigos métodos definidos nas interfaces do EJB

2.x e implementados pela classe EJB;

� @PostConstruct

� Após o container criar uma nova instância de um EJB

� @PrePassivate

� Imediatamente antes do EJB sofrer o processo de passivação

� @PostActivate

� Imediatamente depois do EJB sofrer o processo de ativação

� @PreDestroy

� Antes do EJB ser destruído pelo container

Page 52: Introducao EJB 3

Slide 52Globalcode

Callback Methods

• Exemplo de Utilização

Page 53: Introducao EJB 3

Slide 53Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 54: Introducao EJB 3

Slide 54Globalcode

Transações

• São unidades de trabalho com propriedades ACID

�Atomicidade

�Consistência

� Isolamento

�Durabilidade

• São gerenciadas pelo container EJB (JTA)

• Transações nos EJB podem ser

�Container Managed Transaction (CMT) - (default)

� Definida declarativamente

�Bean Managed Transaction (BMT)

� Programada através UserTransaction API

Page 55: Introducao EJB 3

Slide 55Globalcode

Transações

• Configurações Transacionais para CMT

�Required (default)� Sempre deve rodar dentro de uma transação

�RequiresNew� Sempre deve rodar dentro de sua própria transação

�Mandatory� Deve ser chamado dentro de uma transação já iniciada

�Supports� Utiliza transação somente se uma transação já estiver acontecendo

�Not Supported� Executa sem nenhuma transação

�Never

� Não poderá ser executado caso esteja acontecendo uma transação

Page 56: Introducao EJB 3

Slide 56Globalcode

Transações

• Exemplo de Utilização de CMT

Page 57: Introducao EJB 3

Slide 57Globalcode

Transações

• Exemplo de Utilização de BMT

Page 58: Introducao EJB 3

Slide 58Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 59: Introducao EJB 3

Slide 59Globalcode

Segurança

• Java EE suporta todos os níveis de segurança;

• Utiliza o Java Authentication and Autorization Service (JAAS);

• Consiste no mecanismo de autenticação e autorização de

usuários, baseado em uma identidade e roles (perfil de acesso)

associados.

Page 60: Introducao EJB 3

Slide 60Globalcode

Segurança

• Exemplo de Verificações de Segurança Declarativa

Page 61: Introducao EJB 3

Slide 61Globalcode

Segurança

• Exemplo de Verificações de Segurança Programática

Page 62: Introducao EJB 3

Slide 62Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 63: Introducao EJB 3

Slide 63Globalcode

Interceptors

• Novidade introduzida com o EJB 3.0;

• Permite que um código customizado seja aplicado para um EJB;

• Utiliza conceitos de programação orientada à aspectos (AOP);

• Intercepta a chamada do método do EJB para executar um

código intermediário;

• Utiliza anotações plugáveis nos EJBs;

• Podem ser configurados no próprio Bean ou em classes

externas;

• Exemplos de utilização

� Auditoria;

� Logging;

� Segurança customizada;

Page 64: Introducao EJB 3

Slide 64Globalcode

Interceptors

• Exemplo de Classe Interceptor

Page 65: Introducao EJB 3

Slide 65Globalcode

Interceptors

• Exemplo de Configuração para Interceptação

Page 66: Introducao EJB 3

Slide 66Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 67: Introducao EJB 3

Slide 67Globalcode

Timers

• Desde a versão 1.4 foi criado o serviço de timer para os

componentes EJB;

• Permite a programação de tarefas para serem executadas em

um determinado horário (processos agendados);

• Equivalente a CRONTAB, Quartz, etc;

• É gerenciado pelo container Java EE;

• Os tipos de agendamentos suportados são:

� Tarefa para execução única (one-shot);

� Tarefas periódicas com taxa fixa (fixed-rate);

• Exemplos de utilização de agendamento

� Realizar backups periódicos;

� Rodar a folha de pagamento;

� Enviar e-mails de expiração de senhas para usuários.

Page 68: Introducao EJB 3

Slide 68Globalcode

Timers

• Para criar o agendamento, o EJB deve se registrar no serviço de

timer, criando um novo timer;

• Além disto o EJB precisa definir um método Timeout

responsável por realizar a executação da tafera (utilizando

@Timeout);

• O serviço de timer irá gerenciar o agendamento, e uma vez queidentifique o target, ele deverá chamar o método responsável

pela execução da tarefa.

Page 69: Introducao EJB 3

Slide 69Globalcode

Timer

• Exemplo de EJB Timer

Page 70: Introducao EJB 3

Slide 70Globalcode

Agenda

Plataforma Java EE

Conceitos Iniciais (EJB)

Session Bean

Message-Driven Bean (MDB)

Java Persistence API (JPA)

Serviços Disponíveis

Injeção de Dependência

Callback Methods

Transações

Segurança

Interceptors

Timers

Conclusões

Perguntas e Respostas

Page 71: Introducao EJB 3

Slide 71Globalcode

Problemas das especificações EJB < 3.0

• Muitas Interfaces• Interface Home Remota e Local• Interfaces de Ciclo de Vida

• SessionBean• EntityBean• MessageDrivenBean

• Interface S.E.I. (Web Service JAX-RPC)

• Deployment DescriptorsA

lta

B

u

ro

c

ra

c

ia

A

lta

B

u

ro

c

ra

c

ia

A

lta

B

u

ro

c

ra

c

ia

A

lta

B

u

ro

c

ra

c

ia

Conclusões

Page 72: Introducao EJB 3

Slide 72Globalcode

Objetivos da especificação JSR-220

• Simplificar o trabalho do desenvolvedor• Defaults programáticos

• Meta-dados = Annotations javax.ejb.*

• Configuration by Exception

• Injeção de Dependência ( menos lookup )

• Menos Interfaces Obrigatórias

• Interfaces Home• Interfaces de ciclo de vida

M

a

is

P

r

o

d

u

t

iv

id

a

d

e

M

a

is

P

r

o

d

u

t

iv

id

a

d

e

M

a

is

P

r

o

d

u

t

iv

id

a

d

e

M

a

is

P

r

o

d

u

t

iv

id

a

d

e

Conclusões

Page 73: Introducao EJB 3

Slide 73Globalcode

• EJB’s:

�Componentes distribuídos que podem rodar em vários

servidores;

�Clustering;

�Persistência automática utilizando JPA;

�Suporte transacional;

�Segurança declarativa;

�Programação AOP;

�Serviços de agendamento de tarefas;

�Tunning de Threads e entidades de banco;

�Otimização de memória e threads;

• E você ainda esta pensando se vale a pena?

Conclusões

Page 74: Introducao EJB 3

Slide 74Globalcode

Perguntas & Respostas

Page 75: Introducao EJB 3

Slide 75Globalcode

Mini-curso Gratuito

Agradecemos a presença!

vofficejava.googlecode.com