Title: Comunicaciones basadas en la web
1Comunicaciones basadas en la web
2Web-based communication
- Se basan en el esque ma cliente servidor que
implementa la web - usa protocolos web http (port 80, GET, PUT, ...)
- Trabajan bien tras frirewalls
- Clientes normalmente flacos
- Ejemplos en Java
- Servlets
- Applets
- J2EE
- Java Web Services (via SOAP)
3Desarrollo y ejecución de Applets
1. Escribir el código fuente en un archivo con
extensión Java con un editor de texto 2.
Compilarlo con el Compilador (javac) para
generar el archivo clase con extensión class 3.
Ponerlo en el servidor web junto con una
página que contengauna referencia al applet (tag)
4. Invocar con un browser la página web
4Desarrollo y ejecución de Applets
MyApplet.java
MyApplet.class
Java class file
Java source code
MyApplet.class
Pagina.html
Pagina.html
Applet tag
ltapplet codeMyApplet.class gt ltparametersgt lt/apple
tgt
Pagina.html
MyApplet.class
GET Pagina.html
5Desarrollo y ejecución de Servlets
1. Escribir el código fuente en un archivo con
extensión Java con un editor de texto 2.
Compilarlo con el Compilador (javac) para
generar el archivo clase con extensión class 3.
Ponerlo en el servidor web en el lugar
apropiado 4. Invocar con un browser el servlet
(directamente o a través de un botón action
de un form de HTML)
6Desarrollo y ejecución de Servlets
MyServlet.java
MyServlet.class
Java class file
Java source code
MyServlet.class
Código HTML
GET MyServlet
7Java Script
El código de un programa es escrito directamente
dentro de la página HTML NO SE PARECE MUCHO A
JAVA !!!!!
Html Script
ltscript language JavaScriptgt the
code lt/scriptgt
Java program running on the client
8Java Server Pages (y ...)
- Como Java Script para applets, JSP es un
lenguaje script para la programación de servlets - El código es escrito directamente dentro de la
página HTML pero es ejecutada en el servidor - El server generará entonces código HTML el cual
será escritoen el browser cliente
9Esquema J2EE
Servidor de Aplicaciones
DBMS
J2EE Bean
Servlet JSP
respuesta
Servidor web
Contacta un Servlet o un JSP
10Servlets
- Servlets son módulos que extienden a servidores
orientados a request/response, como por ejemplo
Servidores Web java-enabled. - Un servlet puede ser el responsable de tomar
datos de una forma HTML y aplicar un método
para actualizar las bases de datos de la una
compañía de acuerdo a ellos. - Servlets reemplazan a los CGI scripts. They
provide a way to generate dynamic documents that
is both easier to write and faster to run. - Servlets also address the problem of doing
server-side programming with platform-specific
APIs they are developed with the Java Servlet
API, a standard Java extension.
11La Anatomía de un Servlet
- Un nuevo tipo (clase) de servlet es especificado
extendiendo la clase HttpServlet - Existen métodos predefinidos
- init() es llamado por el servidor web cuando el
servlet se sube la primera vez (uploaded) - doGet(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException - se llama cuando el servlet es invocado con una
peticion Http GET, que es la normal cuando se
contacta un serv. - doPost(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException - se ejecuta cuando el servlet fue invocado con una
petición Http POST
12Anatomía de un servlet
- Una petición GET se genera siempre que una
petición http es ingresada en el browser
(http//www.yahoo.com/ implica GET index.html
Httpx.x ) - Cuando el servlet se llama por primera vez, se
inicializa y 4-6 threads son levantados para
atender a cleintes en paralelo cuando vayan
apareciendo, Para ahorrar tiempo - En la mayoría de los casos los servlets son
contactados a través de forms en páginas html. En
este caso es posible especificar parámetros y
generar una petición POST
13Pasando parametros
- Es posible pasar parámetros en la línea de
invocación URL - http//hostport/servlet?param1value1param2valu
e2.. - El servlet puede preguntar por los valores de los
parámetros si conoce el nombre de ellos de la
siguente manera - String value req.getParametervalues(param1)
- Parámetros pueden ser solamente strings
14Session Tracking
- Session tracking es el mecanismo que usan los
servlets para mantener información acerca del
estado de los requests de un usuario (esto es,
requests originados de un mismo browser) en un
período de tiempo.
15Using Cookies
- Cookies are a way for a servlet to send some
information to a client to store, and for the
server to later retrieve its data from that
client. - Servlets send cookies to clients by adding fields
to HTTP response headers. - Clients automatically return cookies by adding
fields to HTTP request headers. - Cookies have a name and a value (additionally
they can have some comments). - In addition to a name and a value, you can also
provide optional attributes such as comments. - A server can provide one or more cookies to a
client.
16Using Cookies
- To send a cookie
- 1.Instantiate a Cookie object
- 2.Set any attributes
- 3.Send the cookie
- To get information from a cookie,
- 1.Retrieve all the cookies from the user's
request - 2.Find the cookie by its name
- 3.Get the values of the cookies that
you found
17Los Enterprise Java Beans son como los Servlets
- Son trozos de código que extienden un servidor
- Viven en un contenedor apropiado
- El contenedor decide cuándo se crean y se
destruyen - No son contactados directamente por el cliente
18Existen 3 Clases principales
- Session Beans
- Implementan procesos, orientados a acciones
(cálculo de un valor) - Entity Beans
- Están asociados a datos persistentes. Representan
una instancia de un dato almacenado - Message Driven Beans
- Parecidos a Session beans pero son despertados
o contactados por mensajes que pueden incluso ser
asínctonos
19Refinando la clasificación
- Session Beans
- Sin estado son contactados una vez por los
clientes, ejecutan una acción y no queda traza de
lo que se hizo - Con estado en una sesión pueden ser
contactados varias veces por el mismo cliente
para desarrollar una conversación. Será
necesario mantener algún tipo de información para
recordar lo que va haciendo el cliente - Entity Beans
- Persistencia controlada por el Bean el
programador debe incluir código de modo de
asegurarse que el enttity bean represente a un
dato en una tabla - Persistencia controlada por el container el
container se preocupa de asociar el bean a un
dato de una tabla
20Cómo administra el container el cliclo de vida de
los beans
- Los beans son creados y destruidos por el
container. Cuando un bean se levanta con el
container (el bean debe estar ahí cuando se echa
a andar el server) se crean instancias del bean
(bean pool) las cuales son asignadas a los
clientes. Qué bean es entregado a qué cliente lo
decide el container - Si se necesitan más beans estos son creados por
el container (create) - Si hay demasiados estos son destruidos (Remove)
- El container puede decidir además hacer dormir
o despertar a los beans según las necesidades
(activate, passivate) para
21El papel de cada uno de las 3 clases de objetos
- Cuando un cliente desea contactar a un bean
localiza un un ejbHome Object que correspoda al
de un bean deseado. - Este proceso es bien dependiente de las
condiciones locales pero normalmente requiere
hacer un lookup a un servidor de nombres
(normalmente provisto por el servidor de
aplicaciones también) por medio de la API JNDI - Una vez que tiene una referencia a este lo usa
para fabricar un objeto EJB, al cual le aplica
los métodos - El EJBObjet se contactará con un bean adecuado
para que dé el servicio (esto lo hace el
contenedor)
22El papel de cada uno de las 3 clases de objetos
Bean Pool
3 contacta home
ejbHome
cliente
5- retorna referencia
4 crea ejbObject
6 invoca método
1-ubicar
2 retorna referencia
7 contacta bean
ejbObject
Naming
23Estados de un Bean
Cliente invoca create en un home Interface
Cliente llama a remove() en el ejbObject o se
le da un timeout al cliente
No existe
El container llega a un límite de su capacidad
swapping
1- Class.newInstance() 2- setSessionContext() 3-
ejbCreate(...)
ejbRemove()
Timeout del cleinte
ejbPasivate()
Activo
Pasivo
ejbActiivate()
Liente llama a un método del Bean pasivado
24Los Entity beans
- Un bean representa a un dato (fila) en una base
de datos - Hay que pensar en ellos como si fueran uno solo
con el dato en memoria secundaria - Debe existir un mecanismo para automáticamente
transferir los datos de la memoria secundaria al
EJB y vice-versa - Esto se hace a través de llamadas a los métodos
ejbLoad() y ejbStore() - Estos métodos son llamados por el container
cuando estima que es necesario - distintos beans pueden representar al mismo dato
en disco - ejbActivate() y ejbPassivate() se llaman cuando
un entity bean es puesto/sacado de un pool de
beans, por lo que hay que programas la
adquisición y liberación de reucursos - Como además se debe guardar el estado del bean en
memoria secundaria, por lo cual se llama siempre
a ejbStore abtes de pasivar y a ejbLoad antes de
activar
25Las 2 maneras de lograr persistencia de los beans
- En un bean-manajed persistence entity bean el
programador debe escribir las instrucciones para
que las variables del entity bean sean las
correspondientes a un dato en una base de datos
(saving, loading, and finding) - Estas instrucciones van en los métodos de
creación (ejbCreate(...)), destrucción
(ejbRemove()), localización (ejbFind(...)), carga
(ejbload()) y almacenamiento (ejbStore()) - Esto generalmente se hace via instrucciones JDBC
- En los container-managed persistence beans de
esto se encarga el container, sólo basta dar
algunas directrices para la localización de los
datos en un archivo especial (según yo, esto
sería una de las gracias más grandes de j2ee)
26Creación y destrucción de Entity Beans
- Cuando un entity bean es creado por una llamada
al método ejbCreate se debe crear también este
dato en la base de datos, si se trata de un
bean-managed persistence bean, aquí se deben
programar las instruccónes SQL para insertar una
fila en una tabla - De la misma manera, cuando un entity bean es
removido, se llama a ejbRemove y aquí se debe
programas la instrucción SQL que borre la fila
correspondiente - A cada clase de entity bean que se crea hay que
asociarle un objeto que represente la clave
primaria de ese tipo de objeto (por ejemplo un
string. Por convención se usa el nombre del bean
terminado en PK (por ejemplo CuentaPK) - El método ejbCreate de un entity bean debe
devolver un siempre un objeto de este tipo luego
de haber creado el dato
27Esquema de creación de un entity bean
1- create()
2- ejbCreate()
cliente
Home
4- retorna una referencia al EJB object
Bean
4- retorna un objeto que representa la
clave primaria del ejb creado
5- creación del objeto EJB
3- se crea el dato en la base de datos
EJB Object
Base de Datos
CONTAINER
28Los CMP Entity Beans
- La idea principal es no tener que escribir ningun
código de persistencia con la base de datos - Mucho del código migra del Bean al Deployment
descriptor (pero muy simplificado) - Juega un papel importante el EJB-QL, que es un
lenguaje estilo SQL orientado a objetos con el
cual se especifican muchas cosas.
29SOAP
- Simple Object Access Protocol
- XML-based communication protocol and encoding
format for inter-application communication - SOAP is widely viewed as the backbone to a new
generation of cross-platform cross-language
distributed computing applications, termed Web
Services. - En java está implementado con el servidor AXIS
30Architecture
Tomcat
Axis
XML
Servicio Web
Cliente
XML
31Ejemplo (client)
import org.apache.axis.client.Call import
org.apache.axis.client.Service import
org.apache.axis.encoding.XMLType public class
CalcClient public static void main(String
args) throws Exception String endpoint
"http//hostport/axis/Calculator.jws" if
(args null args.length ! 3)
System.err.println("Usage CalcClient
ltaddsubtractgt arg1 arg2") return
String method args0
Integer i1 new Integer(args1) Integer
i2 new Integer(args2) Service service
new Service() Call call (Call)
service.createCall() call.setTargetEndpoint
Address( new java.net.URL(endpoint) )
call.setOperationName( method )
call.addParameter( "op1", XMLType.XSD_INT,
ParameterMode.IN ) call.addParameter(
"op2", XMLType.XSD_INT, ParameterMode.IN )
call.setReturnType( XMLType.XSD_INT )
Integer ret (Integer) call.invoke( new Object
i1, i2 ) System.out.println("Got
result " ret)
32Ejemplo (server)
public class Calculator public int add(int
i1, int i2) return i1 i2 public
int subtract(int i1, int i2) return i1 -
i2
- En AXIS basta con escribir este archivo en java,
cambiarle la extensión a jws y el resto
(deplyment) lo hace el sistema - Se pueden usar WS Deployment Descriptors para
customizar el servicio -