Escolar Documentos
Profissional Documentos
Cultura Documentos
Unidade III
n Plataforma Java Enterprise Edition
n Adiciona ao Java suporte para:
Componentes no Java EE n Desenvolvimento de Aplicações Web:
JSP, Servlets e JSF
n Componentes de Negócio: EJB
n Java EE
n Interconexão com Sistemas Legados:
n JSF
Java Connectors
n EJB
n Fornece diversas APIs para:
n JPA
n Comunicação: JMS, JavaMail
n Gerenciamento de Transações: JTA
n Persistência de Dados: JPA
n … entre outros. 2
Java EE Java EE
n Arquitetura do Java EE n Camadas do Java EE
n Camada Cliente
n Clientes Web (navegadores, etc.)
n Aplicações Clientes
n Camada Web
n Páginas JSP, JSF, Servlets e JavaBeans
n Camada de Negócios
n Componentes EJB
n Camada de Sist. de Informações Empresariais
n Integração com BDs e outros sist. legados
© http://java.sun.com 3 4
Java EE Java EE
n Arquitetura do Java EE n Camada Cliente
n Clientes Web
n Acessam a camada Web, que gera as
páginas visualizadas no navegador
n Utilizam protocolos HTTP e HTTPS
n Aplicações Clientes
© http://java.sun.com 5 6
1
Java EE Java EE
n Arquitetura do Java EE n Servidor Java EE
n Possui duas camadas:
n Camada Web
n Camada de Negócios
Java EE Java EE
n Contêineres do Servidor Java EE n Servidor Java EE: Contêiners Web e EJB
© http://java.sun.com
© http://java.sun.com
9 10
Java EE Java EE
n Servidor Java EE n Java Server Pages (JSP)
n Existem dois tipos de contêiner n Permite a geração dinâmica de conteúdo Web
n Contêiner Web: hospeda páginas JSP e JSF, n Código Java é inserido em páginas HTML ou
Servlets e JavaBeans XML para gerar conteúdo dinâmico
n Contêiner EJB: gerencia a execução dos n Geração do conteúdo baseada em parâmetros
Enterprise JavaBeans passados na URL, na identificação do usuário,
n Nem todos os servidores fornecem os dois
dados de um BD ou de JavaBeans, etc.
tipos de contêiner n Requer um servidor Web compatível com
2
Java EE Java EE
n Servlets n Java Server Faces (JSF)
n São classes Java que implementam a interface n Suporte para criação de aplicações Web
javax.servlet.Servlet utilizando componentes
n Instanciados e mantidos em execução no n Facilita o desenvolvimento de aplicações Web
servidor n Fornece componentes para criação de páginas
n Processam requisições enviadas para uma URI n Efetua tratamento de eventos gerados pela
n Servlet HTTP interação do usuário com o navegador Web
n Recebe requisições via HTTP[S]
n Possui métodos que tratam cada tipo de
mensagem do protocolo (GET, POST, etc.)
n Geram saída exibida no browser (ex: HTML)
13 14
Java EE Java EE
n Enterprise JavaBeans (EJB) n Arquitetura do Java EE
n Componentes que rodam no servidor
n Acessam os sistemas legados da empresa
para implementar regras de negócio
n Ciclo de vida gerenciado pelo contêiner
15 © http://java.sun.com 16
Java EE Java EE
n Camada de Sistemas de Informações n Conectores
Empresariais (EIS) n Integram diversos sistemas à plataforma
n Usada pelos componentes EJB da camada de Java EE
negócio p/ acesso a software de infraestrutura
n Fornecido pelo fabricante do sistema legado
n Banco de Dados
n Monitores de Transações
ou por terceiros
n Enterprise Resource Planning (ERP) n Para desenvolver um conector geralmente é
n Customer Relationship Management (CRM) necessário escrever código nativo para a
n ... e outros sistemas legados plataforma do sistema legado e integrar ao
n Estes sistemas geralmente rodam em Java usando JNI (Java Native Interface),
mainframes ou servidores de médio porte CORBA ou Sockets
n Conectores permitem o acesso a sist. legados
17 18
3
Java EE Java EE
n Java Messaging Service (JMS) n Distribuição de aplicações corporativas
n Serviço
para comunicação através de n Arquivos que compõem uma aplicação Web
mensagens assíncronas (eventos) são empacotados num arquivo WAR
n JavaMail n Arquivos necessários para implantar EJBs
devem ser empacotados em arquivos JAR
n API para envio e recepção de e-mails
n Uma aplicação corporativa completa é
n Java Transaction API (JTA) empacotada em um arquivo EAR
n API para gerenciamento de transações n Contém uma ou mais aplicações Web em
n Java Persistence API (JPA) arquivos WAR
n APIque mapeia os dados das aplicações n Contém um ou mais arquivos JAR com os
corporativas de/para banco de dados componentes EJB da aplicação, aplicações
19 cliente e outras bibliotecas utilizadas 20
Java EE JSF
n Implantação de aplicações corporativas n Java Server Faces é um framework para
n Arquivos EAR são carregados no servidor Java construção de aplicações Web em Java
EE, que abre o pacote e coloca a aplicação em n JSF é baseado em componentes para Web
execução n Adota o padrão Modelo-Visão-Controlador
n Conteúdo de arquivos é WAR implantado no
n Utiliza JavaBeans gerenciados (com injeção de
contêiner Web dependência) e é integrado a JSP e Servlets
n Componentes EJB contidos nos arquivos
n Incorpora o conceito de eventos na navegação
JAR são implantados no contêiner EJB pela Web, com tratamento no servidor
n A implantação é efetuada com base em
n Provê ainda APIs para controle de navegação
informações obtidas de descritores em XML e na Web, validação de entrada, conversão de
de anotações feitas nas próprias classes Java valores e suporte a localização e acessibilidade
21 22
JSF JSF
n Componentes JSF n Modelo de eventos
n O JSF fornece um conjunto de componentes n Uma ação na página Web – como clicar um
comumente usados em páginas Web: link, botão ou selecionar uma opção em um combo
tabela, botão, combo box, caixa de texto, etc. box – resulta em um evento
n Há várias bibliotecas de componentes – n O evento pode ser associado a um método de
comerciais ou gratuitas – disponíveis para uso um bean gerenciado, executado no servidor
(MyFaces, RichFaces, WoodStock, PrimeFace, n Retorno do método tratador do evento pode
etc.) determinar o fluxo de navegação da aplicação
n Componentes são representados como tags n O uso de eventos torna o desenvolvimento de
em uma página JSP e posteriormente aplicações Web semelhante ao desktop
convertidos para o código HTML equivalente 23 24
4
JSF JSF
n Facelets n Escopo dos Beans Gerenciados JSF
n Forma padrão de implementarviews no JSF2.0 Escopo Ciclo de Vida
n Baseado em XHTML
Application A mesma instância é compartilhada por
todos os usuários da aplicação
n Permite construir uma árvore de componentes Session Uma instância por sessão (cada usuário
e referenciar beans gerenciados JSF possui a sua instância particular)
Conversation Instâncias criadas/destruídas pela
n Beans Gerenciados aplicação para diferenciar janelas/abas
n Sãobeans usados na aplicação JSF Request Instância criada/destruída a cada
n Seuciclo de vida é gerenciado pelo servidor requisição enviada ao servidor
Dependent Instância criada/removida quando o objeto
Java EE que a referencia é criado/removido
25 26
JSF JSF
n Exemplo: Facelet index.xhtml n Exemplo: Facelet response.xhtml
<?xml version='1.0' encoding='UTF-8' ?> O facelet possui um
formulário com um <html xmlns="http://www.w3.org/1999/xhtml" O facelet de resposta
<html xmlns="http://www.w3.org/1999/xhtml" xmlns:h="http://java.sun.com/jsf/html"> tem um campo de texto
xmlns:h="http://java.sun.com/jsf/html" campo de texto, no
qual deve ser <head> no qual é mostrado o
xmlns:ui="http://java.sun.com/jsf/facelets" <title>Resposta</title> valor retornado pelo
xmlns:f="http://java.sun.com/jsf/core"> digitado um número.
Ao clicar no botão </head> método getResponse
<head> do bean gerenciado. O
<title>Adivinhe o número</title> Enviar, o número é
armazenado no <body> botão Voltar retorna ao
</head> atributo userNumber facelet index.
<body> <h4>
de UserNumberBean <h:outputText escape="false" value=
<h5>Entre com um número de 0 a 9:</h5> e o navegador exibe
<h:form> o facelet response. "#{UserNumberBean.response}"/>
<h:inputText id="userNumber" size="2" </h4>
maxlength="2" value="#{UserNumberBean.userNumber}" /> <h:form>
<h:commandButton id="submit" value="Enviar" <h:commandButton id="back" value="Voltar" action="index" />
action="response" /> </h:form>
</h:form> </body>
</body> </html>
</html>
27 28
JSF JSF
...
n Exemplo: Bean gerenciado UserNumberBean public Integer getUserNumber() {
@ManagedBean(name="UserNumberBean") return userNumber; // retorna o útimo número digitado
@SessionScoped // sessão -->uma instância por usuário }
public class UserNumberBean {
Integer randomInt; // armazena número sorteado public String getResponse() {
Integer userNumber; // armazena número digitado pelo usuário if ((userNumber != null) && (userNumber. compareTo(randomInt)
== 0)) { // se número digitado == gerado
public UserNumberBean() { // construtor; sorteia número aleatório FacesContext context = FacesContext.getCurrentInstance();
Random randomGR = new Random(); HttpSession session = (HttpSession)context.getExternalContext().
randomInt = new Integer(randomGR.nextInt(10)); getSession(false); // obtém o objeto de sessão
System.out.println("Número sorteado: " + randomInt); session.invalidate(); // destrói a sessão
} return "Você acertou!"; // resposta = acertou
} else { // resposta = errou
public void setUserNumber(Integer userNumber) { return "<p>Desculpe, o número não é " + userNumber + "</p>"
this.userNumber = userNumber; // armazena o número digitado + "<p>Tente novamente</p>";
} }
... }
}
29 30
5
EJB EJB
n Enterprise JavaBeans n Comunicação
n Integra um modelo de componentes de negócio n EJBs interagem com clientes remotos através de
à arquitetura Java EE interfaces/Beans anotados com @Remote
n Cria uma camada composta de beans n Beans podem ser acessados remotamente por:
especializados, não-gráficos n Aplicações Java usando RMI/IIOP
n Beans rodam em servidores Java EE n Aplicações CORBA usando IIOP
n Componentes EJB n Clientes Web via páginas JSP ou Servlets
n São objetos Java escaláveis e reutilizáveis n Clientes locais podem interagir com os EJBs
n Utilizam anotações/arquivos XML para informar utilizando injeção de dependência ou interfaces/
ao contêiner como devem ser gerenciados beans anotados com @Local
31 32
EJB EJB
n Tipos de Enterprise Beans n Session Bean
n Session Beans n Representam um cliente em particular no
n Executam uma tarefa durante uma sessão servidor – ou seja, o bean não é
de interação entre o Bean o cliente compartilhado entre os clientes
n Message-Driven Beans n O cliente invoca métodos do bean para
33 34
EJB EJB
n Estado dos Session Beans n Exemplo de Stateless Session Bean
n Stateless Session Bean
@Stateless
n Não possui estado que o ligue a um cliente public class HelloWorldSessionBean{
n Instâncias diferentes são equivalentes se public String hello(){
inativas return “Hello World”;
}
n Stateful Session Bean }
n Armazena estado durante a sessão de um
cliente (entre invocações sucessivas) n Aanotação @Stateless indica que a classe
n O estado não é persistido (é transiente) anotada é um Stateless Session Bean
35 36
6
EJB EJB
n Stateless Session Bean com suporte a n Stateless Session Bean com suporte a
clientes remotos clientes remotos
n Anotando a interface com @Remote n Anotando classe com @Remote
@Remote public interface Hello{
public interface Hello{ public String hello();
public String hello(); }
}
@Stateless
@Stateless @Remote(Hello.class)
public class HelloWorldSessionBean implements Hello{ public class HelloWorldSessionBean implements Hello{
public String hello(){ public String hello(){
return “Hello World”; return “Hello World”;
} }
} 37 } 38
EJB EJB
n Ciclo de vida dos Stateless Session Beans n Exemplo de Stateful Session Bean
@Stateful
@Remote(Count.class)
Instância do Bean public class CountBean implements Count {
não existe private int count;
public int getCount() { return this.count; }
public void setCount(int count) { this.count = count; }
Contêiner Contêiner
decide quando decide quando
@Remove
é necessário criar não necessita mais public void remove() { }
mais instâncias das instâncias
}
n A anotação @Stateful indica que a classe é um
Cliente Stateful Session Bean
Pool de Beans invoca
método
n A anotação @Remove indica que o bean deve ser
removido após a execução do método anotado
39 40
EJB EJB
n Ciclo de vida dos Stateful Session Beans n Message-Driven Beans
n Consomem mensagens de uma fila ou
Instância do Bean associadas a um determinado tópico
não existe n Podem receber mensagens de uma ou de
Cliente obtém uma
referência da
Cliente invoca
método de remoção
múltiplas fontes
interface de negócio ou ocorre timeout n Não possuem estado nem interfaces remotas
Cliente
n Beans são anotados com @MessageDriven
Pronto invoca
método n Sua interface depende do serviço de
Contêiner Cliente invoca mensagens utilizado
n Geralmente é usado JMS (Java Message
desativa bean método
Service)
Passivo
41 42
7
EJB EJB
n Exemplo de Message-Driven Bean n Ciclo de vida dos Message-Driven Beans
@MessageDriven(mappedName="jms/Queue")
public class SimpleMessageBean implements MessageListener {
public void onMessage (Message msg) { Instância do Bean
// utiliza a mensagem não existe
}
} Contêiner Contêiner
43 44
EJB JPA
n Entity Beans n Java Persistence API
n São POJOS (Plain Old Java Objects) n Modelo simplificado e leve de persistência
n Pode ser utilizado tanto em contêiners JavaEE
n Permitem o acesso compartilhado a dados
armazenados em um BD quanto em aplicações JavaSE
n Permite utilização de herança e polimorfismo
n Dados são materializados na forma de objetos
n Permite criação de testes independentes do
(mapeamento objeto-relacional) contêiner quando utilizado com JavaEE
n Bean = tabela de um BD relacional n Possui anotações para definição de
n Instância do Bean = linha da tabela mapeamento objeto-relacional
n Identificador do Bean = chave primária n Principais implementações da JPA
n Utilizam a JPA (Java Persistence API) para n Hibernate
controlar a persistência dos dados n Oracle TopLink
45 46
JPA JPA
n Entidade n Exemplo de Entidade JPA
n No JPA uma entidade é um objeto comum
Java (um POJO) que pode ser gravado pelo @Entity
public class Conta {
mecanismo de persistência @Id
n Uma classe que representa uma entidade é private Long numConta;
anotada com @Entity private String nomeTitular;
n Toda entidade deve possuir um construtor private long saldo;
public Conta() { } //Construtor sem argumentos é obrigatório
sem argumentos public void setNumConta(Long numConta) {
n Toda entidade deve possuir uma chave this. numConta = numConta;
primária, simples ou composta, identificada }
pela anotação @Id public Long getNumConta() { return this.numConta; }
n Chaves compostas devem ser representadas //Métodos getters e setters para os outros atributos
}
por uma classe Java em separado
47 48
8
JPA JPA
n Anotações de Relacionamento n Ciclo de vida das entidades
n Especificamrelacionamento entre entidades e
a cardinalidade da relação new
new()
persist()
n @OneToOne
refresh()
n @OneToMany remove()
detached
49 50
JPA JPA
n Estados n Entity Manager
n new: Estado da entidade após ser criada. n Controla o ciclo de vida das entidades
n managed: Entidade persistida, com id
n Possui métodos para buscar, salvar, remover
associado a um contexto de persistência.
n removed: marcada para ser removida do BD.
e atualizar estado das entidades
n detached: Entidade possui um id persistente n Referência para o Entity Manager é obtida
mas não possui um contexto de persistência. com injeção de dependências, utilizando a
n Operações anotação @PersistenceContext
n new(): Cria nova entidade
n persist():Persiste uma entidade
n refresh(): Atualiza o estado de uma entidade
n merge(): Sincroniza entidade desacoplada
51 52