ejb3 - aula1 - intro

Upload: andreeamigos

Post on 06-Apr-2018

250 views

Category:

Documents


0 download

TRANSCRIPT

  • 8/3/2019 EJB3 - Aula1 - Intro

    1/45

    EJB 3 Introduo

    Prof. Dr. Francisco Isidro [email protected]

  • 8/3/2019 EJB3 - Aula1 - Intro

    2/45

    2

    Agenda

    Conceitos de EJB EJB como um framework e como um componente

    Por que EJB Beans de sesso e Beans de Entidades

    Tipos de beans, formas de implementao, padres de

    codificao Arquitetura das aplicaes EJB

  • 8/3/2019 EJB3 - Aula1 - Intro

    3/45

    3

    EJB Ento, o que isso?

    EJB Enterprise Java Beans

    uma plataforma de desenvolvimento de aplicaes

    corporativas Portvel

    Reutilizvel

    Escalvel

    2 provveis interpretaes Componente ou framework

    Idia central no ter que reinventar nada!

  • 8/3/2019 EJB3 - Aula1 - Intro

    4/45

    4

    EJB O que isso

    O interessante do EJB poder efetivamente terelementos para que as regras do negcio sejam

    efetivamente separadas da infra-estrutura(armazenamento, controle do ciclo de vida dosobjetos)

    Importante ressaltar que todos os EJB executam emuma mquina virtual especializada - container

  • 8/3/2019 EJB3 - Aula1 - Intro

    5/45

    5

    Por que o EJB?

    EJB fornece uma srie de servios j integrados, tais como: Integrao

    Controle de pool Thread-safety

    Gerenciamento de estado

    Envio de mensagens e interceptadores (logging, auditting)

    Transaes Segurana

    Acesso remoto (RMI e WebServices)

    Persistncia

  • 8/3/2019 EJB3 - Aula1 - Intro

    6/45

    6

    Por que EJB?

    Modelo de programao simplificado Anotaes ao invs de toneladas de XML descrevendo

    como os objetos devem ser implantados Injeo de Dependncia (DI)

    Possibilidade de incluso, em tempo de execuo de

    objetos ou recursos gerenciados pelo container, apenasatravs de uso de uma anotao

    Evita a escrita excessiva de cdigo para realizar umlookup de um objeto no container

  • 8/3/2019 EJB3 - Aula1 - Intro

    7/45

    7

    EJB como um componente

    No fundo o EJB um POJO (Plain-Old Java Object) comalguns recursos adicionais no visveis aplicao

    Propsito de encapsular de forma eficaz o comportamentoda aplicao Modelando as regras do negcio

    Sendo armazenado em meio persistente

    Idia de reutilizao comea a ficar mais atraente A aplicao (independente qual seja ou se est executando

    dentro do container ou no) apenas invoca o servio do

    Bean

  • 8/3/2019 EJB3 - Aula1 - Intro

    8/45

    8

    EJB como um Framework

    Beans residem em um container

    Juntos podem ser vistos como um framework que

    oferece servios, recursos e funcionalidades Entretanto algumas funcionalidades extrapolam a

    lgica do bean simplesmente

    Controle de transao, pool de objetos, persistncia Tudo isso pode ser acessvel atravs dos beans

    fazendo uso de anotaes

  • 8/3/2019 EJB3 - Aula1 - Intro

    9/45

    9

    O Container EJB

    Container Java EE

    WebContainer EJBContainer Prov. Persist

    Pgina JSP

    Componente JSF

    Credit Check EJB

    Cart EJB

    Entidade Cliente

    Entidade Catlogo

  • 8/3/2019 EJB3 - Aula1 - Intro

    10/45

    10

    Arquiteturas de aplicaes

    Aplicaes em camadas so extremamente teis portornarem elementos separados

    Quais elementos? Quem cuida do Armazenamento Quem cuida da seqncia das aes durante a regra do negcio

    Quem cuida da apresentao das informaes

    Separar estas funcionalidades diminui o acoplamento epermite um maior grau de interoperabilidade entre objetos

  • 8/3/2019 EJB3 - Aula1 - Intro

    11/45

    11

    Entendendo os Tipos de Beans

    Basicamente 3 tipos Beans de Sesso

    Beans Dirigidos por Mensagens Entidades

    Objetivo principal

    Saber organizar a aplicao, atribuindo servios,funcionalidades e papis especficos para cada caso

    Foco principal deste treinamento

    Beans de Sesso e Entidades

  • 8/3/2019 EJB3 - Aula1 - Intro

    12/45

    12

    Beans de Sesso

    Implementam as regras do negcio da aplicao

    Fornecem, como j vistos, elementos para o controle deconcorrncia,

    2 tipos de beans de sesso Stateless

    Exemplo: um pagamento de conta

    Statefull

    Exemplo: encher um carrinho de compras Formas distintas de se operar e com desempenhos distintos

    Container mantm informaes do histrico da execuo

  • 8/3/2019 EJB3 - Aula1 - Intro

    13/45

    13

    Beans Dirigidos por Mensagens

    Tambm implementam regras de negcio, porm de formaassncrona

    Para sistemas com uma maior necessidade de robustez ouque faam integraes com outros sistemas

    Forma de operao como produtor-consumidor

    Exemplo: Sistema de varejo, onde os PDAs enviam solicitaes de vendas

    e essas solicitaes so processadas para, posteriormente seremgeradas as notas fiscais

  • 8/3/2019 EJB3 - Aula1 - Intro

    14/45

    14

    Entidades

    Beans podem ter o contedo de seus atributosarmazenados em tabelas de um banco de dados

    Possibilidade de se mapear relacionamentos entretabelas atravs de anotaes no prprio bean

    Definio de atributos-chave e mapeamento dos

    atributos para as colunas das tabelas Uso do ORM Object Relationship Mapping

  • 8/3/2019 EJB3 - Aula1 - Intro

    15/45

    15

    Entidades

    2 elementos principais Entidade

    API EntityManager Entidades

    Contm os dados a serem armazenados e os respectivosmapeamentos para colunas/tabelas do banco de dados

    EntityManager Atua como um elemento de infra-estrutura, lendo estas

    especificaes e realizando as respectivas manipulaes na base(consulta, excluso, recuperao)

  • 8/3/2019 EJB3 - Aula1 - Intro

    16/45

    EJB 3 A Injeo de Dependncia

    Facilitando o uso de recursos

  • 8/3/2019 EJB3 - Aula1 - Intro

    17/45

    17

    A Injeo de Dependncia

    Em geral, quando se busca adicionar recursos emum Bean, utiliza-se o recurso JNDI

    JNDI Java Naming and Directory Interface Busca, dentro de um container, por um objeto ou um

    bean por seu nome

    Na ID, ao invs do EJB buscar, o container realizaesta busca e isso torna a programao muito maisrpida, pois toda a responsabilidade delegada aocontainer

  • 8/3/2019 EJB3 - Aula1 - Intro

    18/45

    18

    A injeo de Dependncia

    Busca

    EJB Busca JNDI

    Recursos

    Beans

    Injeo de

    Dependncia

    EJB

    Recursos

    BeansContainer Injeo

  • 8/3/2019 EJB3 - Aula1 - Intro

    19/45

    19

    A Injeo de Dependncia

    No modelo JNDI, sempre que o programador necessitar deum recurso ou bean adicional, ele deve realizar toda acodificao da busca Usando mdotos como Lookup da classe InitialContext e narrow

    da PortableRemoteObject

    Na ID, h a idia simples e elegante de deixar toda a lgica

    da busca e instanciao do recurso por conta do container Uso de annotations

  • 8/3/2019 EJB3 - Aula1 - Intro

    20/45

    Beans de Sesso

    Como implementar as regras do negciode forma simples e eficiente

  • 8/3/2019 EJB3 - Aula1 - Intro

    21/45

    21

    Beans de Sesso

    Stateless No preciso armazenar nenhum histrico de execuo

    Statefull A a conversa outra

    O questionamento bsico para diferenciar um e outro anecessidade de se armazenar informaes

    temporariamente por um tempo determinado e depoisconsolidar estas informaes Exemplo: carrinho de compras, lista de alunos com notas

  • 8/3/2019 EJB3 - Aula1 - Intro

    22/45

    22

    Ciclo de Vida dos Beans deSesso

    O Cliente obtmuma referncia

    do bean

    O Container invoca

    newInstance noObjeto do bean desesso

    Injeta algumadependncia no

    bean

    Bean est poronto

    para serinvocado

  • 8/3/2019 EJB3 - Aula1 - Intro

    23/45

    23

    O Ciclo de vida dos Beans

    Depois que o container determina que uma instncia no maisnecessria, ela eliminada

    E em situaes nas quais o bean injetado uma fonte de dados

    JDBC Como fazer para fechar a conexo com o banco de dados?

    CallBacks! Mtodos que o bean possui de forma no exposta regra de negcio, que

    executada a cada mudana de estado no ciclo de vida do bean Alguns CallBacks so comuns aos beans de Sesso com e sem

    estado e outros apenas para os Com Estado

  • 8/3/2019 EJB3 - Aula1 - Intro

    24/45

    24

    Anotaes de CallBacks

    Anotao Tipo de Bean

    @PostConstruct Beans de Sesso com Estado esem Estado

    @PreDestroy Beans de Sesso com Estado esem Estado

    @PostActivate Somente Beans com Estado

    @PrePassivate Somente Beans com Estado

  • 8/3/2019 EJB3 - Aula1 - Intro

    25/45

    25

    Uso dos CallBacks

    @PostConstruct Invocado imediatamente aps a criao do objeto (usado, em

    geral para a alocao de recursos, conexo com banco de dados)

    @PreDestroy Invocado imediatamente antes da destruio do objeto (fechar

    conexes com bancos, liberar recursos)

    @PostActivate Invocado logo aps uma instncia ser ativada (no criado)

    @PrePassivate Invocado imediatamente antes dela ser passivada (no

    destrudo)

  • 8/3/2019 EJB3 - Aula1 - Intro

    26/45

    26

    As regras de programao

    Todo Bean de sesso deve ter, pelo menos 1 interface denegcios

    A classe do Bean de Sesso (que implementa a interface)deve ser concreta

    A classe deve ter um construtor sem argumentos (mesmoque este construtor chame outro com argumentos)

    Um Bean de sesso pode ser uma subclasse de outro Beande Sesso ou de um outro POJO

  • 8/3/2019 EJB3 - Aula1 - Intro

    27/45

    27

    As regras de programao

    Os mtodos de negcio e os mtodos de CallBack do ciclode vida podem ser definidos na prpria classe do bean ouem alguma superclasse As anotaes de indicao do tipo de bean (@stateless ou

    @stateful) so suportadas com limitaes

    Entretanto os callbacks so herdados numa boa

    Nomes dos mtodos de negcio nunca devem comearcom ejb para evitar conflitos com a gerao de cdigofeita em tempo de execuo pelo container

  • 8/3/2019 EJB3 - Aula1 - Intro

    28/45

    28

    Beans de Sesso sem Estado

    Anotao @Stateless

    Idia bsica: o container pode (e realmente o faz)

    gerenciar um conjunto de Beans stateless demaneira transparente e isso torna o modelo deprogramao mais eficiente

    Todo gerenciamento do ciclo de vida dos Beans ficaalheio programao da aplicao

  • 8/3/2019 EJB3 - Aula1 - Intro

    29/45

    29

    Beans de Sesso sem Estado

    Cliente 1

    Cliente 3

    Cliente 2

    Pool de Beans

    Instncia1

    Instncia 2

  • 8/3/2019 EJB3 - Aula1 - Intro

    30/45

    30

    Tipos e Interface para uso comBeans de Sesso

    Interface Local @Local Usado para tornar disponvel os servios dos beans para clientes

    que estejam executando na mesma mquina virtual

    Interface Remota @Remote Usado para tornar disponvel os servios de um bean de sesso

    pra clientes em outras mquinas virtuais Comunicao feita via RMI

    Interface WebService @WebService Beans armazenados em um servidor Web (com um container

    acoplado) e clientes em quaisquer localizaes

    Comunicao feita via padra WSDL

  • 8/3/2019 EJB3 - Aula1 - Intro

    31/45

    31

    Exemplos

    @Local

    public interface MinhaInterface

    {...}

    @Remote

    public interface MinhaInterfaceRemota

    [implements java.rmi.Remote]

    {...}

    @WebService

    public interface MinhaInterfaceWS

    {...}

  • 8/3/2019 EJB3 - Aula1 - Intro

    32/45

    32

    Vrias interfaces de Negcio

    Interface

    InterfaceLocal

    Serviosespecficos

    InterfaceRemote

    Serviosespecficos

    InterfaceWS

    Serviosespecficos

  • 8/3/2019 EJB3 - Aula1 - Intro

    33/45

    33

    Beans de Sesso com Estado

    Mantm histrico da conversao com o cliente

    Gerenciamento do bean por parte do container

    diferente Agora no existe mais pool de beans, e sim, um nico

    bean para cada cliente

    Justamente por causa do estado de conversao Este relacionamento um para um feito

    automaticamente (automagicamente) pelo

    container

  • 8/3/2019 EJB3 - Aula1 - Intro

    34/45

    34

    Beans de Sesso com Estado

    Cliente 1

    Cliente 3

    Cliente 2

    Instncia1

    Instncia 2

    Instncia 3

    Estado

    Estado

    Estado

  • 8/3/2019 EJB3 - Aula1 - Intro

    35/45

    35

    Beans de Sesso com Estados

    Algumas regras de programao adicionais Variveis de instncia do bean utilizadas para armazenar o

    estado de conversao devem ser tipos primitivos Java ou

    Objetos Serializveis (implementam a interfacejava.io.Serializable)

    Como beans de Sesso com Estado no podem ser matindos empool, isso pode gerar um acmulo desnecessrio. Para tanto,

    deve-se ter uma funcionalidade para trmino do servio (anotao@Remove)

    Os CallBacks adicionais dos Beans de Sesso com estadoauxiliam a programao (@PostActivate e @PrePassivate)

  • 8/3/2019 EJB3 - Aula1 - Intro

    36/45

    36

    Interfaces de Negcios paraBeans de Sesso com Estado

    Beans de Sesso com Estado aceitam somente asanotaes @Local e @Remote

    @WebService no suportado Isso porque as requisies de WebServices utilizam o

    padro SOAP, que , por definio Stateless

    Alm disso, pelo menos 1 mtodo deve ter aanotao @Remove (obrigatoriamente)

  • 8/3/2019 EJB3 - Aula1 - Intro

    37/45

    37

    Clientes de Beans de Sesso

    Basicamente qualquer POJO, Servlet, JSP, SwingGUI ou aplicao linha de comando podem ser

    clientes de Beans de sesso. Beans com endpoint @WebService podem ser,

    inclusive acessveis por clientes no Java (.net por

    exemplo) Foco maior: invocao local ou ainda remota (via

    RMI)

  • 8/3/2019 EJB3 - Aula1 - Intro

    38/45

    38

    Clientes para Beans de Sesso

    O cliente obtm uma referncia ao bean direta ouindiretamente do JNDI

    Todas as invocaes so feitas atravs de umainterface apropriada para este tipo de acesso

    O cliente realiza chamadas de mtodos quantas

    vezes forem necessrias No caso de um Bean com Estado, a ltima

    invocao deve ser o mtodo anotado com

    @Remove

  • 8/3/2019 EJB3 - Aula1 - Intro

    39/45

    39

    Um pequeno Exemplo

    public class MeuCliente implements MinhaInterfaceCliente

    {

    @EJB (name=NomeDeUmaInterfaceEspecifica)

    private Bean varBean

    .... Mtodos que usam...

    } Esta anotao informa ao container queser feita uma referncia a um Bean

    Entretanto pode-se especificar um beanespecfico (ex: a herana com tiposespecializados Remote, WebService -que definimos alguns slides atrs)

  • 8/3/2019 EJB3 - Aula1 - Intro

    40/45

    40

    Mais Prticas de Programao

    Escolher o tipo de Bean cuidadosamente Beans de sesso com estado possuem um alto preo

    Para clientes Web, mais vantajoso, por exemplo, usar oHttpSession do que necessariamente beans com Estado

    Escolher o tipo de interface cuidadosamente Interfaces remotas usam rede compromete desempenho da

    aplicao Beans e clientes iro residir na mesma VM?

    Se sim interface Local

  • 8/3/2019 EJB3 - Aula1 - Intro

    41/45

    41

    Mais Prticas de Programao

    Cuidado com a Injeo de Dependncias Certifique-se de que no ir injetar um bean de sesso

    com estado em um bean de sesso sem estado ouservlet Pelo fato dos beans de sesso sem estado so enviados para

    o pool gerenciado pelo container e tornam-se globais

    Isso pode gerar um acmulo desnecessrio de informaes,alm de possibilitar a manuteno de sesso para clientesdiferentes

    possvel injetar beans de sesso com estado em outro bean

    de sesso com estado ou uma aplicao cliente

  • 8/3/2019 EJB3 - Aula1 - Intro

    42/45

    42

    Mais Prticas de Programao

    Separar funcionalidades de LOG ou outro controlefora da camada de negcios

    Deixa o cdigo mais fcil de ser mantido Analise quais tipos de dados sero armazenados no

    histrico de conversao

    prefervel usar tipos primitivos em relao a grandesobjetos aninhados

    No esquea do mtodo de Remoo

  • 8/3/2019 EJB3 - Aula1 - Intro

    43/45

    43

    Uma aplicao Real (mais uma rs)

    Sistema de Controle Universitrio Anlise de requisitos

    Diagrama de classes Alguns diagramas de casos de uso

    Formas de acesso aos dados

    Web, desktop, linha de comando

  • 8/3/2019 EJB3 - Aula1 - Intro

    44/45

    44

    Mas e a Busca JNDI?

    Ideal usar a busca para uso de beans com estado eservlets

    Em um servlet:Context c = new InitialContext();

    ServicosStatefull sf = (ServicosStatefull)

    c.lookup("java:global/TesteEJB/TesteEJB-

    ejb/ServicosStatefullBean!services.ServicosStatefull");if (sf == null)

    response.sendRedirect("erro.jsp");

  • 8/3/2019 EJB3 - Aula1 - Intro

    45/45

    Padro do nome

    java:global Uma referncia a usar um nome dentro de um contexto

    global no Container TesteEJB

    Nome da aplicao que abriga o mdulo que contm osEJB

    TesteEJB-ejb Nome do Mdulo onde esto armazenados os EJB