Your SlideShare is downloading. ×
Java Platform, Enterprise Edition
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×

Introducing the official SlideShare app

Stunning, full-screen experience for iPhone and Android

Text the download link to your phone

Standard text messaging rates apply

Java Platform, Enterprise Edition

2,157
views

Published on

Apresentação dos Conceitos Básicos da Java Platform, Enterprise Edition

Apresentação dos Conceitos Básicos da Java Platform, Enterprise Edition


0 Comments
0 Likes
Statistics
Notes
  • Be the first to comment

  • Be the first to like this

No Downloads
Views
Total Views
2,157
On Slideshare
0
From Embeds
0
Number of Embeds
0
Actions
Shares
0
Downloads
0
Comments
0
Likes
0
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Universidade Presbiteriana Mackenzie   Aula  2:  Java  Enterprise  Edi3on  (Java  EE)   Prof. Ms. Daniel Arndt Alves Faculdade  de  Computação  e  Informá3ca   Computação e Informática Faculdade de Técnicas  de   Programação  Aplicada  III   Java  Enterprise  Edi.on   1  Daniel  Arndt  Alves  
  • 2. Tópicos  da  Aula   •  Comparação  com  Alterna.vas   de  Mercado   •  Visão  Geral  da  Plataforma   Java,  Enterprise  Edi.on   – Componentes   – Arquitetura  de  Aplicações  J2EE   – Classes  &  Pacotes   – APIs   – Servidores  de  Suporte   Java  Enterprise  Edi.on   2  Daniel  Arndt  Alves  
  • 3. Tópicos  da  Aula   •  Prá.ca  em  Java  EE   – Revisão:  Servlets   – Revisão:  JSP   •  História  do  MVC   •  Arquitetura  MVC   Java  Enterprise  Edi.on   3  Daniel  Arndt  Alves  
  • 4. Interação  Cliente  Servidor  na  Web   •  Código  Executado  no  Cliente   – Applets   – JavaScript   – VBScript   •  Código  Executado  no  Servidor   – CGI,  NSAPI,  ISAPI   – PHP,  ColdFusion,  ASP,  etc.   – Servlets   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   4  
  • 5. Alterna.vas  para  Desenvolvimento  Web   •  J2EE  (Java  PlaWorm,  Enterprise  Edi.on)   •  .NET   •  Django/Python   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   5  
  • 6. Alterna.vas  para  Desenvolvimento  Web   •  J2EE  (Java  Pla'orm,  Enterprise  Edi3on)   – Código  fonte  em  linguagem  Java   – Compilação  para  Bytecode   – JRE  (Java  Run3me  Environment)  interpreta  e   executa   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   6  
  • 7. Alterna.vas  para  Desenvolvimento  Web   •  .NET   – Independente  de  linguagem  de  programação  (VB,   C++,  C#,  ASP)   – Aplicações  executadas  em  um  contâiner  que   oferece  todo  o  suporte  necessário   – U.liza  os  componentes  de  gerenciamento  .NET   – Clientes  conectam-­‐se  via  ASP.NET,  através  de   interfaces  HTML,  XHTML  ou  WML   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   7  
  • 8. Alterna.vas  para  Desenvolvimento  Web   •  Django/Python   – Framerowk,  construído  em  linguagem  Python   – Criado  com  base  no  Ruby  on  Rails   – Linguagem  interpretada,  não  há  compilação   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   8  
  • 9. Alterna.vas  para  Desenvolvimento  Web   •  Qual  plataforma  u.lizar?   –  Escalabilidade e processos de clientes concorrentes: J2EE ou Django –  Rapidez no desenvolvimento para sistemas pequenos e médios: .NET ou Django –  Sistemas grandes que exigem alta padronização devido ao elevado número de desenvolvedores: J2EE –  Sistemas grandes em geral: J2EE ou Django –  Sistemas pequenos ou médios que exijam um tempo de acesso menor: .NET –  Sistemas comerciais pequenos ou médios: .NET   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   9  
  • 10. Java  PlaWorm,  Enterprise  Edi.on  (Java  EE)   •  Arquitetura  de  referência   •  Plataforma  de  Tecnologias   •  Desenvolvimento  de  aplicações  corpora.vas  distribuídas   •  Provê   –  Suporte  ao  gerenciamento  automá.co  de  componentes   –  Infra-­‐estrutura  de  serviços  complexos   •  Transações   •  Segurança   •  Persistência   •  Obje.vo  Central   –  Desenvolvedores  podem  concentrar-­‐se  no  desenvolvimento  da   lógica  de  negócio   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   10  
  • 11. Componentes  Java  EE   •  Aplicações  Java  EE   –  Cons.tuídas  por  componentes   •  Componente  Java  EE   –  Unidade  funcional  de  sosware   –  Formada  por   •  Conjunto  de  classes   •  Arquivos  relacionados   –  Pode  se  comunicar  com  outros  componentes   –  Pode  ser  reusado  durante  a  construção  de  aplicações   Java  EE   –  Deve  seguir  a  especificação  Java  EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   11  
  • 12. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   12  
  • 13. Modelos  de  Componente  Java  EE   •  Aplicações  stand-­‐alone   –  aplicação  Java   –  man.dos  e  executados  no  cliente   –  GUI     •  Componentes  Web   –  Servlet   •  Objetos  Java  que  respondem   requisições  em  HTTP   •  Resposta  normalmente  é  HTML   gerado  dinamicamente   •  Man.dos  e  executados  no  servidor   –  JSP   •  Linguagem  de  script  adequada  para   escrita  de  servlets  de  apresentação   •  Applets   –  Normalmente  executados  dentro   do  browser   –  Man.dos  pelo  servidor  e   executados  no  cliente   •  Enterprise  JavaBeans  (EJBs)   –  componentes  man.dos  e   executados  em  um  ambiente   gerenciado  pelo  servidor  provê:     •  Monitoramento  transacional   •  Persistência   •  Distribuição  de  objetos   •  Segurança   –  Não  são  JavaBeans!   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   13   •  A  especificação  Java  EE  define  os  seguintes   componentes  Java  EE:  
  • 14. Exemplos  de  Componentes  Java  EE   •  Componentes  Clientes   – Applets   – Aplicações  java  Satand-­‐Alone   •  Componentes  Web   – Servlets   – JSPs   •  Componentes  EJB   – Session  Beans   – Message-­‐Driven  Beans   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   14  
  • 15. Arquitetura  de  Aplicações  Java  EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   15  
  • 16. Servidores  Java  EE   •  Componentes  Java  EE  são  instalados  em   servidores     •  Servidores   –  Oferecem  infra-­‐estrutura  para  gerenciamento  do  ciclo   de  vida  dos  componentes   –  Incluem  containers  Web  e  EJB   –  Provêem  diversos  serviços  para  os  componentes   •  Transações   •  Persistência   •  Segurança   •  Nomes   •  Distribuição   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   16  
  • 17. Java  EE  –  Tecnologias  Associadas   •  Panacéia  de  tecnologias   – Ambientes  de  desenvolvimento   – Servidores  de  aplicação   – Frameworks  de  apoio  ao  desenvolvimento   – Padrões  de  Projeto   – Ferramentas  de  geração  de  código   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   17  
  • 18. APIs  do  J2EE   •  O  Container  também  implementa  APIs  J2EE   – APIs  J2SE:  stand-­‐alone  (bibliotecas  simples)   – APIs  J2EE:  maior  dependência  de  serviços   •  XML-­‐RPC:  exige  server  HTTP   •  JMS:  exige  middleware  de  mensagens   •  Connector:  exige  bridges  com  outros  sistemas   •  EJB:  exige  servidor  RMI/IIOP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   18  
  • 19. APIs  do  J2EE   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   19  
  • 20. APIs  do  J2EE:  Diversos   •  JavaMail   – Envio  e  recepção  de  e-­‐mail  por  POP,  IMAP,  SMTP   •  JavaBeans  Ac3va3on  Framework   – A.vação  de  funcionalidades  via  .pos  MIME   •  JNDI  (Java  Naming  and  Directory)   – LDAP,  NDS,  DNS,  NIS,  CosNaming;  serviços  J2EE   •  JAAS  (Autenthica.on  &  Authoriza.on  Service)   – Autorização  e  Auten.cação;  PAM   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   20  
  • 21. APIs  do  J2EE:  Middleware   •  JMS  (Java  Message  Service)   – Comunicação  assíncrona  robusta   •  JTA  (Java  Transac.on  API)   – Transações  de  alto  nível   •  JCA  (J2EE  Connector  Architecture)   – Integração  com  sistemas  não-­‐J2EE   •  JDBC  (Java  Database  Connec.vity)   – J2SE  +  DataSources,  transações  XA   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   21  
  • 22. APIs  do  J2EE:  Web   •  Servlets   –  Programação  Web  dinâmica   •  JSP  (Java  Sever  Pages)   –  Idem,  mais  visual   •  JSTL  (Java  Standard  Template  Library)   –  Idem,  mais  estruturado   •  JSF  (JavaServerFaces)   –  Idem,  implementando  o  MVC   •  Alterna3vas/Complementos:  Struts,  Spring...   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   22  
  • 23. APIs  do  J2EE:  XML  e  WebServices   •  JAXP  (Java  API  for  XML  Processing)   – DOM,  SAX,  XSLT   •  SAAJ  (SOAP  with  Axachments  API  for  Java)   – Web  Services:  SOAP  (modelo  documento)   •  JAX-­‐RPC  (Java  API  for  XML-­‐based  RPC)   – Web  Services:  SOAP  (modelo  RPC),  WSDL   •  JAXR  (Java  API  for  XML  Registries)   – Web  Services:  UDDI  /  ebXML   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   23  
  • 24. APIs  do  J2EE:  EJB   •  EJB  (Enterprise  Java  Beans)   – Componentes  Distribuídos;  Session;  RMI/IIOP   •  EJB  BMP/CMP/CMR   – En.ty;  Persistência  Automá.ca  (mapeamento   O/R)   •  EJB  MDB  (Message-­‐Driven  Beans)   – Facilidade  de  alto  nível  para  JMS  e  Web  Services   •  Transações,  Segurança   – Facilidades  declara.vas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   24  
  • 25. APIs  do  J2EE:  Persistência  de  Dados   •  JPA  (Java  Persistence  API)   – En.ty;  Persistência  Automá.ca   (mapeamento  O/R)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   25  
  • 26. Padrões  do  JCP   •  JCP:  Um  processo  aberto  e  par.cipa.vo,  com  o   obje.vo  de  definir  e  manter  todos  os  padrões  Java   •  Java  EE  6   –  Padroniza  quase  tudo:   •  APIs   •  Schemas,  Deployment   •  Comportamentos  (ciclos  de  vida,  etc.)   –  Não  contempla:   •  Ferramentas,  Metodologias   •  QoS   •  Integração  (ex.:  suporte  a  SGBDs  e  middlewares)   •  hxp://www.oracle.com/technetwork/java/javaee/ blueprints/index.html   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   26  
  • 27. Servidor  de  Aplicação   •  O  Java  EE  é  um  grande  conjunto  de   especificações,  formatada  em  um  grande   arquivo  PDF,  uma  especificação,  detalhando   quais  especificações  fazem  parte  deste.   •  Para  u.lizarmos  o  sosware,  é  necessário  fazer   o  download  de  uma  implementação  destas   especificações   •  Existem  diversas  implementações.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   27  
  • 28. Servidor  de  Aplicação   •  Como  este  sosware  tem  o  papel  de  servir  sua   aplicação  para  auxiliar  com  serviços  de  infraestruturas,   recebe  o  nome  de  servidor  de  aplicação.   •  Alguns  exemplos:   –  RedHat,  JBoss  Applica.on  Server,  gratuito,  Java  EE  5.   –  Sun/Oracle,  GlassFish,  gratuito,  Java  EE  6.   –  Apache,  Geronimo,  gratuito,  Java  EE  5.   –  Oracle/BEA,  WebLogic  Applica.on  Server,  Java  EE  5.   –  IBM,  WebSphere  Applica.on  Server,  Java  EE  5.   –  Sun/Oracle,  Sun  Java  System  Applica3on  Server  (baseado   no  GlassFish),  Java  EE  5.   –  SAP,  SAP  Applica3on  Server,  Java  EE  5.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   28  
  • 29. Servlet  Container   •  Algumas  implementações  do  J2EE  para  o   desenvolvimento  web:   –  JSP  –  Java  Server  Pages   –  Servlets   –  JSTL  –  Java  Server  Standard  Tag  Library   –  JSF  –  Java  Server  Faces   •  Servlet  container:  é  um  servidor  que  suporta   estas  funcionalidades,  mas  não  necessariamente   implementa  a  especificação  Java  EE  completa.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   29  
  • 30. Servlet  -­‐  Conceito   •  Aplicação  Java  executada  do  lado  do  servidor,   estendendo  a  capacidade  do  servidor  web   – Alterna.va  Java  para  os  scripts  CGI   – Gerenciado  pelo  módulo  web   •  Vantagens   – Melhor  aproveitamento  dos  recursos  do  sistema   – Fácil  de  programar   – Portável   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   30  
  • 31. Arquitetura  Cliente-­‐Servidor   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   31   GET (request) Documento HTML retorna (response) Documento HTML Cliente / Browser Servidor Formulário Submetido via POST (request) Servidor retorna HTML gerado pelo Servlet
  • 32. Arquitetura  Cliente-­‐Servidor   •  Arquitetura  baseada  na  divisão  do   processamento  em  processos  dis.ntos   –  Servidor   •  responsável  pela  manutenção  da  informação   –  Clientes   •  responsáveis  pela  obtenção  dos  dados   •  envio  de  pedidos  ao  processo  servidor   •  Cliente  faz  requisições  u.lizando  protocolo  HTTP   •  Para  cada  requisição  o  servidor  cria  uma  nova   Thread   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   32  
  • 33. Requisitando  um  Servlet  via  GET   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   33   GET (HTTP) http://localhost/servlet/ServletHyperMed?Comando=SetCtxLabPorNome&Por=&No=Apsen
  • 34. Requisitando  um  Servlet  via  POST   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   34  
  • 35. Servlet  API   •  Java Servlet API –  Conjunto de classes Java –  Define interface padrão entre o cliente web e o servidor web java.lang.Object | +----javax.servlet.GenericServlet | +----javax.servlet.http.HTTPServlet | +----br.mackenzie.fci.tpa3.MeuServlet Daniel  Arndt  Alves   Java  Enterprise  Edi.on   35  
  • 36. HxpServlet   •  Tratador  de  requisições  HTTP   •  Trata  métodos  HTTP  específicos   –  doGet(HttpServletRequest req, HttpServletResponse resp) –  doPost(HttpServletRequest req, HttpServletResponse resp) •  doGet  e  doPost   –  Chamados  pelo  método  service() •  Subclasses  reescrevem  os  métodos   –  doGet –  doPost •  Podem  reescrever  os  métodos     –  init() –  destroy() Daniel  Arndt  Alves   Java  Enterprise  Edi.on   36  
  • 37. Ciclo  de  Vida  do  Servlet   •  Criação  e  inicialização   – Realizado  uma  única  vez   •  init(ServletConfig config) – Sempre  chama  o  método  da  super  classe  primeiro   •  super.init(config) – Pode  sinalizar  a  exceção   UnavailableException  caso  ocorra  algum   erro  durante  o  processo  de  inicialização   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   37  
  • 38. Ciclo  de  Vida  do  Servlet   •  Os  médotos  service(),  doGet(),   doPost()  são  chamados  para  atender   requisições  de  clientes   – Cada  requisição  é  atendida  por  uma  nova  thread   •  destroy()  e  Garbage  Collec3on   – Executado  somente  uma  vez   – Alguns  servidores  somente  removem  o  servlet   quando  ocorre  o  shutdown   – U.lizado  para  liberar  recursos   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   38  
  • 39. Java  Servlet  API   •  Para  criar  um  Servlet  é  necessário   – Estender  a  classe  HxpServlet     •  pacote  javax.servlet.http  do  JSDK   – Implementar  os  métodos  doGet  ou  doPost Daniel  Arndt  Alves   Java  Enterprise  Edi.on   39  
  • 40. Request  &  Response   •  Métodos  doGet(),  doPost()  recebem   dois  parâmetros   – HttpServletRequest     •  encapsula  os  parâmetros  da  requisição   – HttpServletResponse •  encapsula  a  resposta  ao  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   40  
  • 41. HttpServletRequest •  Interface  que  encapsula  a  requisição  feita  pelo   cliente  através  do  protocolo  HTTP   •  Possui  métodos  que  permitem  recuperar  os   dados  da  requisição   – cabeçalho   – dados  de  formulários  ou  parâmetros  enviados   – informações  sobre  a  sessão  do  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   41  
  • 42. HttpServletRequest •  Alguns  métodos  definidos  em   HttpServletRequest  para  manipulação  de   Parâmetros   –  java.util.Enumeration getParameterNames()     •  Obtém  listagem,  contendo  nomes  de  parâmetros  da  requisição   –  java.lang.String[] getParameterValues(java.lang.String name) •  Obtém  valores  do  parâmetro  “name”  da  requisição   –  java.lang.String getParameter(java.lang.String name)     •  Obtém  valor  do  parâmetro  “name”  da  requisição   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   42  
  • 43. HttpServletResponse •  Interface  que  encapsula  a  resposta  ao  cliente   •  Possui  um  método  responsável  por  recuperar   o  canal  de  resposta  com  o  cliente   – getWriter() – retorna  um  PrintWriter Ex:    PrintWriter out = response.getWriter();              out.println(“Escrevendo no cliente”); Daniel  Arndt  Alves   Java  Enterprise  Edi.on   43  
  • 44. HttpServletResponse •  Também  é  possível  configurar  qual  é  o  .po   dos  dados  que  estão  sendo  enviados  de  volta   ao  cliente   – setContentType(String type) – Os  .pos  mais  comuns  são  text/html,  text/xml   – O  método  setContentType  deve  ser  chamado   antes  do  método  getWriter Daniel  Arndt  Alves   Java  Enterprise  Edi.on   44  
  • 45. Servlet  Exemplo:  Hello  World!   package tpa3.servlets; import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("<html>"); out.println("<head>"); out.println("<title>Hello World!</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Hello World!</h1>"); out.println("</body>"); out.println("</html>"); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   45   Hello  World!  
  • 46. Servlet  Exemplo:  RequestParam   import java.io.*; import java.util.*; import javax.servlet.*; import javax.servlet.http.*; public class RequestParamExample extends HttpServlet { @Override public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println("GET Request. No Form Data Posted"); } ... Daniel  Arndt  Alves   Java  Enterprise  Edi.on   46  
  • 47. Servlet  Exemplo:  RequestParam   ... @Override public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException { Enumeration e = request.getParameterNames(); response.setContentType("text/html"); PrintWriter out = response.getWriter(); while (e.hasMoreElements()) { String name = (String) e.nextElement(); String value = request.getParameter(name); out.println(name + " = " + value); } } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   47  
  • 48. Gerenciamento  de  Sessão   •  Protocolo  HTTP   – Protocolo  sem  estado   •  Não  é  possível  a  princípio  conhecer  o  estado   do  cliente  anterior  à  uma  requisição   •  O  gerenciamento  de  sessão  provê  uma   maneira  de  iden.ficar  usuários  através  de   várias  requisições  HTTPs  e  recuperar  suas   informações   – Dados  do  estado  do  cliente   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   48  
  • 49. Gerenciamento  de  Sessão   •  Para  obter  uma  sessão   – H[pSession  getSession()   •  Obtém  sessão  existente,  caso  não  exista  retorna  uma   nova  sessão     – H[pSession  getSession(boolean  create)     •  Obtém  sessão  existente  ou  cria  uma  nova  sessão   dependendo  do  valor  do  parâmetro  create   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   49  
  • 50. Gerenciamento  de  Sessão   •  Métodos  para  manipulação  de  objetos  em  sessão   –  void removeAttribute(String name) •  Re.ra  objeto  da  sessão   –  void setAttribute(String name, Object value) •  Coloca  ou  sobreescreve  objeto  na  sessão  iden.ficado  por   name   –  java.lang.Object getAttribute(String name) •  Obtém  objeto  da  sessão   –  java.util.Enumeration getAttributeNames() •  Obtém  os  nomes  de  todos  os  objetos  armazenados  na   sessão   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   50  
  • 51. Gerenciamento  de  Sessão   •  Tempo  de  duração  da  sessão   – Sessões  em  geral  tem  intervalo  máximo  de  tempo   que  podem  ficar  ina.vas   •  public int getMaxInactiveInterval() •  public void setMaxInactiveInterval(int interval) – As  sessões  também  podem  ser  encerradas   explicitamente  pelo  programador   •  public void invalidate() Daniel  Arndt  Alves   Java  Enterprise  Edi.on   51  
  • 52. Colocando  para  Funcionar   •  Para  que  o  servlet  “funcione”   –  Necessário  que  um  servidor  web/aplicação  com  suporte  a   java  que  escute  as  requisições  do  cliente   –  Ex:   •  IBM  WebSphere  Applica.on  Server   •  Jakarta  Tomcat   •  Java  Web  Server   •  GlassFish   •  Etc.   –  Jakarta  Tomcat   •  Servidor  gratuito  baseado  em  java     •  Configurável  de  maneira  simples  via  XML     •  Oferece  suporte  a  Java  (Servlets  e  JSP)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   52  
  • 53. Tomcat  x  GlassFish   •  O  Tomcat:  é  um  servlet  container  simples,  que   pode  hospedar  JSP  e  servlets.     •  O  GlassFish  é  mto  mais  poderoso.   – GlassFish  além  de  ser  um  servlet  container,   também  é  uma  pilha  de  aplicação  compa~vel  com   aplicação  de  servidor  que  inclui  uma  pilha  de   serviços  Web  (Metro),  EJBs,  Java  Persistence,  JMS,   JavaMail  e  muitos  outros  incluídos  na   especificação  J2EE.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   53  
  • 54. Arquitetura  JSP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   54   HTML de resposta montado a partir de sucessivos comandos out.println(...). Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() (Visão)  
  • 55. JSP  -­‐  Conceito   •  Tecnologia  que  permite  combinar  informações  está.cas  com  informações   geradas  dinamicamente   •  Script  executado  no  servidor   –  Combinação  de  sintaxe  JSP  e  tags  de  marcação   –  Tags  está.cos   •  HTML,  XML   –  Conteúdo  dinâmico  gerado  pelo  código  do  script   •  Java   •  Exemplo   <html> <head> <title>Primeiro JSP</title> </head> <body> <h1>Data e hora: <%= new java.util.Date() %></h1> </body> </html> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   55  
  • 56. Compilação  de  JSP   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   56   xxx.jsp requisição para xxx.jsp resposta resposta de erro xxx.class (servlet) Geração de Código Java xxx.java (servlet) Compilação
  • 57. Tags  JSP   •  Dire.vas   –   Configuração  do  processador  JSP   –   Inclusão  está.ca  de  conteúdo     –   Encaminhamento  de  requisições  para  outros   servidores   •  Comandos  de  script   –  Inserção  de  código  para  a  programação  de  conteúdo   dinâmico       •  Ações   –  Tags  de  alto  nível  que  encapsulam  padrões  de   programação  mais  corriqueiros   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   57  
  • 58. Dire.vas  JSP   <%@ nome-da-diretiva [nome-atributo = "valor-do- atributo"]* %> •  Diretivas disponíveis –  <%@ include file="url-relativa" %> •  Inclusão em tempo de compilação –  <%@ taglib uri="url-relativa-da- biblioteca-de-tags" prefix="prefixo-das-tags" %> –  <%@ page lista-de-atributos %> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   58  
  • 59. Atributos  da  Dire.va  Page   •  language="nome-­‐da-­‐linguagem-­‐de-­‐script"   •  contentType="mime-­‐type  |  mime-­‐type;  charset=nome-­‐ charset"   •  errorPage="url-­‐página-­‐de-­‐erro"   •  isErrorPage="true  |  false"   •  buffer="none|tamanho-­‐em-­‐kb"     •  auto-­‐flush="true  |  false"               •  import="lista-­‐de-­‐pacotes"                       •  extends="nome-­‐da-­‐classe-­‐base"   •  session="true  |  false"   •  isThreadSafe="true  |  false"   •  info="texto-­‐informa.vo"   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   59  
  • 60. Exemplos  de  Dire.vas   •  Diretiva Include <%@ include file="/teccommdoc/header.html" %> •  Diretiva Taglib <%@ taglib uri="/tags/teccommtags" prefix="teccomm" %> <teccomm:exemplo parametro="demonstracao" /> •  Diretiva Page <%@ page language="java" errorPage="erro.jsp" isErrorPage="false" buffer="12kb" auto- flush="true" session="true" isThreadSafe="true" info="TecComm" %> •  Ou <%@ page language="java" %> <%@ page errorPage="erro.jsp" %> <%@ page import="com.teccomm.output.*" %> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   60  
  • 61. Tags  de  Script   •  Declarações <%! declaração %> •  Scriptlets <% comandos %> •  Expressões <%= expressão %> •  Comentários <!-- comentário html --> <%-- comentário jsp --> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   61  
  • 62. Declarações   •  <%! declarações %> •  Exemplos <%! int i = 0; public void metodo {...} %> <%! int a, b, c; %> <%! Circle a = new Circle(2.0); %> •  Declara variáveis ou métodos a serem utilizados no código JSP Daniel  Arndt  Alves   Java  Enterprise  Edi.on   62  
  • 63. Scriptlets   •  <% fragmento_de_código_válido %> •  Exemplo <% String name = null; if (request.getParameter(“nome") == null) { %> <%@ include file="error.html" %> <% } else { foo.setName(request.getParameter(“nome")); } %> •  Um scriptlet pode conter qualquer número de instruções, variáveis, métodos, declarações ou expressões válidos Daniel  Arndt  Alves   Java  Enterprise  Edi.on   63  
  • 64. Expressão   •  <%= expressão %> •  Exemplo O mapa tem <font color="blue"><%= mapa.getCount() %></font> entradas. •  Esta tag contém uma expressão que é avaliada e convertida para string, depois de processada. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   64  
  • 65. Comentários   •  <!-- comentário [ <%= expressão %> ] --> •  Exemplo <!-- Comentário --> <!-- Esta página foi carregada em <%= (new java.util.Date()).toLocaleString() %> --> •  O processador JSP trata um comentário como texto HTML não interpretado, retornando-o ao cliente. •  Uma expressão pode ser incluída em um comentário, sendo avaliada e seu resultado é retornado ao usuário juntamente com o HTML de resposta Daniel  Arndt  Alves   Java  Enterprise  Edi.on   65  
  • 66. Comentários  para  Desenvolvimento   •  <%-- comentário --%> •  Exemplo <%@ page language="java" %> <html><head><title>Um teste - comentário</title></head> <body><h2>Um teste - comentário</h2> <%-- Este comentário não estará disponível para o cliente --%> </body></html> •  O processador JSP simplesmente ignora este tipo de comentário e não processa nenhum código ou expressão contida entre os delimitadores. •  Este tipo de comentário não será enviado para o cliente Daniel  Arndt  Alves   Java  Enterprise  Edi.on   66  
  • 67. Objetos  Pré-­‐Definidos   •  Disponíveis  para  scriplets  e  expressões   – request   – response   – session   – out   – excep3on  (somente  em  páginas  de  erro)   – page   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   67  
  • 68. Ações   •  jsp:include •  jsp:forward – ou  então  tags  personalizadas  via  taglib   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   68  
  • 69. jsp:include e jsp:forward •  Ações  u.lizadas  para  o  encadeamento  de   páginas  jsp   –  <jsp:include page="url-relativa-da-página" /> •  Suspende  o  processamento  da  página  chamadora  e   repassa  o  controle  para  a  página  chamada  até  que  esta   retorne-­‐o   –  <jsp:forward page="url-relativa-da-página" /> •  O  processamento  da  página  chamadora  é  terminado  e   o  controle  é  repassado  sem  espera  de  retorno  para  a   página  chamada   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   69  
  • 70. jsp:include <jsp:include page="{URLrelativa |<%=expressão%>}"/> •  Exemplos: <jsp:include page="scripts/login.jsp" /> <jsp:include page="copyright.html" /> <jsp:include page="/index.html" /> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   70  
  • 71. jsp:forward <jsp:forward page="{URLrelativa|<%=expressão%>}"/> •  Exemplo <jsp:forward page="scripts/login.jsp" /> •  A tag <jsp:forward> repassa o objeto request enviado para o arquivo JSP para que seja processado por outra aplicação •  •  O processador JSP não executa o restante das instruções contidas após a tag. Daniel  Arndt  Alves   Java  Enterprise  Edi.on   71  
  • 72. Servlet  +  Orientação  a  Objetos   •  Agora  sabemos     – Programar  servlets   – Modelar  um  sistema  orientado  a  objetos   •  Mas  como  fazer  os  dois  funcionarem  juntos?   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   72  
  • 73. Servlet  +  Orientação  a  Objetos   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   73   browser HTTP Servlet NewClass5 NewClass NewClass4NewClass6 NewClass7 NewClass2 NewClass3 NewClass8 NewClass9 NewClass10 ??
  • 74. Arquitetura  MVC   •  O que é MVC? –  MVC – Model-View-Controller –  Surgiu nos anos 80 com SmallTalk •  Sugere a divisão de uma aplicação visual em 3 partes fundamentais –  Model •  Representa o modelo da sua aplicação, com as regras de negócio (business logic) e todo o processamento da aplicação –  View •  Representa a informação e recolhe os dados fornecidos pelo usuário –  Controller •  Recebe as informações da entrada e as transmite para o modelo Daniel  Arndt  Alves   Java  Enterprise  Edi.on   74  
  • 75. Mo.vação  para  a  Arquitetura  MVC   •  An.gamente:   –  Forms  com  ações  locais   –  Lógica  de  negócio  na  view   –  Acesso  descentralizado  e  não  padronizado  ao  BD   •  Evolução:   –  Stored  Proedures:  .ra  a  lógica  de  negócio  da  view  e  a   coloca  no  BD.   •  Manutenção  Custosa   •  Adição  de  novas  funcionalidades,  normalmente   altera  o  funcionamento  das  an.gas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   75  
  • 76. História  do  MVC   •  O  que  precisou  para  que  o  MVC  pudesse  surgir?   •  Orientação  a  Objetos  (C++,  Smalltalk)   •  Padrões  de  Projeto  (Design  PaGerns)   –  Um  Design  PaGern  surge  para  resolver  um  problema   que  muitos  programadores  encontram.   –  Se  muitos  desenvolvedores  encontra,  muitas  soluções   surgem.   –  Através  da  colaboração,  as  soluções  são  maturadas  e   eventualmente  uma  ou  mais  soluções  emergem  como   Padrões  de  Projeto  (Design  PaGern)   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   76  
  • 77. História  do  MVC   •  Existem  Design  PaGerns  para  Undo/Redo,   padronizar  comandos,  padronizar  a  criação  de   objetos,  entre  outros.   •  Um  dos  Design  PaGerns  que  foi  essencial  para  a   ciração  do  padrão  MVC  foi  o  padrão  Controller.   •  Um  Controller  se  responsabiliza  por  receber  as   requisições  (normalmente,  proveniente  dos   atores  do  Diagrama  de  Casos  de  Uso)  e   redireciona  o  processamento  para  um  objeto  que   consegue  dar  a  resposta  adequada  à  requisição   que  chegou.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   77  
  • 78. História  do  MVC   •  O  MVC  foi  inicialmente  proposto  por  R.   Trygve,  da  Xerox  Labs,  em  1978.   •  Note,  então  que  o  Controller  não  responde   diretamente  às  requisições,  ele  direciona  o   processamento  para  quem  pode  fazer  isso   adequadamente.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   78  
  • 79. Arquitetura  MVC   •  Pela arquitetura, a interação de um usuário com o sistema se dá através de sequências de chamadas MVC Daniel  Arndt  Alves   Java  Enterprise  Edi.on   79   Servlet + Controladores (Controle) Objetos de Negócio (Modelo) JavaBean de Resposta Browser JSP doGet() (Visão)  
  • 80. Padrão  MVC   •  O  que  é  o  padrão  MVC?   •  Em  uma  aplicação  real,  e  mais  ainda  em   aplicações  que  empregam  banco  de  dados,  o   fluxo  de  dados  de  uma  operação  tem  de  seguir   um  caminho  específico:   –  Encontrar  a  chave  primária  do  dado  na  tabela   –  Requisitar  o  registro   –  Requisitar  os  registros  das  tabelas  referenciadas   através  de  chaves  estrangeiras   –  Atualizar  dados   –  Realizar  o  commit  das  mudanças  nas  tabelas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   80  
  • 81. Padrão  MVC   •  Normalmente,  esse  fluxo  de  operações  faz   sen.do  ao  se  olhar  a  modelagem  do  banco  de   dados  para  a  aplicação,  mas  não  faz  o  menor   sen.do  para  o  usuário  final.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   81  
  • 82. Padrão  MVC   •  Qual  o  obje.vo  então?   •  Fazer  uma  abstração  dos  dados  no  domínio,   de  modo  que  a  informação  que  o  usuário   analisa  é  a  mesma  informação  que  o  domínio   mantém,  mas  não  necessariamente  na  mesma   forma.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   82  
  • 83. Padrão  MVC  -­‐  Camadas   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   83   View   View   View   Controller   Model   Model   BD  
  • 84. Padrão  MVC  -­‐  Model   •  O  model  deve  fazer  a  ponte  entre  a   representação  que  o  usuário  interage  e  a   representação  que  o  sistema  armazena  em  seu   banco  de  dados.   •  Quando  os  dados  da  aplicação  são  armazenados   em  banco  de  dados,  a  camada  model  trata  da   interação  entre  a  aplicação  e  o  seu  banco  de   dados.   •  O  Framework    Hibernate  pode  ser  empregado   como  model,  por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   84  
  • 85. Padrão  MVC  -­‐  View   •  A  view  tem  por  obje.vos  realizar  a  interação  com   o  usuário.   •  Chamada  de  camada  de  apresentação  ou  de   camada  de  visualização.   •  Apresenta  informações  para  o  usuário,  e  coleta   informações  dele.   •  A  view  pode  mostrar  a  informação  do  mesmo   modo  em  que  está  no  domínio,  ou  alterar  a   forma  de  apresentação  desta  informação,   ressaltando  que  a  informação  é  a  mesma.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   85  
  • 86. Padrão  MVC  -­‐  View   •  Por  exemplo,  pode-­‐se  apresentar  dados   esta~s.cos  sobre  o  acesso  a  um  determinado   website  em  uma  tabela.   •  Ou,  então,  pode  mostrar  esses  mesmos  dados   em  um  gráfico,  histograma,  ou  em  uma   .meline.   •  Ou,  apresentar  os  resultados  em  uma  página   web,  empregando  JSP  –  Java  Server  Pages,   por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   86  
  • 87. Padrão  MVC  -­‐  Controller   •  O  Controller  tem  por  função  receber  as   requisições  da  view  e  direcionar  o   processamento  para  uma  classe  que  possa   responder  adequadamente  à  requisição.   •  A  maioria  das  implementações  de  MVC  em   Frameworks,  encapsula  o  Controller,  de  forma   que  ele  fique  oculto.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   87  
  • 88. Padrão  MVC  -­‐  Controller   •  Isso  acontece  porque  é  muito  fácil  colocar   implementações  que  não  se  encaixam  no  padrão   Controller  em  um  Controller,  e  então,  seu   “Controller”  perde  a  caracterís.ca  de  um   Controller.  A  par.r  desse  ponto,  a  tendência  é   que  se  perca  o  controle  sobre  a  separação  em   camadas.   •  Uma  servlet  e  classes  auxiliares,  que  ficam  com  a   lógica  de  negócio,  ou  regras  de  negócio,  onde   estariam  o  código  Java,  por  exemplo.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   88  
  • 89. Padrão  MVC  -­‐  Controller   •  Pode  ser  empregadas  outras  tecnologias,  tais   como  JSF  –  Java  Server  Faces.   •  Esta  especificação  é  baseada  em   componentes  e  possui  facilidades  para  o   desenvolvimento  de  interfaces  gráficas.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   89  
  • 90. Padrão  MVC  –  Java   •  Em  linguagem  Java,  existem  diversas   implementações  do  padrão  MVC,  dentre  elas:   – Struts   – JSF   – Sping   – Vraptor   – JSP/Servlet   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   90  
  • 91. Modelo  MVC  -­‐  Java   •  Para  se  implementar  o  modelo  MVC  em   linguagem  Java,  u.lizando  JSP  e  Servlets,   u.lizamos  a  seguinte  arquitetura:   – View  =  JSP   – Controller  =  Servlet   – Model  =  DAO   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   91  
  • 92. DAO   •  O  padrão  DAO  é  visto  em  Banco  de  Dados  e  JDBC.   •  DAO  é  a  sigla  para  Data  Access  Object,  e  é   literalmente  um  objeto  para  acessar  dados.  Esses   dados,  no  caso,  estão  armazenados  no  banco  de   dados.   •  A  proposta  é  encapsular  o  acesso  ao  banco  de   dados,  de  dorma  que  a  aplicação  externa  (for  a   do  DAO),  o  acesso  aos  dados  se  resuma  a   execução  de  uma  função  em  um  objeto  DAO.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   92  
  • 93. DAO   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   93  
  • 94. JavaBeans   •  A  aplicação  está  dividida  em  camadas.  Como   que  se  dá  a  comunicação  entre  as  camadas?   •  Como  que  a  informação  de  uma  camada  para   a  outra,  do  BD  até  o  usuário  e  vice-­‐versa?   •  A  informação  e  passada  em  JavaBeans.   •  JavaBeans  são  simplesmente  classes  Java,  com   membros  não  públicos,  construtor  vazio  e   gexers/sexers  para  todos  os  membros.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   94  
  • 95. Servlets  sem  MVC   •  Esses  servlets  faziam  tudo,  como  vimos:   –  Recebiam  a  requisição  do  cliente.   –  Validavam  a  requisição.   –  Conectavam  com  o  banco  de  dados  para  pegar  dados   e  responder  à  requisição.   –  Montavam  a  resposta.   –  Escreviam  o  código  HTML  da  resposta.   •  O  código  desses  servlets  era  imenso,  altamente   acoplado,  diƒcil  de  dar  manutenção  e  diƒcil  de   localizar  e  corrigir  erros.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   95  
  • 96. Servlets  com  MVC   •  Qual  o  papel  do  Servlet  no  MVC?   •  O  JSP  se  responsabiliza  pela  view.   •  O  ideal  é  que  o  JSP  não  tenha  de  realizar   nenhum  processamento  para  a  montagem  da   resposta.   •  Todos  os  dados  rela.vos  à  resposta  devem   estar  disponíveis,  quando  o  JSP  for  montar  seu   código  HTML.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   96  
  • 97. Servlets  com  MVC   •  O  papel  do  Servlet,  então,  e  não  exatamente   coletar  estes  dados,  mas  controlar  os  objetos   que  podem  coletar  estes  dados.  De  posse  dos   dados,  então  redirecionar  o  processamento   para  o  JSP.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   97  
  • 98. Estrutura  do  Servlet   •  Um  servlet  é  uma  classe  que  herda  da  classe   javax.servlet.http.HttpServlet:   public class SCPF extends HttpServlet { Daniel  Arndt  Alves   Java  Enterprise  Edi.on   98  
  • 99. Estrutura  do  Servlet   •  A  classe  HttpServlet  tem  diversas  funções  que  podem   ser  sobrecarregadas  em  um  Servlet,  com  destaque  para:   @Override protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } @Override protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { processRequest(request, response); } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   99  
  • 100. Estrutura  do  Servlet   protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html;charset=UTF-8"); PrintWriter out = response.getWriter(); try { /* TODO output your page here. You may use following sample code. */ out.println("<html>"); out.println("<head>"); out.println("<title>Servlet SCPF</title>"); out.println("</head>"); out.println("<body>"); out.println("<h1>Servlet SCPF at " + request.getContextPath() + "</ h1>"); out.println("</body>"); out.println("</html>"); } finally { out.close(); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   100  
  • 101. Considerações   •  O  exemplo  anterior  ilustra  a  forma  tradicional  de   se  implementar  um  Servlet.   •  Se  adquire  um  objeto  PrintWriter  para   escrever  a  resposta  ao  usuário,  e  se  começa  a   escrever  o  código  HTML.   •  Esta  é  a  forma  que  não  queremos  usar!   •  Nota:  Para  usarmos  o  Servlet  da  forma  que   queremos,  usando  o  padrão  MVC,  é  essencial   que  nenhuma  saída  seja  escrita  no  response   para  o  usuário.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   101  
  • 102. RequestDispatcher •  O  servlet  MVC  deve  se  comportar  apenas  como  um   gerenciador  de  requisições.   •  Para  que  isso  possa  funcionar  adequadamente,   precisamos  u.lizar  o  RequestDispatcher,  em   conjunto  com  o  setAttribute  do  request.   •  Usando  desta  forma,  o  servlet  tem  o  seguinte  fluxo:   –  Recebe  a  requisição   –  Redireciona  para  alguém  que  saiba  tratar  a  resposta   –  Configura  os  valores  nos  atributos  do  request –  Redireciona  para  algum  JSP,  que  contém  o  código  HTML.   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   102  
  • 103. Exemplo   •  servletToJSP.java   protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // faz alguma coisa aqui para tratar a requisição // ... // Configura os parâmetros da resposta request.setAttribute("servletName", "servletToJSP"); // Envia dos dados ao JSP para renderização e exibição ao usuário try{ getServletConfig().getServletContext().getRequestDispatcher("/Demo/ scpf.jsp").forward(request, response); } catch(ServletException e){ e.printStackTrace(); } catch(IOException e){ e.printStackTrace(); } } Daniel  Arndt  Alves   Java  Enterprise  Edi.on   103  
  • 104. Exemplo   •  scpf.jsp   <%@page contentType="text/html" pageEncoding="UTF-8"%> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>JSP Page</title> </head> <body> <h1>I have been invoked by <% out.print(request.getAttribute("servletName").toString()); %> Servlet!</h1> </body> </html> Daniel  Arndt  Alves   Java  Enterprise  Edi.on   104  
  • 105. Exemplo   Daniel  Arndt  Alves   Java  Enterprise  Edi.on   105  
  • 106. Java  Enterprise  Edi.on   106  Daniel  Arndt  Alves  
  • 107. Java  Enterprise  Edi.on   107  Daniel  Arndt  Alves  
  • 108. Imagens   •  hxp://www.digitalprank.org/wp-­‐content/uploads/2008/03/ejb.png   •  hxp://sandersconsul.ng.com/Portals/58319/images/checklist.jpg     •  hxp://vip.cs.utsa.edu/classes/cs4393f2006/lectures/images/ overview-­‐j2eeArchitecture.gif     •  hxp://www.dave-­‐woods.co.uk/wp-­‐content/uploads/2010/02/ screens.gif     •  hxp://www.ishopping.pk/product_images/y/423/iMac-­‐ Lion__45051_std.png     •  hxp://www.wegotserved.com/wp-­‐content/uploads/2011/08/ MacMiniServer.jpg     •  hxp://sao-­‐paulo.pm.org/sta.c/images/equinocio/2010/mar/dbic/ Normalized-­‐Schema.png     Daniel  Arndt  Alves   Java  Enterprise  Edi.on   108  
  • 109. Obrigado     Daniel  Arndt  Alves   daniel.alves@mackenzie.br   Java  Enterprise  Edi.on   109  Daniel  Arndt  Alves