Arquitectura software en capas Tema 6: Arquitectura Web Multicapa genera pantallas, crea código formato. 1 (Dibujo de arquitectura de Ebay) Arquitectura sistema en capas Capa Cliente: Cliente: genera pantallas: código HTML. Servidor: crea código HTML. Capa aplicación: Servidores que ejecutan aplicaciones: accede a datos, crea campos para HTML. Capa Lógica negocio: objetos aplicación que generan, manipulan y organizan infomación. Capa Datos: almacenes de datos: ficheros o bbdd. 2 Arquitecturas Web Multicapa Capa Presentación: Arquitectura 2 capas (Web + aplicación): Apache + TOMCAT. Arquitecturas 3 capas(Web + aplicación +datos): Datos en ficheros (Bookstore). Datos en DDBB (BookStore con BBDD, LAMP). Arquitecturas 4 capas (Web + Servlets + Beans + datos): J2EE (Ebay,….) Capa Datos: Servidores (Dibujo de architectura de Ebay) que almacenan 3 datos y ficheros. 4 Apache vs. servidor Java (rep) Apache Incovenientes Ventajas Acceso Acceso a aplicaciones no eficiente (CGI) o no robusto (API) 2 capas: Apache + TOMCAT (I) Capa Web: Capa Aplicación: •Sirve contenido estático •Sirve contenido dinámico •Control de Acceso y HTTPS a ficheros Capa Aplicación eficiente. protocolo seguro HTTPS eficiente. <Connector className= "org.apache.jk.server.JkCoyoteHandler" port="8009" minProcessors="5“ maxProcessors="75” protocol=”AJP/1.3”> Context Aplic Tomcat JK Worker1 Web Client: Iexplorer, FireFox Linux GET /index.html HTTP1.0 Read(file) Servlet Interface Output MSPservlet.doGet() Content of index.html GET /MSPservlet GET /MSPservlet Conexión AJP Output of Servlet Output of Servlet 6 Capa de Datos, sin BBDD Configuración Apache Fichero httpd.conf: LoadModule jk_module libexec/mod_jk.so AddModule mod_jk.c JkWorkersFile .conf/workers.properties JkMount /examples/* worker1 Datos en ficheros y variables. Aplicación lee ficheros a través de SO. Server host Client host Tomcat Fichero Workers.properties: Aplicación /Examples/ Files Java Virtual Machine 2 capas: Apache + TOMCAT (II) fichero server.xml: Client host Apache Servlet Servidor Lectura ficheros Aplicaciones JAVA. no eficiente. JAVA Aplicaciones multihilo Protocolo HTTPS e integradas en servidor-> bastante no eficiente. eficiente. 5 Configuración TOMCAT Capa Web: Tomcat worker.worker1.type=ajp13 worker.worker1.host=host2.unavarra.es worker.worker1.port=8009 Web Client: Iexplorer, FireFox Servlet Java Virtual Machine Sistema Operativo GET /MSPservlet Java Virtual Machine MSPservlet.doGet() Capa Web host2.unavarra.es Aplicación /Appli2 AJP Context Aplic Tomcat JK FileOutputStream(file); Read(); Output of Servlet Apache Worker2 Java Virtual Machine host1.unavarra.es AJP mod_jk.so Output of Servlet Linux www.unavarra.es 7 8 Objetos acceso Datos, sin BBDD Aplicación Web en Java: ejemplo http://localhost:8080/bookstore/catalog public class CatalogServlet extends HttpServlet { private BookDB bookDB; public void init() throws ServletException { bookDB = (BookDB)getServletContext().getAttribute("examples.bookstore.database"); Ejemplo if (bookDB == null) { BookStore bookDB = BookDB.instance(); getServletContext().setAttribute("examples.bookstore.database", bookDB); } public void doGet (HttpServletRequest request,HttpServletResponse response) {….. out.println("<br> &nbsp;" + "<h3>Please choose from our selections:</h3>" + "<center> <table>"); Collection c = bookDB.getBooks(); Iterator i = c.iterator(); public class BookDB { while (i.hasNext()) { private HashMap database; BookDetails book = (BookDetails)i.next(); bookId = book.getBookId(); public BookDB () { out.println("<tr>" + …. BookDetails book; } database = new HashMap(); } book = new BookDetails("201", "Duke", "", "My Early Years: Growing up on *7",(float)10.75, 1995, "What a book."); database.put(new Integer(201), book); } public Collection getBooks() { ArrayList al = new ArrayList(database.values()); return Collections.sort(al); } 9 Objetos acceso Datos, con BBDD Capa de Datos, con BBDD Datos en BBDD. Aplicación hace queries a través de librería (JDBC, DAO,..) Server host MySQL daemon Web Client: Servlet + JDBC client Client hostIexplorer, Tomcat FireFox Java Virtual Machine Sistema Operativo GET /MSPservlet MSPservlet.doGet() JDBCConnection(); rs=executeQuery(); Output of Servlet 10 public class CatalogServlet extends HttpServlet { private BookDB bookDB; public void init() throws ServletException { bookDB = (BookDB)getServletContext().getAttribute("examples.bookstore.database"); if (bookDB == null) { bookDB = BookDB.instance(); getServletContext().setAttribute("examples.bookstore.database", bookDB); } public void doGet (HttpServletRequest request,HttpServletResponse response) {….. out.println("<br> &nbsp;" + "<h3>Please choose from our selections:</h3>" + "<center> <table>"); Collection c = bookDB.getBooks(); Iterator i = c.iterator(); while (i.hasNext()) { BookDetails book = (BookDetails)i.next(); public class BookDB { bookId = book.getBookId(); private EntityManager em; out.println("<tr>" + …. } public BookDB () { } JDBCConnection(); CLASE ACCESO DATOS CON MISMO INTERFACE, Output of Servlet Implementación usa JDBC. 11 Datos en BBDD. Ejemplo BookStore Avanzado } public List getBooks() throws BooksNotFoundException { try { return rs=executeQuery("SELECT bd FROM Book bd ORDER BY bd.bookId").getResultList(); } 12 Servidores de Datos: BBDD (I) Arquitectura 3 capas: Web + aplicación + Datos. Server host DDBB host MySQL daemon Servlet + JDBC client Servidores de Datos: BBDD (II) Server1 host Web Client: Client hostIexplorer, Tomcat Servlet1 + JDBC client FireFox DDBB host Java Virtual Machine Sistema Operativo BBDD compartida por varias aplicaciones y/o servidores de aplicación. MySQL daemon Sistema Operativo Tomcat Java Virtual Machine Client hosts Sistema Operativo GET /MSPservlet MSPservlet.doGet() Server2 host Sistema Operativo JDBCConnection(); rs=executeQuery(); Servlet2 + JDBC client Output of Servlet Output of Servlet Tomcat Java Virtual Machine Sistema Operativo 13 Plataforma LAMP. 14 RMI en Aplicaciones Servidor Linux + Apache + Perl + MySQL: Mod_perl (API) or perl.exe (CGI). MySQL library or client. Servlets: genera pagina web + cliente RMI. Servidor RMI: guarda objetos. Server2 Server1 Server host MySQL daemon Object Libreria1 Client host Script Internet Servidor RMI Apache Client host ServletComprar + RMI Client Tomcat Web Client: Iexplorer, FireFox Java Virtual Machine MySQL + Interpret GET /ServletComprar(libro1) Linux ServletComprar.doPost(libro1) GET /Wikka.php?HomePage /Wikka.php?HomePage libreria1.comprar(libro1) SQL.connect(); rs=executeQuery(); Output of Wikka.php Results Output of Servlet Output of Wikka.php 15 Output of Servlet 16 Arquitectura de 4 capas (I) Arquitectura de 4 capas (II) Datos + Lógica Negocio + Web Dinámico+ Web Estático Lógica Negocio, Web dinámica distribuida en servidores independiente. DDBB1 host DDBB host MySQL daemon Server3 host RMI Object Server2 host RMI Server Servlet + RMI Client Java Virtual Machine Sistema Operativo MySQL daemon Server1 host Tomcat RMI Object1 RMI Server Server3 host Servlet1 + RMI Client Files Sistema Operativo Server1 host Tomcat Files Apache Java Virtual Machine Sistema Operativo Server5 host Apache Java Virtual Machine Java Virtual Machine Sistema Operativo Sistema Operativo Linux Server4 host Server2 host Linux Sistema Operativo GET /index.html InvocarMetodo() JDBCConnection(); rs=executeQuery(); MSPservlet.doGet() Read(file) Content DDBB2 host GET /MSPservlet MySQL daemon RMI Output of Metodo Output of Servlet Sistema Operativo Server6 host RMI Server RMI Object2 Servlet2 + RMI Client Tomcat Java Virtual Machine Java Virtual Machine Sistema Operativo Sistema Operativo Files Apache Linux Output 17 Arquitectura J2EE en 4 capas EJB: Entreprise Java Beans J2EE: Web + Servlets + Beans + Datos Los beans pueden ser persistentes en BBDD. Servidor DDBB Servidor Beans MySQL daemon J2EE container Bean Sistema Operativo EJB son un componente del J2EE de Sun (una arquitectura de desarrollo muy usada) EJB son objetos remotos: Servidor Servlets Servlet + RMI client Tomcat Java Virtual Machine Sistema Operativo Sistema Operativo un interface. Internamente se invocan por RMI. Linux GET /index.html JDBCConnection(); rs=executeQuery(); Tienen Apache Files Java Virtual Machine Bean1.metodo1() 18 MSPservlet.doGet() Read(file) Content GET /MSPservlet Output of Bean Output of Servlet Output 19 EJB son componentes que se instalan en contenedores de beans: Contenedor J2EE: SunAppserver, JBoss,… Se instalan, despliegan, etc como servlets. 20