Introdução à Plataforma J2EE Java2 Enterprise Edition Alex de V. Garcia, Dr. 1 O que é a plataforma J2EE? • Estende a linguagem Java através de padrões simples e unificados para aplicações distribuídas através de um modelo baseado em componentes. • J2EE especifica tanto a infra-estrutura para gerenciar suas aplicações quanto APIs para contruí-las. Alex de V. Garcia, Dr. 2 Padronização • Java Community Process. www.jcp.org • Participantes: Accenture, Adobe, BEA, Borland, British Telecom, Bull, Cisco, Compaq, DOD, EDS, Ericsson, Fujitsu, HP, Hitachi, IBM, Macromedia, Mitsubishi, Motorola, NEC, Nokia, Novell, NTT, Oracle, Panasonic, Philips, Rational, SAP, Sharp, Siemens, Sony, Sun, Sybase, Telefonica, Texas Instruments, Unisys, Verisign, Vignette, Vodafone, Xerox, Yamaha,... Alex de V. Garcia, Dr. 3 Linguagem Java • A linguagem Java é Orientada a Objetos • A linguagem é totalmente portável • A linguagem implementa desalocação automática de memória Alex de V. Garcia, Dr. 4 Linguagem Java • A linguagem Java é Orientada a Objetos Influenciada diretamente por C++ e Eiffel, a linguagem segue a grande tendência das linguagens de programação nas décadas de 80 e 90. Neste período, linguagens como Pascal, Ada, Lisp e Cobol ganharam versões Orientadas a Objetos. Alex de V. Garcia, Dr. 5 Linguagem Java • A linguagem é totalmente portável Código Fonte .java Compilador Código Bytecode .class Máquina Virtual Alex de V. Garcia, Dr. 6 Linguagem Java • A linguagem implementa desalocação automática de memória (“coleta de lixo”), e não permite a desalocação manual. – – – – Produtividade do programador Testes Bugs Qualidade Alex de V. Garcia, Dr. 7 Linguagem Java • A linguagem Java é Orientada a Objetos • A linguagem é totalmente portável • A linguagem implementa desalocação automática de memória Alex de V. Garcia, Dr. 8 Linguagem Java • A linguagem Java é Orientada a Objetos – Custo de ligação dinâmica para implementar o polimorfismo. – Custo de indireção para a semântica por referência. – Alto custo do mecanismo de tratamento de exceções. Alex de V. Garcia, Dr. 9 Linguagem Java • A linguagem é totalmente portável – Custo de interpretação dos bytecodes. – Custo de interpretação dos tipos primitivos. Alex de V. Garcia, Dr. 10 Linguagem Java • A linguagem implementa desalocação automática de memória. – Performance. – Consumo de memória. Alex de V. Garcia, Dr. 11 Linguagem Java • Conclusão: – Java é uma das linguagens mais bem projetadas desde Ada. – Java não apresenta performance comparável a Fortran ou C. – As decisões de projeto da linguagem são ótimas para rodar em um servidor Web. • Portabilidade entre diferentes sistemas operacionais. • Facilidades de multithreading incluídas na linguagem. • Baixo custo de desenvolvimento (alta produtividade). Alex de V. Garcia, Dr. 12 Aplicações Web • São aplicações cliente-servidor Interface ? Lógica ? Alex de V. Garcia, Dr. Dados SGBD Interface Lógica Servidor Cliente 13 Aplicações Web Servidor Cliente XML Applet JavaScript VbScript ttp H Browser JVM Html Servidor BD Httpd JVM ? + Servlet SGBD Alex de V. Garcia, Dr. 14 Java no Cliente Cliente Browser JVM Applet Alex de V. Garcia, Dr. Lógica JavaScript VbScript Interface Html XML 15 Exemplo de Servlet import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); out.println("<HTML><BODY>"); out.println("<BIG> Alô Mundo </BIG>"); out.println("</BODY></HTML>"); } } Alex de V. Garcia, Dr. 16 Tratando o Request <HTML> <BODY> <FORM METHOD=GET ACTION=“/Olah”> Qual é o seu nome? <INPUT TYPE = TEXT NAME=“nome”><P> <INPUT TYPE = SUBMIT> </FORM> </BODY> </HTML> •Cada campo em um formulário HTML representa um parâmetro para um request do tipo Get ou Post, de acordo com o especificado no atributo “METHOD”. Alex de V. Garcia, Dr. 17 Tratando o Request public class Olah extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter(); String nome = req.getParameter("nome"); out.println("<HTML>"); out.println("<BODY>"); out.println(”Olá, " + nome); out.println("</BODY></HTML>"); } } Alex de V. Garcia, Dr. 18 Java no Servidor Servlet resposta solicitação Get solicitação Post resposta service ( ) HttpServlet doGet ( ) service ( ) doPost ( ) Reimplementados na subclasse Métodos executados Alex de V. Garcia, Dr. Subclasse de HttpServlet doGet ( ) doPost ( ) 19 Java no Servidor • Da mesma forma que existe lógica no cliente, existe apresentação no servidor. • Como separar a apresentação da lógica? – Facilitar edição para mudança de layout – Facilitar mudança de padrão de saída (ex: de HTML para WML) – Facilitar manutenção da interface Alex de V. Garcia, Dr. 20 JSP JSP Servlet ---- texto html ------- texto html ------- texto html ---<% código java %> ---- texto html ---<% código java %> ---- texto html ------- texto html ---- out.print(texto html) out.print(texto html) out.print(texto html) -- código java -out.print(texto html) -- código java -out.print(texto html) out.print(texto html) Alex de V. Garcia, Dr. 21 Exemplo de JSP <HTML> <HEAD> <TITLE>Olá</TITLE> <BODY> Olá, <%= request.getParameter(”nome”) %>, a hora é <%= new java.util.Date() %> <BR> </BODY> </HTML> Alex de V. Garcia, Dr. 22 Java no Servidor Interface JSP Lógica Servlet Dados Alex de V. Garcia, Dr. 23 Exemplo de Java Bean package br.xpto; public class UsuarioLogado { private String id; private int nivelAcesso; public String getId() { return id; public void setId(String id) { this.id = id; } public int getNivelAcesso() { return nivelAcesso; } public void setNivelAcesso(int nivelAcesso) { this.nivelAcesso = nivelAcesso; } Alex de V. Garcia, Dr. } 24 Java no Servidor Interface JSP Lógica Servlet Dados Java Beans Alex de V. Garcia, Dr. 25 Arquitetura MVC • Padrão Arquitetural da plataforma J2EE • Model – Dados de negócio • View – Apresentação para o cliente • Controller – Lógica de controle • Onde entra a lógica da aplicação? Alex de V. Garcia, Dr. 26 EJBs Web EJB Container Container Cliente XML Applet ttp H Browser JVM Html Servidor BD JSP JavaScript VbScript Servlet Java Beans Alex de V. Garcia, Dr. EJBs SGBD EJBs 27 JDBC • API padrão para acesso a base de dados heterogêneas. • JDBC 2.0: Tipos de dados SQL 3, DataSource Aplicação API JDBC Alex de V. Garcia, Dr. API SGBD JDBC Driver SGBD 28 JNDI • Acesso a serviços de nome e diretório independentemente de sua aplicação. • Ciclo: Conexão, autenticação, busca e desconexão. Alex de V. Garcia, Dr. 29 RMI - IIOP • Protocolo que permite invocar métodos remotos de objetos escritos em Java. • Permite passar dados por valor, mediante serialização. Aplicação Objeto Stub Skeleton Camada RMI Alex de V. Garcia, Dr. 30 Exemplo RMI import java.rmi.*; interface HoraI extends Remote { long getHoraCerta() throws RemoteException; } Alex de V. Garcia, Dr. 31 Exemplo RMI public class Hora extends UnicastRemoteObject implements HoraI { public long getHoraCerta() throws RemoteException { return System.currentTimeMillis(); } public Hora() throws RemoteException { } public static void main(String[] args) throws Exception { LocateRegistry.createRegistry(2005); Hora h = new Hora(); Naming.bind("//200.20.120.166:2005/hora", h); } } Alex de V. Garcia, Dr. 32 Exemplo RMI public class ClienteHoraCerta { public static void main(String[] args) throws Exception { HoraI t = (HoraI)Naming.lookup( "//200.20.120.166:2005/hora"); for(int i = 0; i < 10; i++) System.out.println(”Hora Certa = " + t.getHoraCerta()); } } Alex de V. Garcia, Dr. 33 Deployment • Módulos Web – Arquivo .war contendo web.xml no diretório WEB-INF • Módulos EJB – Arquivo .jar contendo ejb-jar.xml no diretório META-INF • Módulos Java – Arquivo .jar contendo application-client.xml • Um .ear que contém application.xml no diretório META-INF Alex de V. Garcia, Dr. 34 Deployment DD = Deployment Descriptor Modulo EJB .JAR Enterprise Bean EJB DD Alex de V. Garcia, Dr. Servlet JSP Applicação J2EE .EAR Application DD Modulo Web .WAR Modulo Cliente .JAR HTML, GIF, etc. Web DD Client Class Client DD 35 Papéis no desenv. J2EE • Provedor de Produto • Desenvolvedor de Componente de Aplicação • Montador de aplicação • Deployer de Aplicação • Administrador de Sistema Alex de V. Garcia, Dr. 36 Servidores de Aplicação • Em 03 de Maio 2003: – 18 servidores de aplicação certificados em J2EE1.2 – 15 servidores de aplicação certificados em J2EE1.3 Alex de V. Garcia, Dr. 37 Performance • Apesar dos custos de abstração da linguagem Java. A performance de servlets é equivalente a de CGI C++. • Os principais servidores de aplicação utilizam compiladores just in time - JIT. • e-bay: 320M page views/dia. 2100 transações/segundo. Alex de V. Garcia, Dr. 38 Segurança • Permite segurança como parte do deployment, sem depender de configuração de ambiente durante a execução da aplicação. • Facilita o desenvolvimento ao delegar a responsabilidade para os “papéis de segurança”. • Evita misturar código de segurança à lógica do negócio. • Permite configurar as políticas de segurança da forma mais adequada ao ambiente de instalação. Alex de V. Garcia, Dr. 39