1. Introdução a plataforma Java EE
Eder Magalhães
@edermag
www.yaw.com.br
Globalcode
–
Open4education
Thursday, July 5, 12
2. Agenda
Desafios do desenvolvimento corporativo;
A plataforma Java EE;
Plataforma baseada em especificações;
Camada de persistência;
Regras de negócio;
Desenvolvimento web;
Demonstrando Java EE com ScrumToys;
Outros componentes Java EE;
Links;
Globalcode
–
Open4education
Thursday, July 5, 12
3. Desenvolvimento corporativo
Pensar só na “linguagem” não é o suficiente;
Existem outros fatores de impacto;
Globalcode
–
Open4education
Thursday, July 5, 12
4. Desenvolvimento corporativo
Pensar só na “linguagem” não é o suficiente;
Existem outros fatores de impacto;
Globalcode
–
Open4education
Thursday, July 5, 12
5. Quais fatores?
Escalabilidade;
Disponibilidade;
Performance durante execução;
Integração com outros aplicativos;
Segurança;
Flexível a mudanças;
O custo deve ser baixo;
E vários outros ... (“ades”);
Globalcode
–
Open4education
Thursday, July 5, 12
6. Já ia me esquecendo...
Globalcode
–
Open4education
Thursday, July 5, 12
7. Produtivo!
Como de costume: o prazo é para ontem.
Globalcode
–
Open4education
Thursday, July 5, 12
8. Java EE pretende resolver esses
problemas.
Globalcode
–
Open4education
Thursday, July 5, 12
9. Java EE pretende resolver esses
problemas.
Globalcode
–
Open4education
Thursday, July 5, 12
10. Java Enterprise Edition
O Java EE é uma plataforma que atende as
necessidades de uma vasta gama de aplicações
corporativas;
A plataforma é formada por modelos de
programação, APIs e frameworks;
Elaborada através de especificações;
Determina quais funcionalidades devem ser
implementadas pelos fornecedores de servidores
de aplicação;
Globalcode
–
Open4education
Thursday, July 5, 12
11. Breve comparação
Java SE
Globalcode
–
Open4education
Thursday, July 5, 12
12. Breve comparação
Java SE Java EE
Globalcode
–
Open4education
Thursday, July 5, 12
13. Java EE na visão dos fornecedores
Empresas “terceiras” que criam servidores para
gerenciar aplicativos Java EE;
Devem respeitar as regras definidas pelas
especificações Java EE;
Garantem o código que resolve (implementa) as
APIs Java EE;
Globalcode
–
Open4education
Thursday, July 5, 12
14. Java EE na visão dos desenvolvedores
Podem usufruir de uma série de APIs,
padronizadas pela plataforma;
Têm o poder de escolha de qual servidor Java
EE utilizar;
Tecnologias disponíves podem ser
classificadas:
Web Services;
Componentes p/ desenvolvimento web;
Componentes p/ desenvolvimento enterprise;
Componentes p/ gestão e segurança;
Globalcode
–
Open4education
Thursday, July 5, 12
15. Especificações: a tecnologia + poderosa
A especificação é um contrato:
Determina o que deve ser feito;
Favorece a concorrência entre fornecedores;
Mais opções para os desenvolvedores;
É possível acompanhar o rumo da tecnologia;
Um grupo de empresas (e pessoas) com poder
de decisão.
Oracle, Google, IBM, Intel, HP, Twitter, Red Hat, Eclipse
Foundation, SouJava, TOTVS, Samsung, SAP e outros…
Globalcode
–
Open4education
Thursday, July 5, 12
16. Evolução do Java EE
Java EE 6
EJB Lite,
Java EE 5 Restful WS,
CDI,
Easy of Validation,
Development, Extensibility.
J2EE 1.4 Annotations,
EJB 3.0,
Persistence API, Web Profile
J2EE 1.3 Web Services, New Web
Management, Services
CMP, Deployment,
J2EE 1.2 Coneector, Async.
Architecture
Servlet, JSP,
EJB, JMS, RMI
Dez 99 Set 01 Nov 03 May 06 Dec 09
10 specs 13 specs 20 specs 23 specs 33 specs
Globalcode
–
Open4education
Thursday, July 5, 12
19. Persistência
Grande maioria das aplicações utilizam banco de
dados relacional;
Converter o modelo de classes em tabelas
relacionais é trabalhoso;
Implementar uma aplicação multi banco de dados
não é fácil;
Usar uma tecnologia ORM diminui esse esforço;
Globalcode
–
Open4education
Thursday, July 5, 12
20. JPA - Java Persistence API
Define um padrão para frameworks ORM;
Simples e fácil de usar:
Anotar classes e atributos/métodos;
Resolve os relacionamentos O.O.:
Herança;
Composição, agregação e associação;
Conta com vários providers;
Tem alta adoção no mercado;
Globalcode
–
Open4education
Thursday, July 5, 12
21. JPA: Visão das camadas
Globalcode
–
Open4education
Thursday, July 5, 12
23. Complexidade nas regras de negócio
A necessidade de integração com tecnologias
diferentes (legado);
Um módulo do sistema deve ser processado em
outra máquina/cluster;
O uso de cache de objetos favorece a
escalabilidade;
Executar um fluxo de negócio demorado de
forma assíncrona;
Garantir a consistência de uma operação
transacional;
Globalcode
–
Open4education
Thursday, July 5, 12
24. EJB - Enterprise JavaBeans
Define um modelo avançado de componentes
para plataforma;
Com EJB é possível resolver:
Integração com outras tecnologias;
Processamento remoto / assíncrono / agendado;
Controle transacional;
Faz cache de objetos;
Pode ser utilizado em aplicação web ou desktop;
Estabelece uma versão Lite p/ aplicações simples;
Globalcode
–
Open4education
Thursday, July 5, 12
25. Exemplo EJB
@Stateless
public class ProjectServiceBean implements ProjectService {
@PersistenceContext
private EntityManager em;
public void save(Project p) {
em.persist(p); //insert na tabela
}
@Schedule(hour="2", minute="30", dayOfMonth="*")
public void backupData() { //metodo agendado
//...
}
}
Globalcode
–
Open4education
Thursday, July 5, 12
26. Validação
Necessidade de validar dados digitados pelo
usuário:
Tarefa comum e repetitiva;
Globalcode
–
Open4education
Thursday, July 5, 12
27. Bean Validation
Define um modelo de validações simples e
prático, através de anotações;
Disponiliza uma série de validações pré-
definidas;
Permite a customização de validadores;
Pode ser plugada em diversas tecnologias Java:
Hibernate, JSF, Spring MVC e outros;
Globalcode
–
Open4education
Thursday, July 5, 12
28. Exemplo Bean Validation
@Entity @Table(name="sprints")
public class Sprint {
@NotNull
private String name;
@Min(1) @Max(10)
private Integer storyPoints;
...
@SprintNameUniquenessConstraint
public String getName() {
return name;
}
...
}
Globalcode
–
Open4education
Thursday, July 5, 12
29. Desenvolvimento web: o início
Desenvolver aplicações que são executadas na
web por um navegador;
Criar componentes em Java para gerar conteúdo
dinâmico para web (HTML, JavaScript, CSS);
Globalcode
–
Open4education
Thursday, July 5, 12
30. Servlet & JSP - JavaServer Pages
Servlets:
Componentes Java com a capacidade de
atender o fluxo requisição x resposta (HTTP);
Eficientes, são projetos para escalar;
Atualmente são responsáveis pela infra-
estrutura de um aplicativo web;
JSP:
Componentes web responsáveis por gerar
conteúdo visual (HTML, JavaScript, CSS);
Simples, usam o formato de marcação (tags);
Globalcode
–
Open4education
Thursday, July 5, 12
31. Exemplo Servlet
@WebServlet(url= "/project")
public class ProjectServlet extends HttpServlet {
public void doGet(HttpServletRequest req,
HttpServletReponse resp){
ProjectDAO dao = new DefaultProjectDAO();
req.setAttribute("projects", dao.getAll());
RequestDispatcher rd =
req.getDispactcher("projects.jsp");
rd.forward(req, resp);
}
}
Globalcode
–
Open4education
Thursday, July 5, 12
33. Desenvolvimento web: a evolução
Aplicações web seguindo o modelo MVC;
Aplicações web complexas, com maior
iteratividade (Ajax) e usabilidade;
Maior produtividade para o desenvolvimento;
Usar uma tecnologia baseada em componentes
seria uma ótima opção;
Globalcode
–
Open4education
Thursday, July 5, 12
34. JSF - JavaServer Faces
Determina uma framework padrão para
construção de aplicativos MVC em Java EE;
Evolui a proposta do JSP;
Disponibiliza uma série de componentes visuais;
Suporta Ajax;
Promove o uso de templates para construção de
páginas;
Permite a criação de novos componentes visuais;
É fácil de utilizar;
Tem alta adoção no mercado;
Globalcode
–
Open4education
Thursday, July 5, 12
36. Desenvolvimento web: nível avançado
Em sistemas de porte maior ou com regras
flexíveis é interessante manter um bom nível de
isolamento;
Buscar o fraco acoplamento e a alta coesão é
sempre uma ótima opção;
Algumas aplicações exigem a integração de
diferentes camadas de aplicação, ex:
JSF + EJB;
Globalcode
–
Open4education
Thursday, July 5, 12
37. CDI - Context Dependency Injection
Promove a integração entre componentes para
aplicações Java EE de forma desacoplada;
Torna transparente a integração JSF & EJB;
Controla/gerencia instâncias de objetos;
Habilidade de resolver dependências com um
sofisticado mecanismo de injeção;
Provê um modelo de eventos, conforme ciclo de
vida dos objetos;
Implementa um mecanismo eficiente para
armazenar dados de um aplicativo web;
Globalcode
–
Open4education
Thursday, July 5, 12
38. Exemplo CDI
@Named
public class DashboardManager {
@Inject
private ProjectDao dao;
public String getDefaultProject(){
return dao.getFirstProject().getName();
}
}
<h:body>
<h:outputText value="#{dashboardManager.defaultProject}" />
</h:body>
Globalcode
–
Open4education
Thursday, July 5, 12
39. Exemplo CDI
@Named
public class DashboardManager {
@Inject
private ProjectDao dao;
public String getDefaultProject(){
return dao.getFirstProject().getName();
}
}
<h:body>
<h:outputText value="#{dashboardManager.defaultProject}" />
</h:body>
Globalcode
–
Open4education
Thursday, July 5, 12
40. ScrumToys: a DEMO brazuca do Java EE
Projeto exemplo do NetBeans e Glassfish;
Tecnologias utilizadas:
JSF;
JPA;
Bean Validation;
Globalcode
–
Open4education
Thursday, July 5, 12
41. Outros componentes Java EE
Java Message Service API;
Java Transaction API;
JavaMail;
JSTL e EL;
Java API for RESTful Web Services;
Java API for XML-Based Web Services;
Java Architecture for XML Binding;
...
Globalcode
–
Open4education
Thursday, July 5, 12
42. Java EE 7:
A plataforma na nuvem!
…
Custo x Benefício
Globalcode
–
Open4education
Thursday, July 5, 12