Introdução ao Java EE Julio M. Faerman Desenvolvimento web com Java Recursos http://jfaerman.googlepages.com/ • Apresentações • Exemplos • Exercícios • Tutoriais • Links • Downloads #2 Desenvolvimento web com Java Agenda • Evolução da arquitetura de sistemas de informação • Servidor de aplicações • Contêiner Web • Aplicações Web JEE #3 Evolução das arquiteturas de software Aplicações Monolíticas Interface do Usuário Dados #4 Evolução das arquiteturas de software Aplicações duas camadas Cliente “Gordo” Banco de Dados #5 Evolução das arquiteturas de software Aplicações N camadas (tiers) Interface do Usuário Cliente magro (?) (HTML, WML,...) ou gordo (Swing, SWT,...) Middleware (N camadas) JEE, Corba, DCOM, MOM, ESB,... Banco de dados Oracle, MySQL, Firebird, DB2, Adabas,... #6 Benefícios e desafios de aplicações distribuídas Requisitos não funcionais • Reusabilidade • Manutenibilidade • Desempenho – Vazão – Latência • Escalabilidade • • • • Segurança Disponibilidade Tolerância a falhas Balanceamento de Carga • Integração #7 Ambientes de programação distribuída Middlewares #8 Desenvolvimento web com Java APP Aplicação APP Server Transporte Maquina Virtual Java Sistema Operacional Dispositivos Rede Rede Enlace DEPLOYER JSE APP JEE APP DEVELOPER A Lasanha Física #9 Desenvolvimento web com Java AppServer Genérico H T P T R M I Web Container EJB Container web-app1.war ejb-app1.jar web-app2.war ejb-app1.jar App Server J N Data Sources Message Queue D enterprise-app1.ear enterprise-app2.ear EJBs I Mail Session Cache Java EE Classpath (servlet, jp, ejb, persistence, jaxp, jms …) Java SE (JVM + SE Classpath) Sistema Operacional Desenvolvimento web com Java Web Container (JEE 5) • Servlets – Java Server Pages • Filters • Listeners • Tag Libraries – Tag Handlers – Tag Files • Java Server Faces • Web Services – SOAP – REST* • Container Managed Authentication # 11 Desenvolvimento web com Java Web Application Típica request response request response HTTPServlet doGet() doPost() doPut() doDelete() Filter //before Chain.doFilter() //after JSP <html> <% x++; %> </html> compile HTTPServlet out.println(“<html>”) x++; out.println(“/<html>”) ServletContextListener HttpSessionListener ServletRequestListener ServletContextAttribute Listener HttpSessionAttributeLi stener ServletRequestAttribute Listener events HttpSessionActivationL istener Desenvolvimento web com Java Exercício: App Web JEE • • • • • • Servlet Filter JSP Tag File Listener Deployment Descriptor # 13 Desenvolvimento web com Java Os problemas class InserePedido extends HttpServlet{ ... doPost(…){ if (! tudoCerto) … Pedido p = new Pedido(); p.setXxx(request.getParameter(“Xxx”)); request.setAttribute(“pedido”,p); out.print(“<htlm>…</html>”) requestDispatcher.forward(“some.jsp”) } } <table> <% for.. %> <tr><td><%= if(pedido.isEspecial()) %> <%= pedido.getValor() * 0.90%> 1. Duplicação 2. Duplicação 3. Problemas ortogonais • Validação • Segurança • Transações 4. Manipulação do HTTP 5. Negócio x Apresentação 6. Código prolixo 7. … # 14 Desenvolvimento web com Java Web Frameworks • Abstração – Actions – Componentes* • Reuso de apresentação – Componentes** – Templates • Validação • Conversão • Pontos de extensão # 15 Desenvolvimento web com Java Soluções? Spring JApple JATO JPublish JWarp Bishop MVC Freemarker NiggleTeaServlet Jacquard Tapestry JBanana JSP Chiba WingSGenie CanyamoFolium Velocity Servlet Echo Bishop Scope Struts WebWork Macaw Melati Dinamica Wicket Millstone Expresso Verge Warfare GWT Tiles RIFE JSF TeaServlet Barracuda Jaffa JWAACocoon Sitemesh OXF SOFIA Maverick Cassandra WebOnSwing JZonicAction Open Shocks Bento Helma jStatemachine JFormular Frmwk Emcee # 16 Trubine Groovlets Desenvolvimento web com Java Dúvidas? # 17