Aplicaciones Cliente - Cliente Presentación + Lógica aplicación SQL Acceso remoto a información a través de red. Un servidor - múltiples clientes. Almacenamiento datos es esperan peticiones: protocolos de nivel de aplicación petición-respuesta. es tiene colas de peticiones que atender. Dimensionamiento es importante adecuadamente (cuellos de botella: acceso a disco, conexión Inet). 1 Reparto Funcionalidad Repartir procesamiento vs. transferir datos. Ejecución en servidor = Control de aplicación, pero más potencia requerida. Thin Client Fat Server: Aplicación ejecutada en servidor, cliente solo visualiza pantallas. Ej: Mainframes, XWindows, Application Server Providers. Fat Client Thin Server: solo proporciona informacion a cliente, cliente procesa y visualiza. Ej: web, de ficheros, servidor de software, servidor streaming. 2
Arquitecturas Una organización de aplicaciones en distintos módulos y cómo se comunican entre sí. Cliente Cliente p Cliente p2 p1 p1 Cliente Cliente p2 p1 Cliente Cliente Encadenado, recursivo Cliente Referencia, iterativo Cliente Multicast, difusión 3 Variantes Descentralizado ~ Peer to Peer P2P Dispositivos mviles Cli/Ser Cli/Ser Cli/Ser Cli/Ser Cli/Ser Agentes mviles Clientes Thin Cliente + Cliente 4
es Multiple Procesos " "! #$ %&' (' )$%%' **+!& + es MultiThread " "! +(' #$,%% &-. %' )$%(- %-/&01&2# &''
Arquitectura Multinivel Web Presentación: presentación, control flujo. Lógica Negocio: procedimientos aplicación. Almacén Datos: datos aplicación. 7 Separación presentación / lógica aplicación JSP <%@ page import = "num.numberguessbean" %> <jsp:usebean id="numguess" class="num.numberguessbean" scope="session"/> <jsp:setproperty name="numguess" property="*"/> <html> <head><title>number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getsuccess()) { %> Congratulations! You got it. And after just <%= numguess.getnumguesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else { %> Good guess, but nope. Try <b> <%= numguess.gethint() %> </b>. You have made <%= numguess.getnumguesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="submit"> </form> <% } %> </font> </body> </html> 8 3
Arquitectura Multinivel J2EE Client Tier: HTML, Applets. Web Tier: JSP & Servlets. Business Logic: Java Beans. Enterprise: BBDD. 9 Almacenes Información Sitio Web, Bases de datos relacional, Repositorios XML, Directorio LDAP, Buscadores Web, Almacén Objectos. 10 4
Almacén Sitio Web Colección de documentos multimedia guardados en ficheros. Información sin estructurar relaccionados por enlaces. Ventajas: Facilidad de creación. Desventajas: falta control. 11 12 5
Base de datos relacional Datos muy estructurados requiere integridad y seguridad.(sin informacion presentación) Relacción basados en Algebras: modelos Entidad- Relacción. Ratio escritura / lectura alto. Requieren un complejo programa (un gestor de bases de datos): mantiene consistencia, acceso concurrente,... Ventajas: Control total de información. Desventajas: laborioso estudio previo y diseño. 13 Almacen XML '7$8%83'797%8'/% <?xml version='1.0' encoding='utf-8'?> <tomcat-users> <role rolename="role1"/> <role rolename="tomcat"/> <user username="role1" password="tomcat" roles="role1"/> <user username="tomcat" password="tomcat" roles="tomcat"/> <user username="both" password="tomcat roles="tomcat,role1"/> </tomcat-users> 14 6
Repositorio XML Datos estructurados sin información presentación. Relacción basada estructuras definidas por usuario. Ratio escritura / lectura bajo. Gestor de repositorio a medida: mantiene consistencia, precarga pagina web,... Ventajas: sin BBDD, eficiente, control. Desventajas: programación gestor. 15 Directorios LDAP Datos muy estructurados información usuarios. Relacción según arbol de directorio OIT. Ratio escritura / lectura bajo. Gestores de directorio mantiene consistencia, acceso concurrente,... Ventajas: estructura sencilla, gestores comerciales. Desventajas:Solo para algunos datos. 16 :
Almacen Buscadores Web Datos muy estructurados: palabras, imágenes, URLs... Relacción orden alfabético,..: gigantesca tabla hash: palabra - URLs. Ratio escritura / lectura bajo. Gestor de buscador: encuentra nuevas páginas web, mantiene consistencia, cache,... Ventajas: eficiente, gestor optimizado. Desventajas:Uso especifico. 17 Almacenes de Objetos Todo es un objeto: datos, tablas, documentos. Relacciones entre datos son objetos contenidos en / apuntados por otros objetos. Gestores de almacen con diferentes funcionalidades: OODDBB (complejo gestor, integridad, etc), Objetos serializados Java (gestor simple, ficheros). Ventajas: Facilmente integrables en aplicaciones programadas en lenguaje OO. Desventajas: ineficiencia, no reinventar. 18 ;
CGI / FastCGI Petición 1 a CGI A Web Proceso principal 1 proceso/petición Proc hijo de CGI A Petición 1 a CGI B Proc hijo de CGI B Petición 2 a CGI A Petición 1 a CGI A Web Proceso principal Proc hijo de CGI A (Único) Proc hijo de CGI A Petición 1 a CGI B FastCGI: 1 proceso/cgi Petición 2 a CGI A (Único) Proc hijo de CGI B 19 CGI:Ciclo de Vida = & = %& = $% 7!& = & = %' 20 <
API Petición 1 extensión A Petición 1 extensión B Petición 2 extensión A Web Proceso principal Extensión A Extensiones: parte del proc servidor Extensión B 21 API: Ciclo de Vida ' % (.'! ' *.! 8 $9' 3' >! ' 4'! ' 22
Servlet Web Petición a Servlet A Proceso principal JVM Thread ServletA Petición a Servlet B Petición a Servlet A Thread Thread Servlet: 1 thread/petición ServletB 23 Servlet Hello World import java.io.*; import javax.servlet.*; import javax.servlet.http.*; public class HelloWorld extends HttpServlet { } public void doget(httpservletrequest request, HttpServletResponse response) throws IOException, ServletException { response.setcontenttype("text/html"); PrintWriter out = response.getwriter(); out.println("<html>"); out.println("<body>"); 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>"); } 24
Servlet:Ciclo de Vida ' % '! 2# &+&$' $' 3' >! ' 4'! ' 25 Separación presentación / lógica aplicación JSP <%@ page import = "num.numberguessbean" %> <jsp:usebean id="numguess" class="num.numberguessbean" scope="session"/> <jsp:setproperty name="numguess" property="*"/> <html> <head><title>number Guess</title></head> <body bgcolor="white"> <font size=4> <% if (numguess.getsuccess()) { %> Congratulations! You got it. And after just <%= numguess.getnumguesses() %> tries.<p> <% numguess.reset(); %> Care to <a href="numguess.jsp">try again</a>? <% } else { %> Good guess, but nope. Try <b> <%= numguess.gethint() %> </b>. You have made <%= numguess.getnumguesses() %> guesses.<p> I'm thinking of a number between 1 and 100.<p> <form method=get> What's your guess? <input type=text name=guess> <input type=submit value="submit"> </form> <% } %> </font> </body> </html> 26
JSP:Ciclo de Vida % &2# &- $' $' ' >! %' 3'! %' 27 3