3.3 Caso de estudio: diseño e

Tamaño: px
Comenzar la demostración a partir de la página:

Download "3.3 Caso de estudio: diseño e"

Transcripción

1 3.3 Caso de estudio: diseño e implementación de un servicio/cliente REST

2 Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación REST de la capa Implementación del Servicio Comentarios finales

3 Descripción del caso de estudio (1) Retomando el ejemplo ilustrado en el tema 2 BD Portal 3 1: Petición a ws.udc.es BD Internet Apl. cliente 2: Respuesta en formato estructurado Servicio Movies

4 Descripción del caso de estudio (2) El caso de estudio está inspirado en el ejemplo anterior Cliente MoviesSearchClient Imprime la información de las películas que se estrenan en una fecha Ejemplo: MoviesSearchClient.{sh, bat} Cliente MoviesAdminClient Permite añadir/actualizar/eliminar información sobre películas Ejemplos: MoviesAdminClient.{sh, bat} -a Movie-1.xml Movie-2.xml... MoviesAdminClient.{sh, bat} -u Movie-1.xml Movie-2.xml... MoviesAdminClient.{sh, bat} r NOTA: El uso de XML para pasar la información de las películas con las opciones -a y -u es sólo por comodidad (como alternativa a pasar la información en múltiples parámetros)

5 Descripción del caso de estudio (3) Servicio Ofrece cuatro operaciones Obtener la información de las películas que se estrenan en una determinada fecha Añadir la información de una película Actualizar la información de una película Eliminar la información de una película a partir de su identificador Por sencillez, los dos clientes tienen una interfaz de línea de comandos y el servicio guarda los datos de cada película la en un fichero.properties REST y SOAP El ejemplo proporciona dos implementaciones del servicio: una REST y otra SOAP Los clientes pueden configurarse (sin necesidad de recompilación) para usar una u otra

6 Descripción del caso de estudio (y 4) NOTA Ambos clientes pueden ejecutarse desde la intranet del servicio o desde Internet Sin embargo, en un caso real, posiblemente MoviesSearchClient representa una versión simplificada de un cliente (aplicación de escritorio o aplicación Web) que accede desde Internet MoviesAdminClient sería de utilidad a los empleados de la empresa que ofrece el servicio de las películas, y posiblemente estaría implementado como una aplicación Web (instalada en la propia empresa, y seguramente sólo accesible desde ella) que accede directamente a la base de datos en la que se guardaría la información de las películas

7 Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación REST de la capa Implementación del Servicio Comentarios finales

8 Diseño por capas (1) El diseño por capas es una de las técnica de diseño más usadas en Ciencias de la Computación (e.g. arquitecturas de protocolos de Redes). Una capa inferior proporciona un servicio a otra capa superior. El servicio ofrecido se define mediante un contrato de servicio io (similar a interfaz JAVA) Permite independizar el software de ambas capas: Al la capa superior no le importa cómo se implementa el servicio Cambios en la manera de implementar una capa no afectan a la otra. Múltiples usos en integración de aplicaciones.

9 Diseño por capas (1) En el caso de estudio usaremos el diseño por capas para ocultar las tecnologías de acceso e implementación de servicios Interfaz de Usuario Implementación del Servicio Acceso al Servicio Lógica de Negocio Cliente Servidor

10 Diseño por capas (2) Capa Interfaz de Usuario Implementa la interfaz de usuario No depende de la tecnología de acceso al servicio Capa Acceso al Servicio Implementa el acceso al servicio Ofrece una API sencilla que oculta la tecnología usada para acceder al servicio Capa Implementación del Servicio Utiliza una tecnología para implementar el servicio y delega en la capa Lógica de Negocio Capa Lógica de Negocio Implementa la lógica que expone el servicio No depende de la tecnología de implementación del servicio Ofrece una API sencilla a la capa de Implementación del Servicio

11 Ventajas Diseño por capas (3) La persona (o el grupo de personas) que se encarga del desarrollo de una capa no necesita conocer las tecnologías usadas en otras capas Cada capa puede ser desarrollada en paralelo con el resto de capas Se facilita el mantenimiento del software Cambios en la implementación de una capa (e.g. uso de nuevas tecnologías) no conllevan cambios en el resto de capas Riesgos El software es más complejo Si el software a construir es muy sencillo (e.g. un prototipo), puede no valer la pena. Si realmente ambas capas no cambian independientemente, tampoco compensa.

12 Comentarios adicionales Capa Lógica de Negocio Diseño por capas (4) Es muy frecuente que esta capa ya exista previamente a la creación del servicio (el servicio surge como necesidad de exponertodaopartedelacapalógicadenegocioaotras o parte de de a otras aplicaciones) El diseño por capas permite habilitar como servicio una aplicación ya existente ya que la capa de implementación del servicio no modifica la implementación de la capa Lógica de Negocio (no sería deseable y quizás tampoco posible) Cliente o servidor? Aunque el gráfico anterior ilustra un cliente puro y un servidor puro, en un sistema distribuido, una aplicación puede actuar tanto de cliente como de servidor (e.g. un servicio que como parte de su implementación necesita hacer uso de otros servicios)

13 Diseño por capas (5) El diseño por capas es útil siempre que queremos aislar una parte del software de cambios en otra parte del mismo. Si hay cambios en una capa, puede haber que hacer cambios en la parte de traducción entre capas, pero no será necesario hacerlo en la otra capa. Permite que ambos lados de la capa evolucionen por separado de acuerdo a sus necesidades y a su propio ritmo. Por ejemplo, si ahora el servidor devuelve un nuevo campo o cambia el nombre de uno existente, el cliente no tiene porque verse afectado por ello. Las capas introducen costes extra de tiempo de desarrollo y eficiencia, por lo que deben utilizarse sólo cuando son necesarias.

14 Diseño por capas (y 6) El diseño por capas también sirve para implementar la idea de plugin. Algunos paquetes software permiten que desarrolladores externos extiendan su funcionalidad programando componentes plugin. Ejemplos: Toolbars y botoneras en navegadores. Adaptadores para distintas bases de datos en paquetes empresariales. Funciones definidas por el usuario en bases de datos. Apps en facebook El paquete software original no puede modificarse o no es práctico hacerlo. Pero si el software original usa diseño por capas, el programador externo puede añadir / sustituir i su propia implementación de una capa.

15 Estructura de paquetes del caso de estudio Subsistema Util Subsistema Movies es.udc.ws.movies es.udc.ws.util configuration exceptions Otros... client model service rest jaxws xml proxy servlets xml Subpaquetes...

16 Visión de la estructura de paquetes en capas Interfaz de Usuario es.udc.ws.movies.client Implementación del Servicio es.udc.ws.movies.rest.servlets es.udc.ws.movies.rest.xml Acceso al Servicio es.udc.ws.movies.service i es.udc.ws.movies.service.rest.proxy es.udc.ws.movies.service.rest.xml Lógica de Negocio es.udc.ws.movies.model Cliente Servidor NOTAS Subsistema Util: todas las capas lo usan es.udc.ws.movies.xml: usado por todos los paquetes, excepto la capa Lógica de Negocio

17 es.udc.ws.util.exceptions [Subsistema Util] (1) Exception RuntimeException ParsingException ServiceException InstanceException DuplicateInstanceException InstanceNotFoundException

18 es.udc.ws.util.exceptions [Subsistema Util] (y 2) Tanto en este paquete como en otros, se ha seguido la siguiente estrategia de definición de excepciones Excepciones graves Representan errores de infraestructura Ejemplo: un documento XML no está bien formado o no es válido (ParsingException), un error en el acceso al servicio (ServiceException), etc. Se han modelado como excepciones de runtime Sólo es preciso capturarlas en los lugares en los que explícitamente se quieren tratar En resto de sitios, fluyen hacia arriba Permiten especificar un mensaje y/o encapsular una excepción (la que produjo el problema) Útil para depuración Excepciones que indican un error lógico Representan errores originados por el usuario Ejemplo: se intenta eliminar la información de una película especificando un identificador que no existe (InstanceNotFoundException), etc. Se han modelado como excepciones de tipo checked (derivan directamente de Exception)

19 es.udc.ws.util.configuration [Subsistema Util] (1) RuntimeException MissingConfigurationParameterException UnavailableConfigurationParametersException ConfigurationParametersManager - parameters : Map<String, String> + getparameter(name : String) : String ConfigurationParametersManager Permite leer parámetros de configuración de un fichero.properties Se pueden parsear fácilmente con java.util.properties El directorio en el que está el fichero tiene que formar parte del classpath Cachea los parámetros en memoria

20 es.udc.ws.util.configuration [Subsistema Util] (y 2) Ejemplo de fichero de configuración # # MovieInformationServiceRESTProxy (Movies) # MovieInformationServiceRESTProxy/endpointAddress=\ NOTA: para evitar conflictos de nombres, se ha usado la convención clase/parámetro para nombrar los parámetros de configuración Ejemplo de uso String endpointaddress = ConfigurationParametersManager.getParameter( "MovieInformationServiceRESTProxy/endpointAddress");

21 es.udc.ws.util.configuration.configurationparametersmanager (1) public final class ConfigurationParametersManager { private static final String CONFIGURATION_FILE FILE = "ConfigurationParameters.properties"; private static Map<String, String> parameters; private ConfigurationParametersManager() {} public static String getparameter(string name) throws MissingConfigurationParameterException, UnavailableConfigurationParametersException { String value; try { value = getparameters().get(name); } catch (IOException e) { throw new UnavailableConfigurationParametersException(e); } } if (value == null) { throw new MissingConfigurationParameterException(name); } else { return value; }

22 es.udc.ws.util.configuration.configurationparametersmanager (y 2) private static Map<String, String> getparameters() throws IOException { if (parameters == null) { /* Read property file.*/ Class configurationparametersmanagerclass = ConfigurationParametersManager.class; ClassLoader classloader = configurationparametersmanagerclass.getclassloader(); InputStream inputstream = classloader.getresourceasstream(configuration _ FILE); Properties properties = new Properties(); properties.load(inputstream); inputstream.close(); } /* * We use a "HashMap" instead of a "Properties" because * HashMap's methods are *not* synchronized (then, they are * faster) and the parameters are read-only. */ parameters = new HashMap(properties); } } return parameters;

23 es.udc.ws.movies.service [Capa Acceso al Servicio] (1) es.udc.ws.util.configuration ConfigurationParametersManager MovieInformationServiceFactory + getmovieinformationservice() : MovieInformationService <<interface>> MovieInformationService + findmoviesbyreleasedate(releasedate : Calendar) : List<MovieInformationTO> + addmovie(movieinformation : MovieInformationTO) : Long + updatemovie(movieinformation : MovieInformationTO) : void + removemovie(identifier : Long) : void es.udc.ws.movies.model MovieInformationTO

24 es.udc.ws.movies.service [Capa Acceso al Servicio] (2) Define un sencillo API para acceder al servicio Oculta la tecnología usada para acceder al servicio MovieInformationService Patrón Facade Interfaz con un método por cada una de las operaciones del servicio MovieInformationServiceFactory Patrón Factory Permite construir una instancia de MovieInformationService sin que el llamador necesite conocer la clase que implementa el interfaz getmovieinformationservice Lee de un fichero de configuración el nombre de la clase que implementa el interfaz Construye una instancia de esa clase

25 es.udc.ws.movies.service [Capa Acceso al Servicio] (y 3) MovieInformationService + MovieInformationServiceFactory Además de las anteriores ventajas (sencillez + ocultación de tecnología), permiten que el cliente pueda acceder a distintas implementaciones del servicio sin necesidad de recompilarlo Basta especificar en la configuración la implementación de MovieInformationService que se desea El caso de estudio proporciona dos implementaciones de MovieInformationService: una para acceder a un servicio REST y otra para acceder a uno SOAP En ambos casos, los clientes son los mismos (no se han implementado dos veces) Ejemplo de uso Calendar releasedate =... MovieInformationService service = MovieInformationServiceFactory.getInstance(); List<MovieInformationTO> movies = service.findmoviesbyreleasedate(releasedate);

26 es.udc.ws.movies.service.movieinformationservicefactory (1) public class MovieInformationServiceFactory { private final static String PROXY_CLASS_NAME_PARAMETER = "MovieInformationServiceFactory/proxyClassName"; private static Class proxyclass; private MovieInformationServiceFactory() {} public final static MovieInformationService getmovieinformationservice() throws ServiceException { } try { return (MovieInformationService) getproxyclass().newinstance(); } catch (Exception e) { throw new ServiceException(e); }

27 es.udc.ws.movies.service.movieinformationservicefactory (y 2) private static Class getproxyclass() throws ClassNotFoundException { if (proxyclass == null) { String proxyclassname = ConfigurationParametersManager.getParameter( g g PROXY_CLASS_NAME_PARAMETER); proxyclass = Class.forName(proxyClassName); } return proxyclass; } } java.lang.class forname: carga una instancia de una clase (bytecodes) en memoria y devuelve una instancia de la clase Class que representa la clase cargada newinstance: permite crear una instancia de la clase

28 es.udc.ws.movies.client [Capa Interfaz de Usuario] (1) es.udc.ws.movies.xml MovieXMLConversor es.udc.ws.movies.service AdminClient MovieInformationServiceFactory <<interface>> MovieInformationService es.udc.ws.movies.model SearchClient MovieInformationTO

29 es.udc.ws.movies.client [Capa Interfaz de Usuario] (y 2) AdminClient utiliza MovieXMLConversor (apartado 2.2) 2) porque la información de las películas con las opciones -a y -u está en XML Utiliza MovieXMLConversor.toMovieInformation para crear una instancia de MovieInformationTO a partir de un documento XML Luego invoca a addmovie o updatemovie (MovieInformationService) con esa instancia de MovieInformationTO

30 es.udc.ws.movies.model [Capa Lógica de Negocio] (1) - instance : MovieInformationFacade MovieInformationFacade + getinstance() : MovieInformationFacade + findmoviesbyreleasedate(releasedate : Calendar) : List<MovieInformationTO> + addmovie(movieinformation : MovieInformationTO) : Long + updatemovie(movieinformation : MovieInformationTO) : void + removemovie(identifier : Long) : void MovieInformationTO - identifier : Long - title : String - runtime : short - releasedate : Calendar - directornames : List<String> - actornames : List<String> - genres : List<Genre> - synopsis : String El tipo Genre está declarado dentro de MovieInformationTO: public enum Genre { COM, DRA, HOR, ROM, SFI, THR}; + Constructor + Métodos get/set

31 es.udc.ws.movies.model [Capa Lógica de Negocio] (2) Versión simplificada de la capa Lógica de Negocio Guarda la información de las películas en un directorio Utiliza un fichero.properties para guardar la información de cada película En un caso real se utilizaría una BD MovieInformationFacade Patrón Facade En este caso, además, es un Singleton Proporciona una operación por cada caso de uso Un diseño más elaborado podría utilizar Un interfaz con las operaciones públicas de la actual clase MovieInformationFacade Una factoría para poder crear instancias del interfaz Una clase de implementación del interfaz (la actual clase MovieInformationFacade) i ) addmovieinformation El identificador en el MovieInformationTO recibido es null Genera un identificador, d añade la información ió con ese identificador d y lo devuelve

32 es.udc.ws.movies.model [Capa Lógica de Negocio] (y 3) MovieInformationTO Patrón Transfer Object (TO) Representa un conjunto de datos En este caso, modela la información de una película

33 es.udc.ws.movies.xml (1) MovieXMLConversor + tomovieinformation(in : InputStream) : MovieInformationTO + tomovieinformationlist(movieelements : List<Element>) : List<MovieInformationTO> + toxml(movieinformation : MovieInformationTO, out : OutputStream) : void + toxml(movieinformationlist : List<MovieInformationTO>): List<Element> es.udc.ws.movies.model MovieInformationTO

34 es.udc.ws.movies.xml (y 2) Se usa en todas las capas, excepto en la capa Lógica de Negocio MovieXMLConversor Realiza conversiones de MovieInformationTO a/desde XML Los métodos tomovieinformation y el primer método toxml se estudiaron en el apartado 2.2 tomovieinformationlist Recibe una lista de elementos JDOM, donde cada elemento (tag movie) representa la información de una película Lo utiliza la implementación REST de la capa de Acceso al Servicio (operación findmoviesbyreleasedate) Segundo método toxml Operación inversa a tomovieinformationlist Lo utiliza la capa de Implementación del Servicio (para devolver los datos de las películas que se estrenan en una determinada fecha)

35 Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación REST de la capa Implementación del Servicio Comentarios finales

36 Protocolo REST (1) El protocolo REST no es Restful: Es el utilizado más habitualmente en la actualidad, aunque esto empieza a cambiar. Protocolo inspirado en las APIs REST de upcoming.org, Google Calendar y el servicio de geolocalización de Google Maps En la sección 3.6, veremos la alternativa RESTful. Existe una URL por cada una de las operaciones que ofrece el servicio ii Las operaciones de lectura se invocan mediante GET y las de modificación mediante POST Tras invocar una URL del servicio, el cliente puede obtener Código de estado 200: la respuesta contiene un documento XML con la respuesta del servicio Otro código de estado: ha ocurrido algún tipo de error grave La URL no existe (404) Un problema grave (e.g. problemas de acceso al repositorio de información) durante la ejecución del servicio (500) Etc.

37 Protocolo REST (2) Cuando el código de estado es 200, las respuestas son del estilo <?xml version="1.0" encoding="utf-8"?> <response xmlns=" contenttype="...">... Otros elementos... </response> Valores del atributo t contenttype DATA: la respuesta indica que la operación se ha ejecutado correctamente, y si la operación devuelve datos, éstos vienen dentro del tag response EXCEPTION: la respuesta indica que la operación no se ha podido realizar debido a un error de programación o del usuario (e.g. parámetros incorrectos, información incorrecta, la película cuya información se está intentado actualizar no existe, etc.)

38 Protocolo REST (3) Obtener la información de las películas que se estrenan en una determinada fecha Petición GET a findmoviesbyreleasedate?day=19&month=10&year=2001 Cliente Servicio <?xml version="1.0" encoding="utf-8"?> <response xmlns=" contenttype="data"> <movie> <identifier>3</identifier> <title>la Maldición ió del Escorpión de Jade</title>... </movie> <movie> </movie> </response> <identifier>4</identifier> > <title>amelie</title>...

39 Protocolo REST (4) Añadir la información de una película Petición POST a <?xml version="1.0" encoding="utf-8"?> <movie xmlns=" <title>amelie</title> <runtime>140</runtime>... </movie> Cliente Servicio <?xml version="1.0" encoding="utf-8"?> <response xmlns=" contenttype="data"> <identifier>4</identifier> </response>

40 Protocolo REST (5) Actualizar la información de una película Petición POST a <?xml version="1.0" encoding="utf-8"?> <movie xmlns=" <identifier>4</identifier> <title>amelie</title> <runtime>120</runtime> >... </movie> Cliente Servicio <?xml version="1.0" encoding="utf-8"?> <response xmlns=" contenttype="data"/>

41 Protocolo REST (6) Eliminar la información de una película Petición POST a (parámetro HTTP identifier identificador de la película a eliminar) Cliente Servicio <?xml version="1.0" encoding="utf-8"?> <response xmlns=" / / l" contenttype="data"/> tt

42 Protocolo REST (7) Respuestas con contenttype="exception" son del estilo <?xml version="1.0" encoding="utf-8"?> <response xmlns=" / / contenttype="exception"> <exception code="xxx" message="yyy" /> </response> Elemento exception Atributo code (entero) 1: parámetros incorrectos 2: formato de XML incorrecto (XML mal formado) 3: información de la película incorrecta (XML no válido) 4: instancia no encontrada (útil para las operaciones de actualización y eliminación) Atributo message: mensaje textual (útil para depuración)

43 Protocolo REST (8) Ejemplo de respuesta con contenttype="exception" Petición GET a p// / / / / findmoviesbyreleasedate?day=19&month=10 Cliente Servicio <response xmlns=" contenttype="exception"> <exception code="1" message="incorrect/missing 'day', 'month', or 'year' parameter" /> </response>

44 Protocolo REST (y 9) Añadir/actualizar la información de una película Se ha decido pasar los datos de la película en XML Esta es la solución que emplea, por ejemplo, el API REST de Google Calendar Otra alternativa consistiría en usar parámetros HTTP para pasar la información de una película Ejemplo Parámetros univaluados: identifier, title, runtime, releasedate y sypnosis Parámetros multivaluados: director, actor y genre Esta es la solución que emplea, por ejemplo, el API REST de upcoming.org

45 Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación REST de la capa Implementación del Servicio Comentarios finales

46 es.udc.ws.movies.service.rest.xml [Capas de Acceso e Implementación del Servicio] (1) ServiceResponseXMLConversor + toserviceresponse(in : InputStream) : ServiceResponse + toxml(serviceresponse : ServiceResponse, out : OutputStream) tst : void ServiceResponse - contenttype : ContentType - dataelements: List<Element> - exception: ExceptionInServiceResponse + ServiceResponse() + ServiceResponse(dataElement : Element) + ServiceResponse(dataElements : List<Element>) + ServiceResponse(exception p : ExceptionInServiceResponse) p + Métodos get El tipo contenttype está declarado dentro de ServiceResponse: public enum ContentType { DATA, EXCEPTION}; org.jdom 0..n Element ExceptionInServiceResponse - code : int - message: String + Constructor + Métodos get

47 es.udc.ws.movies.service.rest.xml [Capas de Acceso e Implementación del Servicio] (y 2) ServiceResponse Modela las respuestas del servicio Puede contener Datos (contenttype == DATA) Por comodidad existen tres constructores ServiceResponse(): la respuesta no incluye información ServiceResponse(Element): la respuesta incluye un elemento (e.g. el identificador de una película añadida) ServiceResponse(List<Element>): la respuesta incluye una lista de elementos (e.g. la lista de películas a estrenar) Una indicación de que la petición no se ha podido realizar (contenttype t tt == EXCEPTION) Cuarto constructor ServiceResponseXMLConversor Realiza conversiones de ServiceResponse a/desde XML La capas de Acceso al Servicio e Implementación del Servicio también se apoyan en MovieXMLConversor

48 es.udc.ws.movies.service.rest.proxy [Capa de Acceso al Servicio] es.udc.ws.movies.service <<interface>> MovieInformationService MovieInformationRESTProxy es.udc.ws.movies.service.rest.xml es.udc.ws.movies.service.xml ServiceResponseXMLConversor MovieXMLConversor MovieInformationRESTProxy Patrón Proxy (en conjunción con el interfaz que implementa) Representa un sustituto (proxy) local del servicio remoto Utiliza Jakarta Commons HttpClient para realizar las peticiones HTTP Framework Open Source de Apache ( Recientemente HttpClient ha pasado a formar parte de Apache HttpComponents (

49 Visión global de HttpClient [org.apache.commons.httpclient] (1) HttpClient t + HttpClient() + executemethod(method : HttpMethod) : int HttpStatus <<interface>> HttpMethod + getresponsebodyasstream() : InputStream + releaseconnection() : void Declara constantes para cada uno de los códigos de estado: SC_OK (200), SC_ NOT _ FOUND (404), SC_INTERNAL_SERVER_ERROR (500), etc.

50 Visión global de HttpClient [org.apache.commons.httpclient.methods] (2) org.apache.commons.httpclient <<interface>> HttpMethod th HttpMethodBase ExpectContinueMethod GetMethod th + GetMethod(uri : String) Resto de métodos HTTP: OptionsMethod, HeadMethod, etc. EntityEnclosingMethod + setrequestentity(requestentity : RequestEntity) : void PostMethod PutMethod + PostMethod(uri : String) + addparameter(paramname: String, paramvalue : String) : void <<interface>> RequestEntity InputStreamRequestEntity + InputStreamRequestEntity( content : InputStream, contenttype : String) : void

51 Visión global de HttpClient (3) HttpMethod Representa una petición HTTP y su correspondiente respuesta Por cada tipo de operación HTTP (GET, POST, etc.) existe una clase XXXMethod (GetMethod, PostMethod, etc.) que implementa el interfaz HttpMethod Método InputStream getresponsebodyasstream() Permite leer la respuesta de una operación HTTP Método void releaseconnection() Libera la conexión HTTP (HttpClient puede reusarla para otras peticiones) HttpClient int executemethod(httpmethod method) Envía la petición HTTP especificada por parámetro Devuelve un código de estado con el resultado de la petición

52 Visión global de HttpClient (4) GetMethod Constructor GetMethod(String uri) Permite construir un objeto para realizar una petición GET a la URI especificada por parámetro Los parámetros (si los hay) forman parte de la URI Esquema típico para enviar una petición GET y leer su respuesta GetMethod method = new GetMethod(" try { /* 1: Enviar petición. */ HttpClient client = new HttpClient(); int statuscode = client.executemethod(method); /* 2: Procesar respuesta. */ if (statuscode == HttpStatus.SC_OK) { InputStream in = method.getresponsebodyasstream(); << Tratar respuesta >> } else { << Tratar error >> } } catch (<<...>>) { << Tratar excepciones >> } finally { method.releaseconnection(); }

53 Visión global de HttpClient (5) GetMethod (cont) Sólo se deben usar caracteres ASCII en la URL Si en el valor de un parámetro es necesario usar un carácter especial (e.g.?, &, blanco, etc.) o un carácter no ASCII (e.g. ñ, á, etc.), se puede usar java.net.urlencoder Ejemplo String url =... url += "parameter=" + URLEncoder.encode(value, "UTF-8"); En licationdesignquestions se documentan otras opciones posibles

54 Visión global de HttpClient (6) PostMethod Constructor PostMethod(String uri) Permite construir un objeto para realizar una petición POST a la URI especificada por parámetro é d Permite añadir parámetros a la petición Los parámetros no forman parte de la URI sino del cuerpo de la petición Método void addparameter(string paramname, String paramvalue) Método void setrequestentity(requestentity requestentity) Permite asociar un objeto RequestEntity Un objeto RequestEntity permite enviar texto en el cuerpo de la petición HTTP

55 Visión global de HttpClient (7) InputStreamRequestEntity Constructor InputStreamRequestEntity(InputStream content, String contenttype) Construye un RequestEntity que lee el texto desde un InputStream y cuyo tipo de contenido viene especificado en contenttype (e.g. "text/xml; charset=utf-8" si se envía XML en UTF-8)

56 Visión global de HttpClient (8) Esquema típico para enviar una petición POST con texto en el cuerpo y leer su respuesta PostMethod method = new PostMethod(" try { /* 1: Preparar petición. */ InputStream xmlinputstream =... InputStreamRequestEntity requestentity = new InputStreamRequestEntity(xmlInputStream, "text/xml; charset=utf-8"); /* 2: Enviar petición. */ HttpClient client = new HttpClient(); method.setrequestentity(requestentity); int statuscode = client.executemethod(method); /* 3: Procesar respuesta. */ if (statuscode == HttpStatus.SC_OK) { InputStream in = method.getresponsebodyasstream(); << Tratar respuesta >> } else { << Tratar error >> } } catch (<<...>>) { << Tratar excepciones >> } finally { method.releaseconnection(); }

57 Visión global de HttpClient (y 9) Esquema típico para enviar una petición POST con parámetros y sin texto en el cuerpo, y leer su respuesta PostMethod method = new PostMethod(" method.addparameter("param1", "val1"); method.addparameter("param2", "val2"); try { /* 1: Enviar petición. */ HttpClient client = new HttpClient(); int statuscode = client.executemethod(method); /* 2: Procesar respuesta. */ << Tratar código de estado >> if (statuscode == HttpStatus.SC_OK) { InputStream in = method.getresponsebodyasstream(); << Tratar respuesta >> } } catch (<<...>>) { << Tratar excepciones. >> } finally { method.releaseconnection(); }

58 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (1) public class MovieInformationServiceRESTProxy implements MovieInformationService { private final static String ENDPOINT_ADDRESS_PARAMETER = "MovieInformationServiceRESTProxy/endpointAddress"; private static String endpointaddress; public MovieInformationServiceRESTProxy() {} public List<MovieInformationTO> findmoviesbyreleasedate( Calendar releasedate) throws ServiceException { /* Prepare request. */ int day = releasedate.get(calendar.day_of_month); int month = releasedate.get(calendar.month) Calendar.JANUARY + 1; int year = releasedate.get(calendar.year); GetMethod method = new GetMethod( getendpointaddress() + "/findmoviesbyreleasedate" + "?day=" + day + "&month=" + month + "&year=" + year);

59 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (2) try { /* Send request. */ HttpClient client = new HttpClient(); int statuscode = client.executemethod(method); /* Process reply. */ handlehttpstatuscode(statuscode); InputStream in = method.getresponsebodyasstream(); ServiceResponse serviceresponse = ServiceResponseXMLConversor.toServiceResponse(in); if (serviceresponse.getcontenttype() == ServiceResponse.ContentType.DATA) { return MovieXMLConversor.toMovieInformationList( serviceresponse.getdataelements()); } else { // ServiceResponse.ContentType.EXCEPTION throw getunexpectedserviceexception( serviceresponse.getexception()); }

60 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (3) } } catch (ServiceException e) { throw e; } catch (Exception e) { throw new ServiceException(e); } finally { method.releaseconnection(); } public Long addmovie(movieinformationto movieinformation) throws MovieInformationException, ServiceException { PostMethod method = new PostMethod(getEndpointAddress() + "/addmovie"); try { /* Prepare request. */ ByteArrayOutputStream xmloutputstream = new ByteArrayOutputStream(); MovieXMLConversor.toXML(movieInformation, xmloutputstream); ByteArrayInputStream xmlinputstream = new ByteArrayInputStream(xmlOutputStream.toByteArray()); InputStreamRequestEntity requestentity = new InputStreamRequestEntity(xmlInputStream, "text/xml; charset=utf-8");

61 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (4) /* Send request. */ HttpClient client = new HttpClient(); method.setrequestentity(requestentity); int statuscode = client.executemethod(method); /* Process reply. */ handlehttpstatuscode(statuscode); t d t t C d InputStream in = method.getresponsebodyasstream(); ServiceResponse serviceresponse = ServiceResponseXMLConversor.toServiceResponse(in); if (serviceresponse.getcontenttype() == ServiceResponse.ContentType.DATA) { Element identifierelement = serviceresponse.getdataelements().get(0); Long identifier = Long.valueOf(identifierElement.getTextTrim()); return identifier;

62 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (5) } else { // ServiceResponse.ContentType.EXCEPTION ExceptionInServiceResponse exception = serviceresponse.getexception(); } if (exception.getcode() == ExceptionCodes.INCORRECT_MOVIE_INFORMATION) { throw new MovieInformationException( exception.getmessage()); } else { throw getunexpectedserviceexception(exception); } } catch (MovieInformationException e) { throw e; } catch (ServiceException e) { throw e; } catch (Exception e) { throw new ServiceException(e); } finally { method.releaseconnection(); } }

63 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (6) public void removemovie(long identifier) throws InstanceNotFoundException, ServiceException { /* Prepare request.*/ PostMethod method = new PostMethod(getEndpointAddress() + "/removemovie"); method.addparameter("identifier", identifier.tostring()); try { /* send request. */ HttpClient client = new HttpClient(); int statuscode = client.executemethod(method); /* Process reply. */ handlehttpstatuscode(statuscode); InputStream in = method.getresponsebodyasstream(); ServiceResponse serviceresponse = ServiceResponseXMLConversor.toServiceResponse(in);

64 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (7) if (serviceresponse.getcontenttype() == ServiceResponse.ContentType.EXCEPTION) { ExceptionInServiceResponse exception = serviceresponse.getexception(); } if (exception.getcode() == ExceptionCodes.INSTANCE_NOT_FOUND) { throw new InstanceNotFoundException( identifier, MovieInformationTO.class.getName()); } else { throw getunexpectedserviceexception(exception); } } } catch (InstanceNotFoundException e) { throw e; } catch (ServiceException e) { throw e; } catch (Exception e) { throw new ServiceException(e); } finally { method.releaseconnection(); }

65 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (8) // updatemovie -> similar a addmovie... private static String getendpointaddress() throws MissingConfigurationParameterException, UnavailableConfigurationParametersException { } if (endpointaddress == null) { endpointaddress = ConfigurationParametersManager.getParameter( ENDPOINT_ADDRESS_PARAMETER); } return endpointaddress; private void handlehttpstatuscode(int statuscode) throws ServiceException { } if (statuscode!= HttpStatus.SC_OK) { throw new ServiceException( "HTTP error; status code = " + statuscode); }

66 es.udc.ws.movies.service.rest.proxy.movieinformationservicerestproxy (y 9) private ServiceException getunexpectedserviceexception ( ExceptionInServiceResponse exception) { return new ServiceException("Server exception; " + "code = " + exception.getcode() + "; message = " + exception.getmessage()); g } }

67 Comentarios MovieInformationServiceRESTProxy lee de la configuración la dirección base del servicio MovieInformationServiceRESTProxy/endpointAddress=\ Excepciones ServiceException (runtime) Error de comunicación o invocación incorrecta (e.g. parámetros erróneos) MovieInformationException (runtime) El XML de la información de la película no está bien formado o no es válido InstanceNotFoundException (checked) No se encuentra el objeto En el ejemplo (updatemovie y removemovie) se utiliza para señalar que la película sobre la que se intenta hacer una acción no existe

68 Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación REST de la capa Implementación del Servicio Comentarios finales

69 Aplicaciones Web Java EE (1) En Java EE, las aplicaciones Web se instalan en servidores (contenedores) de aplicaciones HTTP war Aplicaciones Web Cliente Servidor de aplicaciones El API de programación Web que ofrece el servidor de aplicaciones está estandarizada El API está formada en su mayoría por interfaces y clases abstractas Las aplicaciones Web se distribuyen en ficheros WAR Un fichero WAR (Web ARchive) es un fichero JAR con una estructura de directorios estandarizada Contiene clases objeto (.class), librerías utilizadas (.jar), ficheros de configuración ió y otras abstracciones propias de una aplicación Web

70 Aplicaciones Web Java EE (2) Una aplicación Web que utilice las APIs estándares puede instalarse en cualquier servidor de aplicaciones Java EE Existen muchos servidores de aplicaciones Ejemplos de servidores de código cerrado BEA WebLogic Server: IBM WebSphere ApplicationServer: Sun Java System Application Server: Oracle OaceApplication ppcato Server: e co Ejemplos de servidores de código abierto JBoss AS: Apache Tomcat: h Sólo proporciona las APIs de servlets y JSP NOTA: para la programación de servicios REST sólo necesitamos el lapid de servlets

71 Aplicaciones Web Java EE (y 3) Las APIs de programación Web Java no están pensadas para devolver HTML/XHTML, sino cualquier tipo de información sobre HTTP Una aplicación Web puede devolver sólo markup para navegadores, actuar como un servicio para aplicaciones cliente, o ambas cosas En consecuencia, se pueden utilizar para implementar servicios Web Utilizaremos el API de Servlets, en conjunción con JDOM, para implementar servicios REST Un servlet es una clase que puede recibir las peticiones asociadas a una o varias URLs y devolver las respuestas

72 Visión global del framework de servlets (1) javax.servlet <<interface>> Servlet + init(config : ServletConfig) : void + destroy() : void + service(request : ServletRequest, response : ServletResponse) : void GenericServlet + init(config : ServletConfig) : void + destroy() : void + service(request : ServletRequest, response : ServletResponse) : void javax.servlet.http HttpServlet + service(request : ServletRequest, response : ServletResponse) : void # service(request s : HttpServletRequest, response s : HttpServletResponse) s : void # doget(request : HttpServletRequest, response : HttpServletResponse) : void # dopost(request : HttpServletRequest, response : HttpServletResponse) : void

73 Visión global del framework de servlets (2) javax.servlet <<interface>> javax.servlet.servletrequest + getparameter(name : String) : String + getparametervalues(name : String) : String[] + getinputstream() : ServletInputStream <<interface>> javax.servlet.servletresponse + setcontenttype(type : String) : void + getouputstream () : ServletOutputStream javax.servlet.http <<interface>> HttpServletRequest <<interface>> HttpServletResponse tr

74 Visión global del framework de servlets (3) Normalmente el desarrollador implementa un servlet extendiendo de HttpServlet y redefine los métodos doxxx (e.g. doget, dopost, doput, dodelete, etc.) necesarios Ciclo de vida de un servlet Cuando el servidor de aplicaciones Web necesita cargar un servlet en memoria (e.g. al arrancar, la primera vez que se accede a él, etc.), crea una instancia de la clase de implementación y llama a la operación init (interfaz Servlet) En una máquina virtual Java, sólo existe una instancia de cada servlet para cada aplicación Web instalada Cuando el servidor de aplicaciones Web decide eliminar un servlet de memoria (e.g. lleva cierto tiempo sin usarse), llama a la operación destroy (interfaz Servlet)

75 Visión global del framework de servlets (4) Ciclo de vida de un servlet (cont) Cuando el servidor de aplicaciones Web recibe una petición dirigida a un servlet, invoca la operación service (interfaz Servlet) La operación pública service de HttpServlet llama a la operación protegida service Esta operación es una operación plantilla (Template Method), que llama a doget, dopost, doput, dodelete, etc., según la petición HTTP sea GET, POST, PUT, DELETE, etc.

76 Visión global del framework de servlets (5) Modelo multi-thread de procesamiento de peticiones Cada vez que el servidor de aplicaciones Web recibe una petición dirigida a un servlet, la petición se procesa en un thread independiente (concurrentemente con otras peticiones) Internamente los servidores de aplicaciones suelen usar un pool de threads Existe un conjunto (pool) de threads de tamaño configurable Cada petición se inserta en una cola La petición es servida por uno de los threads libres del pool Si no hay ningún thread libre, la petición permanece en la cola hasta que uno termina su trabajo

77 Visión global del framework de servlets (6) Modelo multi-thread de procesamiento de peticiones (cont) Dado que sólo existe una instancia de cada servlet para cada aplicación Web instalada, los métodos doxxx tienen que ser thread-safe No es necesario utilizar synchronized ( ni eficiente!!!) si la implementación de los métodos doxxx sólo hace uso de variables locales (pila o heap) o de variables globales (static) de sólo lectura (típicamente caches), que es lo normal Si los métodos doxxx modifican alguna estructura global (un atributo del servlet o alguna variable global), necesitan sincronizar su acceso Sin embargo, en general, eso es mala idea, dado que una aplicación con estas características no funcionará en un entorno cluster En un entorno cluster, el servidor de aplicaciones Web está replicado en varias máquinas para conseguir escalabilidad y tolerancia a fallos En estos casos, es mejor usar una base de datos para las estructuras globales que sean de lectura/escritura

78 Visión global del framework de servlets (7) ServletRequest String getparameter(string g name) Permite obtener el valor de un parámetro univaluado String[] getparametervalues(string name) Permite obtener el valor de un parámetro multivaluado También se puede usar con parámetros univaluados NOTA Un parámetro multivaluado es aquel que tiene (o puede tener) varios valores Al realizar la petición HTTP el parámetro (en la URI o en el cuerpo del mensaje, dependiendo del tipo de petición) se especifica n veces, cada una con su valor Ejemplo: pe / eat e cty a&cty tago ServletInputStream getinputstream() Permite leer el cuerpo de la petición ServletInputStream es una clase abstracta que implementa java.io.inputstream

79 Visión global del framework de servlets (y 8) ServletResponse void setcontenttype(string type) Especifica el tipo de contenido de la respuesta (e.g. "text/xml; charset=utf-8") ServletOutputStream getoutputstream() Permite escribir la respuesta ServletOutputStream es una clase abstracta que implementa java.io.outputstream

80 es.udc.ws.movies.service.rest.servlets [Capa Implementación del Servicio] (1) javax.servlet.http HttpServlet FindMoviesByReleaseDateServlet AddMovieServlet UpdateMovieServlet RemoveMovieServlet es.udc.ws.movies.xml MovieXMLConversor es.udc.ws.movies.model MovieInformationFacade ServletUtils

81 es.udc.ws.movies.service.rest.servlets [Capa Implementación del Servicio] (y 2) ServletUtils + writeserviceresponse(response : HttpServletResponse) : void + writeserviceresponse(dataelement i t t : Element, response : HttpServletResponse) tr : void + writeserviceresponse(dataelements : List<Element>, response : HttpServletResponse) : void + writeserviceresponse(exceptioncode : int, exceptionmessage: String, response : HttpServletResponse) : void es.udc.ws.movies.service.rest.xml ServiceResponseXMLConversor ServiceResponse Los métodos writeserviceresponse construyen un objeto ServiceResponse apropiado y escriben el XML en la respuesta usando ServiceResponseXMLConvesor

82 es.udc.ws.movies.service.rest.servlets.findmoviesbyreleasedate (1) public class FindMoviesByReleaseDateServlet extends HttpServlet { public void doget(httpservletrequest request, HttpServletResponse response)throws IOException { /* Get releasedate. */ Calendar releasedate; try { String day = request.getparameter("day"); String month = request.getparameter("month"); String year = request.getparameter("year"); releasedate = DateOperations.getDate(day, month, year); } catch (Exception e) { ServletUtils.writeServiceResponse( ExceptionCodes.INCORRECT_PARAMETERS, "Incorrect/missing 'day', 'month', or 'year' " + "parameter", response); return; }

83 es.udc.ws.movies.service.rest.servlets.findmoviesbyreleasedate (y 2) /* Find movies. */ List<MovieInformationTO> movieinformationlist = MovieInformationFacade.getInstance(). findmoviesbyreleasedate(releasedate); /* Generate response. */ ServletUtils.writeServiceResponse( MovieXMLConversor.toXML(movieInformationList), response); } }

84 es.udc.ws.movies.service.rest.servlets.addmovieservlet (1) public class AddMovieServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException { MovieInformationTO movieinformation; /* Get movie from request. */ try { movieinformation = MovieXMLConversor.toMovieInformation( request.getinputstream()); } catch (ParsingException e) { ServletUtils.writeServiceResponse( ExceptionCodes.XML_INCORRECT_FORMAT, e.getmessage(), response); return; }

85 es.udc.ws.movies.service.rest.servlets.addmovieservlet (y 2) /* Add movie to repository. */ Long identifier; try { identifier = MovieInformationFacade.getInstance(). addmovie(movieinformation); } catch (MovieInformationException e) { ServletUtils.writeServiceResponse( ExceptionCodes.INCORRECT_MOVIE_INFORMATION, e.getmessage(), response); return; } /* Generate response. */ Element identifierelement = new Element("identifier", MovieXMLConversor.XML_NS); identifierelement.settext(identifier.tostring()); ServletUtils.writeServiceResponse(identifierElement, response); } }

86 es.udc.ws.movies.service.rest.servlets.removemovieservlet (1) public class RemoveMovieServlet extends HttpServlet { public void dopost(httpservletrequest request, HttpServletResponse response) throws IOException { /* Get movie identifier. */ Long identifier; try { identifier = Long.valueOf(request.getParameter("identifier")); } catch (Exception e) { ServletUtils.writeServiceResponse( ExceptionCodes.INCORRECT_PARAMETERS, "Incorrect/missing 'identifier' parameter", response); return; }

87 es.udc.ws.movies.service.rest.servlets.removemovieservlet (y 2) } /* Remove movie from repository. */ try { MovieInformationFacade.getInstance(). removemovie(identifier); } catch (InstanceNotFoundException e) { ServletUtils.writeServiceResponse( ExceptionCodes.INSTANCE_NOT_FOUND, e.getmessage(), response); return; } /* Generate response. */ ServletUtils.writeServiceResponse(response); }

88 es.udc.ws.movies.service.rest.servlets.servletutils (1) public class ServletUtils { private ServletUtils() {} public final static void writeserviceresponse( HttpServletResponse response) throws IOException { } writeserviceresponse(new ServiceResponse(), response); public final static void writeserviceresponse(element dataelement, HttpServletResponse response) throws IOException { } writeserviceresponse(new ServiceResponse(dataElement), response); public final static void writeserviceresponse( List<Element> dataelements, HttpServletResponse response) throws IOException { } writeserviceresponse(new ServiceResponse(dataElements), response);

89 es.udc.ws.movies.service.rest.servlets.servletutils (y 2) } public final static void writeserviceresponse(int exceptioncode, String exceptionmessage, HttpServletResponse response) throws IOException { } ServiceResponse serviceresponse = new ServiceResponse( new ExceptionInServiceResponse(exceptionCode, exceptionmessage)); writeserviceresponse(serviceresponse, response); private final static void writeserviceresponse( ServiceResponse serviceresponse, HttpServletResponse response) throws IOException { } OutputStream out = response.getoutputstream(); response.setcontenttype("text/xml; charset=utf-8"); ServiceResponseXMLConversor.toXML(serviceResponse, out, true); out.close();

90 Comentarios Los anteriores servlets no tratan IOException ni MovieInformationFacadeException java.io.ioexception (checked): representa un error de escritura en el OutputStream de la respuesta MovieInformationFacadeException i i (runtime): cada caso de uso de la fachada del modelo puede devolverla si ocurre un error grave (e.g. error de acceso al repositorio) Ambas excepciones representan errores relativos a la infraestructura usada y ajenos al usuario El servidor de aplicaciones captura IOException y las excepciones de runtime, y si se producen, devuelve una respuesta con código de estado 500 (INTERNAL SERVER ERROR), que es lo que deseamos

91 Empaquetamiento de una aplicación Web (1) jar cvf aplicacionweb.war directorio Opciones similares al comando Unix tar El nombre de una aplicación Web no tiene porque coincidir con el de su fichero.war El nombre se decide al instalar el fichero.war en el servidor de aplicaciones Maven genera automáticamente ficheros.war para los módulos con empaquetamiento war. Estructura de un fichero.war Directorio WEB-INF/classes Ficheros.class que conforman la aplicación Web, agrupados en directorios según su estructura en paquetes Sin ficheros fuente! Directorio WEB-INF/lib Ficheros.jar de librerías que usa la aplicación Sin ficheros fuente!

92 Empaquetamiento de una aplicación Web (2) Estructura de un fichero.war (cont) WEB-INF/web INF/web.xml Configuración estándar de la aplicación Web Directorio raíz y subdirectorios Vista de la aplicación (ej.: ficheros HTML, páginas JSP, imágenes, etc.) Visible a los navegadores Lo que hay debajo de WEB-INF sólo es visible a los servlets y páginas JSP de la aplicación Un fichero war se puede instalar (deployment) en Un fichero.war se puede instalar (deployment) en cualquier servidor de aplicaciones Web Java EE

3.3 Caso de estudio: diseño e implementación de un servicio/cliente REST

3.3 Caso de estudio: diseño e implementación de un servicio/cliente REST 3.3 Caso de estudio: diseño e implementación de un servicio/cliente REST Índice Descripción del caso de estudio Diseño por capas Protocolo REST Implementación REST de la capa Acceso al Servicio Implementación

Más detalles

envía al browser. El browser despliega el archivo.

envía al browser. El browser despliega el archivo. SERVLETS Dr. Raúl Perez Páginas web estáticas Como se despliega una página web en un browser Normalmente la página se crea usando HTML y se almacena como un archivo en el servidor de web. El usuario escribe

Más detalles

Requisitos. Universidad ORT Arquitectura de Software

Requisitos. Universidad ORT Arquitectura de Software Requisitos Java Development Kit (JDK) 1.5 o superior NetBeans IDE 6.5 o superior JBoss Application Server 4.2.x o 5.x.x Variable de entorno JAVA_HOME apuntando al directorio de instalación de la JDK 1

Más detalles

Servlets. Unidad: 4 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos

Servlets. Unidad: 4 Laboratorio de Programación. Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Servlets Unidad: 4 Laboratorio de Programación Universidad Nacional de la Patagonia Austral Unidad Académica Río Gallegos Indice Introducción CGI Servlets: concepto, caracteristicas Servlets Vs. CGI Ciclo

Más detalles

Tema 4: Tecnologías Web Java

Tema 4: Tecnologías Web Java Tema 4: Tecnologías Web Java Introducción Aplicación web Aplicación que corre en al menos un servidor y a la que el usuario accede desde un cliente de propósito general (ej.: navegador en un PC, teléfono

Más detalles

USANDO SERVLETS EN UN SERVIDOR WEB RESIN

USANDO SERVLETS EN UN SERVIDOR WEB RESIN USANDO SERVLETS EN UN SERVIDOR WEB RESIN Servidor Web Resin Resin es un servidor web que permite no solo despachar un página web, sino aplicaciones web construidos bajo la arquitectura J2EE, así como el

Más detalles

Curso de Java POO: Programación orientada a objetos

Curso de Java POO: Programación orientada a objetos Curso de Java POO: Programación orientada a objetos Luis Guerra Velasco Curso INEM 02830. Programación en Java Marzo 2010 Índice 1 Introducción a la POO 2 Herencia y polimorfismo 3 Empaquetado de proyectos

Más detalles

Modelo de Objetos Distribuidos

Modelo de Objetos Distribuidos Remote Method Invocation Modelo de Objetos Distribuidos Un objeto remoto es un objeto cuyos métodos pueden ser invocados desde otra máquina virtual de java, potencialmente en un host diferente. Modelo

Más detalles

JAVA EE 5. Arquitectura, conceptos y ejemplos.

JAVA EE 5. Arquitectura, conceptos y ejemplos. JAVA EE 5. Arquitectura, conceptos y ejemplos. INTRODUCCIÓN. MODELO DE LA APLICACIÓN JEE5. El modelo de aplicación Java EE define una arquitectura para implementar servicios como lo hacen las aplicaciones

Más detalles

Práctica sobre compartición de instancias remotas.

Práctica sobre compartición de instancias remotas. Práctica sobre compartición de instancias remotas. Para esta práctica se ha construido un pequeño sistema cliente-servidor que permite la resolución de Sudokus entre varios jugadores. El servidor consta

Más detalles

Desarrollo de Servicios Web con JBuilder

Desarrollo de Servicios Web con JBuilder Artículos técnicos Grupo Danysoft: Desarrollo de Servicios Web con JBuilder Segunda parte Oscar Cristobal Ruiz Departamento Java Equipo Grupo Danysoft Enero 2003 - (902) 123146 www.danysoft.com Desarrollo

Más detalles

Un servlet es una clase java que implementa la Servlet interface. Un servlet corre dentro de un contexto denominado Servlet engine.

Un servlet es una clase java que implementa la Servlet interface. Un servlet corre dentro de un contexto denominado Servlet engine. Capítulo 6 Servlets En esta sección se va a tratar el primer componente que corre del lado del servidor, y es uno de los puntos fundamentales para la comunicación entre el cliente (browser) y el servidor.

Más detalles

Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages)

Sistemas de Información 12/13 Servlets y JSPs (Java Server Pages) 12/13 Servlets y JSPs (Java Server Pages) Departamento Informática e Ingeniería de Sistemas Universidad de Zaragoza (raqueltl@unizar.es) " Guión Introducción Servlets Introducción Clases e interfaces del

Más detalles

3.9 Patrón Distributed callback

3.9 Patrón Distributed callback 3.9 Patrón Distributed callback Motivación (1) Queremos que la aplicación de administración de los termostatos Monitorize la temperatura de algunos termostatos, avisándonos si ésta baja o sube por encima

Más detalles

Web Tier en JAVA. Nicolás Troncoso Carrère. Valparaíso, 2006. ILI 258 Departamento de Informática Universidad Técnica Federico Santa María

Web Tier en JAVA. Nicolás Troncoso Carrère. Valparaíso, 2006. ILI 258 Departamento de Informática Universidad Técnica Federico Santa María Nicolás Troncoso Carrère ILI 258 Departamento de Informática Universidad Técnica Federico Santa María Valparaíso, 2006 1 2 3 Porqué paginas dinamicas? Confirmacion de suscripciones. Contenido generado

Más detalles

Ejemplos de Servlet y JSP Web Application Development

Ejemplos de Servlet y JSP Web Application Development Ejemplos de Servlet y JSP Web Application Development HERNÁNDEZ CRUZ DULCE 13/09/2011 INTRODUCCIÓN Servlets Los Servlets son módulos que extienden los servidores orientados a petición-respuesta, como los

Más detalles

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat 4.1.12.

Figura 7-1 Enlace para instalar el servidor web Apache Jakarta Tomcat 4.1.12. Unidad 7 Servlets 7.1 Marco teórico Lo que permite que ordenadores remotos con procesadores y sistemas operativos diferentes se entiendan y en definitiva que Internet funcione como lo hace en la actualidad,

Más detalles

NIVEL 16: ESTRUCTURAS N-ARIAS RECURSIVAS Aplicaciones Web, Html y Servlets. ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu.

NIVEL 16: ESTRUCTURAS N-ARIAS RECURSIVAS Aplicaciones Web, Html y Servlets. ISIS1206 Estructuras de Datos http://cupi2.uniandes.edu. 1 NIVEL 16: ESTRUCTURAS N-ARIAS RECURSIVAS Aplicaciones Web, Html y Servlets 2 Agenda Protocolo HTTP Formas HTML Servlets 3 Protocolo HTTP Hypertext Transfer Protocol (HTTP) - 1990 Versión 1.1 Mecanismo

Más detalles

J2EE Java 2 Enterprise Edition

J2EE Java 2 Enterprise Edition J2EE Java 2 Enterprise Edition Es el framework oficial de Java para la construcción de aplicaciones empresariales Es una tecnología basada en componentes Ofrece un modelo para el desarrollo de aplicaciones

Más detalles

Capitulo 5. Implementación del sistema MDM

Capitulo 5. Implementación del sistema MDM Capitulo 5. Implementación del sistema MDM Una vez que se concluyeron las actividades de análisis y diseño se comenzó la implementación del sistema MDM (Manejador de Documentos de MoProSoft). En este capitulo

Más detalles

Estructuras de Sistemas Operativos

Estructuras de Sistemas Operativos Estructuras de Sistemas Operativos Definicion de Sistema Operativos Un sistema operativo es un programa que actua como inter entre el usuario y el hardware de un computador y su proposito es proporcionar

Más detalles

Práctica 1: Instalación de un servidor de aplicaciones web y diseño de la vista de una aplicación

Práctica 1: Instalación de un servidor de aplicaciones web y diseño de la vista de una aplicación Práctica 1: Instalación de un servidor de aplicaciones web y diseño de la vista de una aplicación Sistemas de Información Grado de Informática Dpto. de Informática e Ingeniería de Sistemas, Universidad

Más detalles

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura

GUÍA TÉCNICA. Desarrollo de Proyectos en Plataforma Liferay en el Gobierno de Extremadura Desarrollo de Proyectos en en el Gobierno de Extremadura Página 1 de 10 Control de versiones Núm Fecha Descripción Autores 1.0 01/09/2012 Estandar para el desarrollo de portales con el gestor de contenidos

Más detalles

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA

COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA COPIAS DE SEGURIDAD AUTOMÁTICAS DE DIRECCIONES CALLEÇPAÑA Autor: Carlos Javier Martín González. Licenciado en Física Teórica por la Universidad Autónoma de Madrid. Analista programador y funcional. Desarrollador

Más detalles

Uso de excepciones en Java

Uso de excepciones en Java Uso de excepciones en Java En Java, cuando se produce un error en un método, se lanza un objeto Throwable. Cualquier método que haya llamado al método puede capturar la excepción y tomar las medidas que

Más detalles

App para realizar consultas al Sistema de Información Estadística de Castilla y León

App para realizar consultas al Sistema de Información Estadística de Castilla y León App para realizar consultas al Sistema de Información Estadística de Castilla y León Jesús M. Rodríguez Rodríguez rodrodje@jcyl.es Dirección General de Presupuestos y Estadística Consejería de Hacienda

Más detalles

[CASI v.0109] Pág. 1

[CASI v.0109] Pág. 1 I. DATOS INFORMATIVOS Carrera Especialidad Curso Código Ciclo : COMPUTACIÓN E INFORMATICA : Ingeniería de Software : Lenguaje de Programación II : F-INF110 : Cuarto Requisitos : T-INF108 (Lenguaje de Programación

Más detalles

Integración Capa Web de pojo-miniportal (1)

Integración Capa Web de pojo-miniportal (1) Integración Capa Web de pojo-miniportal (1) 1. Cambiar tipo de proyecto maven de "JAR" a "WAR 2. Añadir dependencias del API de Tapestry 3. Añadir configuración del plugin de Jetty al pom.xml 4. Añadir

Más detalles

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo.

GLOSARIO. Arquitectura: Funcionamiento, estructura y diseño de una plataforma de desarrollo. GLOSARIO Actor: Un actor es un usuario del sistema. Esto incluye usuarios humanos y otros sistemas computacionales. Un actor usa un Caso de Uso para ejecutar una porción de trabajo de valor para el negocio.

Más detalles

Oficina Online. Manual del administrador

Oficina Online. Manual del administrador Oficina Online Manual del administrador 2/31 ÍNDICE El administrador 3 Consola de Administración 3 Administración 6 Usuarios 6 Ordenar listado de usuarios 6 Cambio de clave del Administrador Principal

Más detalles

Servidores Web (II) Contenidos

Servidores Web (II) Contenidos Contenidos Servidores (II) Servidores/aplicaciones con/sin Estado Sesiones con Servlets Contextos compartidos con Servlets Acceso concurrente desde Servlets Servidores Cache Servidores Virtuales 1 2 Aplicaciones

Más detalles

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011

EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 EXAMEN FINAL Metodología y Programación Orientada a Objetos. Curso 2010 2011. Cuatrimestre de otoño. 17 de Enero de 2011 1. (0,75 PUNTOS) Identificad a continuación las sentencias que son ciertas, descartando

Más detalles

5.1 Introducción a Servicios Web

5.1 Introducción a Servicios Web 5.1 Introducción a Servicios Web Introducción Continuando con el ejemplo de intercambio de información de películas... => Actualmente ya no es necesario implementar la solución sugerida a mano Se han estandarizado

Más detalles

ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS

ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS ATLAS MANUAL DE USUARIO SERVICIO DE TRAZAS Versión 1.4 Área de Aplicaciones Especiales y Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Manual de Usuario NORMATIVA

Más detalles

Sesión 17. Servicios web RESTful

Sesión 17. Servicios web RESTful Sesión 17. Servicios web RESTful Luisa Fernanda Rincón Pérez 2015-1 Qué vimos la sesión pasada? 1. Consumir servicio web SOAP desde JAVA 2. Consumir servicio web en PHP 3. Exponer servicio web en PHP Qué

Más detalles

Dossier de prácticas

Dossier de prácticas Dossier de prácticas Intranet / Extranet Màster d Enginyeria del Software Desenvolupament d aplicacions sobre Internet Fundació Politècnica de Catalunya Jaume Moral Ros Albert Obiols Vives 1 Dossier de

Más detalles

Configuración servidor Tomcat

Configuración servidor Tomcat Apuntes de J2EE Configuración servidor Tomcat Uploaded by Ingteleco http://ingteleco.webcindario.com ingtelecoweb@hotmail.com La dirección URL puede sufrir modificaciones en el futuro. Si no funciona contacta

Más detalles

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS

ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS ATLAS MANUAL DE INTEGRACIÓN Cliente del Servicio de SMS Versión 1.0 Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Servicio de SMS Cliente NORMATIVA ATLAS Arquitectura

Más detalles

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android

APLICACIONES MÓVILES NATIVAS. Sesión 8: Arquitectura de las aplicaciones Android APLICACIONES MÓVILES NATIVAS Sesión 8: Arquitectura de las aplicaciones Android Contextualización Los lenguajes de programación que utilizan android y Java como base de desarrollo, han complementado la

Más detalles

Introducción a Java LSUB. 15 de enero de 2015 GSYC

Introducción a Java LSUB. 15 de enero de 2015 GSYC Introducción a LSUB GSYC 15 de enero de 2015 (cc) 2014 Laboratorio de Sistemas, Algunos derechos reservados. Este trabajo se entrega bajo la licencia Creative Commons Reconocimiento - NoComercial - SinObraDerivada

Más detalles

19. Packages o paquetes

19. Packages o paquetes Programación orientada a objetos con Java 201 19. Packages o paquetes Objetivos: a) Definir el concepto de paquete b) Interpretar el código fuente de una aplicación Java donde se utilicen paquetes c) Construir

Más detalles

Introducción a las Redes de Computadoras. Obligatorio 2 2011

Introducción a las Redes de Computadoras. Obligatorio 2 2011 Introducción a las Redes de Computadoras Obligatorio 2 2011 Facultad de Ingeniería Instituto de Computación Departamento de Arquitectura de Sistemas Nota previa - IMPORTANTE Se debe cumplir íntegramente

Más detalles

Patrones de Alto nivel: Patrones de Arquitectura Patrones de nivel medio: Patrones de Diseño Patrones de bajo nivel: Idioms

Patrones de Alto nivel: Patrones de Arquitectura Patrones de nivel medio: Patrones de Diseño Patrones de bajo nivel: Idioms Patrones Patrones Es una solución reusable de problemas comunes. Los patrones solucionan problemas que existen en muchos niveles de abstracción. desde el análisis hasta el diseño y desde la arquitectura

Más detalles

Framework 1. Web en Java. (solo aplicaciones en mantenimiento)

Framework 1. Web en Java. (solo aplicaciones en mantenimiento) Framework 1 Desarrollo de aplicaciones Web en Java (solo aplicaciones en mantenimiento) Enero de 2013 Unidad de Arquitectura y Soporte de Aplicaciones Área de Aplicaciones Especiales y Arquitectura de

Más detalles

Oracle 12c DISEÑO Y PROGRAMACIÓN

Oracle 12c DISEÑO Y PROGRAMACIÓN Oracle 12c Se estudia el servidor de bases de datos empresarial Oracle 12c, centrándose especialmente en el punto de vista de un diseñador o programador de bases de datos, pero explicando también cómo

Más detalles

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA

SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA SERVIDOR WEB PARA ACCESO EN TIEMPO REAL A INFORMACIÓN METEOROLÓGICA DISTRIBUIDA E. SÁEZ, M. ORTIZ, F. QUILES, C. MORENO, L. GÓMEZ Área de Arquitectura y Tecnología de Computadores. Departamento de Arquitectura

Más detalles

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2

Llamada a métodos remotos (RMI). Curso 04/05. Tema 9. Departament d Informàtica. Universitat de València. 1. Introducción 2 Tema 9 Llamada a métodos remotos (RMI). Departament d Informàtica. Índice 1. Introducción 2 1.1. Cómo funciona RMI?.......................................... 2 2. Usando RMI 4 2.1. Fase de desarrollo:

Más detalles

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es:

EXCEPCIONES EN JAVA. Las sentencias que tratan las excepciones son try y catch. La sintaxis es: EXCEPCIONES EN JAVA Uno de los problemas más importantes al escribir aplicaciones es el tratamiento de los errores. Errores no previstos que distorsionan la ejecución del programa. Las excepciones de Java

Más detalles

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades:

Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades: Propósito del prototipo: Mi propuesta consiste en crear un portal Web que contemple las siguientes funcionalidades: 1º. Mostrar noticias y eventos propios del grupo de personas que administren la Web.

Más detalles

Manual del Protocolo XML-RPC de Mensajería Negocios

Manual del Protocolo XML-RPC de Mensajería Negocios Manual del Protocolo XML-RPC de Mensajería Negocios Índice de contenidos 1 INTRODUCCIÓN... 3 2 FUNCIONALIDADES DEL API DE COMUNICACIÓN XML-RPC... 4 2.1 Envío Libre... 4 2.2 Envío a Grupo de Contactos...

Más detalles

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx

CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx CREAR UN SERVICIO WEB BASICO CON JAVA AXIS2. Víctor J. Sosa vjsosa@tamps.cinvestav.mx En este documento explicaré brevemente cómo construir un servicio web con Java Axis2 y cómo invocarlo desde un cliente

Más detalles

SIEWEB. La intranet corporativa de SIE

SIEWEB. La intranet corporativa de SIE La intranet corporativa de SIE por ALBA Software Acceso a los servicios SIE desde páginas Web para los usuarios de sistema *. Administración del Sistema (cuentas de usuarios, permisos, servicios, etc...)

Más detalles

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013

- MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD. Rev. 01- FEBRERO 2013 - MANUAL TÉCNICO - Software de diagnóstico de la seguridad de la información y autoimplantación de LOPD Rev. 01- FEBRERO 2013 Software de diagnóstico de la seguridad de la información y autoimplantación

Más detalles

GUÍA TÉCNICA. Desarrollo de Sistemas de Información la plataforma Business Intellingence Pentaho

GUÍA TÉCNICA. Desarrollo de Sistemas de Información la plataforma Business Intellingence Pentaho Desarrollo de Sistemas de Información la plataforma Business Intellingence Página 1 de 11 Control de versiones Ver. Fecha Descripción Autores 1 04/07/14 Versión inicial SDP Página 2 de 11 Índice del Documento

Más detalles

2.2 Parsing de documentos XML

2.2 Parsing de documentos XML 2.2 Parsing de documentos XML Introducción (1) Un documento XML se apoya en dos ideas [Obligatoria] Tiene que estar bien formado, y en consecuencia, estar construido en base a las normas de XML (los tags

Más detalles

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler

SOLUCION PARCIAL TASK SCHEDULER. Task Scheduler Task Scheduler Se necesita modelar una aplicación que permita definir tareas y ejecutarlas en forma programada. Las tareas pueden ser: La ejecución de programa cualquiera o comando del sistema operativo,

Más detalles

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable

Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable Capítulo 3 Diseño del Sistema de Administración de Información de Bajo Costo para un Negocio Franquiciable 1. Introducción. El Sistema de Administración de Información de un Negocio Franquiciable (SAINF)

Más detalles

Instalar y configurar W3 Total Cache

Instalar y configurar W3 Total Cache Instalar y configurar W3 Total Cache en WordPress Cardenal Gardoki, 1 48008 BILBAO (Vizcaya) Teléfono: 902 012 199 www.hostalia.com La velocidad de carga de una web influye mucho a la hora de mejorar el

Más detalles

Tutorial: Primeros Pasos con Subversion

Tutorial: Primeros Pasos con Subversion Tutorial: Primeros Pasos con Subversion Introducción Subversion es un sistema de control de versiones open source. Corre en distintos sistemas operativos y su principal interfaz con el usuario es a través

Más detalles

Arquitectura de sistema de alta disponibilidad

Arquitectura de sistema de alta disponibilidad Mysql Introducción MySQL Cluster esta diseñado para tener una arquitectura distribuida de nodos sin punto único de fallo. MySQL Cluster consiste en 3 tipos de nodos: 1. Nodos de almacenamiento, son los

Más detalles

Manual de Integrador.NET

Manual de Integrador.NET Manual de Integrador.NET viafirma platform v3.5 ÍNDICE 1. INTRODUCCIÓN... 5 1.1. Objetivos... 5 1.2. Referencia... 5 2. GUÍA RÁPIDA... 5 2.1. Añadir las dependencias necesarias... 5 2.2. Página de acceso

Más detalles

Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos

Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos Práctica 2: Instalación de un gestor de bases de datos relacionales y desarrollo de una aplicación Web con persistencia de datos Sistemas de Información Grado de Informática Dpto. de Informática e Ingeniería

Más detalles

INTRODUCCIÓN N A LAS APLICACIONES WEB Y TECNOLOGÍA A JAVA

INTRODUCCIÓN N A LAS APLICACIONES WEB Y TECNOLOGÍA A JAVA INTRODUCCIÓN N A LAS APLICACIONES WEB Y TECNOLOGÍA A JAVA Jaime Fernández ndez Mayo 2006 Índice Java Aplicaciones web Servlets JSP Servidores de aplicaciones IDE`s Ejemplo Historia Java Lenguaje orientado

Más detalles

Ingeniería del Software Arquitectura Física en 3 niveles

Ingeniería del Software Arquitectura Física en 3 niveles Introducción En este laboratorio desplegaremos en 3 niveles físicos una aplicación que verifica si una cuenta y un password son correctos, basada en la que fue presentada en el laboratorio Separación entre

Más detalles

Elementos requeridos para crearlos (ejemplo: el compilador)

Elementos requeridos para crearlos (ejemplo: el compilador) Generalidades A lo largo del ciclo de vida del proceso de software, los productos de software evolucionan. Desde la concepción del producto y la captura de requisitos inicial hasta la puesta en producción

Más detalles

2.2.- Paradigmas de la POO

2.2.- Paradigmas de la POO 2.2.- Paradigmas de la POO Los principios propios de la orientación a objetos son: 2.2.1.- Abstracción de Datos 2.2.2.- Encapsulamiento 2.2.3.- Ocultamiento 2.2.4.- Herencia 2.2.5.- Polimorfismo Cualquier

Más detalles

Introducción a la programación orientada a objetos

Introducción a la programación orientada a objetos Introducción a la programación orientada a objetos 1. Introducción a la programación orientada a objetos 2. Las clases 3. El tipo Struct 4. Diferencias entre Class y Struct 5. Pilares de la Programación

Más detalles

HTTP, CGI, Applets y Servlets

HTTP, CGI, Applets y Servlets HTTP, CGI, Applets y Servlets Sistemas de Operación II CI-4821 Sep-Dic 2006 Mercedes Martínez 00-33042 Aixbel Martínez 01-34114 Mario Felaco 02-34888 José Luís Castillo 01-33691 Yonathan Ledo 01-34033

Más detalles

Capas de la arquitectura de referencia

Capas de la arquitectura de referencia DOCUMENTO DE ARQUITECTURA DE REFERENCIA PARA APLICACIONES WEB GESTIÓN INFORMÁTICA UNIVERSIDAD DE ANTIOQUIA Este documento se estructura teniendo en cuenta las recomendaciones del artículo de IBM Reference

Más detalles

Tema 1. Introducción a JAVA

Tema 1. Introducción a JAVA Tema 1. Introducción a JAVA Historia Características Plataforma Java Entorno de desarrollo Ejemplo: Hola mundo Estructura general de un programa Java 1 Historia de Java (i) Surge en 1991: Sun Microsystems

Más detalles

Sistemas de Caché. Para mejorar la velocidad de carga de una web. papers. acens

Sistemas de Caché. Para mejorar la velocidad de carga de una web. papers. acens Sistemas de Caché Para mejorar la velocidad de carga de una web Calle San Rafael, 14 28108 Alcobendas (Madrid) 902 90 10 20 www..com Introducción Llega el momento en la vida de un sitio web que debido

Más detalles

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

INSTALACIÓ N A3ERP. Informática para empresas INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS Página 1 de 20 INSTALACIÓ N A3ERP INTRODUCCIÓN La instalación de a3erp v9 ha sufrido una trasformación importante respecto a sus versiones anteriores. Cualquier instalación exige la existencia de un pc

Más detalles

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA

RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA UNED Centro Asociado de Cádiz RESUMEN DE CONCEPTOS BASICOS DE PROGRAMACION JAVA 1. OBJETOS Cualquier elemento del programa es un objeto. Un programa es un conjunto de objetos que se comunican entre sí

Más detalles

Programación en Java. Programación en OO

Programación en Java. Programación en OO Programación en OO Lección 4:Programación en OO 1. Herencia 2. Modificadores de Acceso 3. Interfaces Herencia Es la acción en la que una clase obtiene los métodos y propiedades definidos en otra clase,

Más detalles

Introducción a la Firma Electrónica en MIDAS

Introducción a la Firma Electrónica en MIDAS Introducción a la Firma Electrónica en MIDAS Firma Digital Introducción. El Módulo para la Integración de Documentos y Acceso a los Sistemas(MIDAS) emplea la firma digital como método de aseguramiento

Más detalles

Java Inicial (20 horas)

Java Inicial (20 horas) Java Inicial (20 horas) 1 Temario 1. Programación Orientada a Objetos 2. Introducción y Sintaxis Java 3. Sentencias Control Flujo 4. POO en Java 5. Relaciones entre Objetos 6. Polimorfismo, abstracción

Más detalles

Documentación Técnica Conector

Documentación Técnica Conector Documentación Técnica Conector Torre Ejecutiva Sur Liniers 1324, piso 4 Montevideo Uruguay Tel/Fax: (+598) 2901.2929* Email: contacto@agesic.gub.uy www.agesic.gub.uy Indice 1 Introducción...4 2 Casos

Más detalles

1. Creación del repositorio

1. Creación del repositorio FACULTADE DE INFORMÁTICA Departamento de Computación Tecnología de la Programación 2008-2009 Ingeniería Informática Práctica 1: Subversion Introducción El objetivo de esta práctica es aprender a manejar

Más detalles

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE

ORBERE. Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE ORBERE Memoria Técnica del Aplicativo de Gestión de la producción para ADIMDE Bilbao, 12 de diciembre de 2006 INDICE 1. METODOLOGÍA DE TRABAJO 2 1.1 Pautas para el Desarrollo 2 1.2 Entorno Tecnológico,

Más detalles

Java RMI. Sistemas Distribuidos Rodrigo Santamaría

Java RMI. Sistemas Distribuidos Rodrigo Santamaría + Java RMI Sistemas Distribuidos Rodrigo Santamaría RMI Java RMI 2 + RMI 3 Remote Method Invocation: middleware para que un objeto que se ejecuta en una JVM use métodos de otro objeto que se ejecuta en

Más detalles

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación.

Unidad II. - Las técnicas en las que se basó, las categorías de análisis o ejes centrales que permiten guiar el proceso de investigación. Unidad II Metodología de Solución de Problemas 2.1 Descripción del problema (enunciado). Este aspecto nos indica describir de manera objetiva la realidad del problema que se esta investigando. En la descripción

Más detalles

Ejercicios - Persistencia en Android: ficheros y SQLite

Ejercicios - Persistencia en Android: ficheros y SQLite Ejercicios - Persistencia en Android: ficheros y SQLite Índice 1 Uso de ficheros (0.5 puntos)...2 2 Persistencia con ficheros (0.5 puntos)...3 3 Base de datos: SQLiteOpenHelper (0.5 puntos)... 3 4 Base

Más detalles

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE

ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE ATLAS MANUAL DE USUARIO ARBOL ACCESIBLE Versión 1.3 Área de Aplicaciones Especiales y Arquitectura de Software Hoja de Control Título Documento de Referencia Responsable Manual de Usuario del NORMATIVA

Más detalles

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS

INSTALACIÓN A3ERP INTRODUCCIÓN CONSIDERACIONES GENERALES DE LA INSTALACIÓN PAQUETES DE INSTALACIÓN PREDEFINIDOS INSTALACIÓN A3ERP INTRODUCCIÓN La instalación de a3erp v9 ha sufrido una trasformación importante respecto a sus versiones anteriores. Cualquier instalación exige la existencia de un pc al que le asignaremos

Más detalles

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib

Manual de uso de la plataforma para monitores. CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib Manual de uso de la plataforma para monitores CENTRO DE APOYO TECNOLÓGICO A EMPRENDEDORES -bilib [Manual de uso de la plataforma para monitores] 1. Licencia Autor del documento: Centro de Apoyo Tecnológico

Más detalles

abacformacio@abacformacio.com 1

abacformacio@abacformacio.com 1 Cu Oracle 10gg Estudia el servidor de bases de datos Oracle 10g desde el punto de vista de un diseñador y programador de bases de datos, prestando atención a los objetos que puede crear, como tablas, consultas

Más detalles

Java Servlets. Luis Fernando Llana Díaz. 17 de abril de 2006. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid

Java Servlets. Luis Fernando Llana Díaz. 17 de abril de 2006. Departamento de Sistemas Informáticos y ProgramaciónUniversidad Complutense de Madrid Departamento de Sistemas Informáticos y Programación Universidad Complutense de Madrid de abril de 00 input, output En pascal input, output program holamundo (input, output); var nombre : String; begin

Más detalles

UNIVERSIDAD DE OVIEDO

UNIVERSIDAD DE OVIEDO UNIVERSIDAD DE OVIEDO ESCUELA POLITÉCNICA DE INGENIERÍA DE GIJÓN MÁSTER EN INGENIERÍA INFORMÁTICA TRABAJO FIN DE MÁSTER SPRING ROO ADD-ONS PARA PROTOTIPADO RÁPIDO JAVIER MENÉNDEZ ÁLVAREZ JULIO 2014 UNIVERSIDAD

Más detalles

En cualquier caso, tampoco es demasiado importante el significado de la "B", si es que lo tiene, lo interesante realmente es el algoritmo.

En cualquier caso, tampoco es demasiado importante el significado de la B, si es que lo tiene, lo interesante realmente es el algoritmo. Arboles-B Características Los árboles-b son árboles de búsqueda. La "B" probablemente se debe a que el algoritmo fue desarrollado por "Rudolf Bayer" y "Eduard M. McCreight", que trabajan para la empresa

Más detalles

Curso Java Web (JSP's/Servlets)

Curso Java Web (JSP's/Servlets) Curso Java Web (JSP's/Servlets) JSP's ("Java Server Pages") Composición Un JSP ("Java Server Page") es uno de los componentes más básicos empleados para aplicaciones de Servidor en Java. Su composición

Más detalles

Manual de referencia para la invocación de WebServices con Aduanas (SMS v3.0)

Manual de referencia para la invocación de WebServices con Aduanas (SMS v3.0) Valparaíso, 24 de abril de 2006 Manual de referencia para la invocación de WebServices con Aduanas (SMS v3.0) Introducción El sistema SMS (Sistema de Mensajería por SOAP) fue diseñado con el fin de servir

Más detalles

Tema 6: Comparativa CORBA/Servicios Web

Tema 6: Comparativa CORBA/Servicios Web Tema 6: Comparativa CORBA/Servicios Web Introducción Para establecer una comparativa, es preciso tener en cuenta CORBA se introdujo en 1991 y Servicios Web en el 2000 CORBA es una solución más madura y

Más detalles

Introducción a JAX-WS Web Services

Introducción a JAX-WS Web Services INSTITUTO POLITECNICO NACIONAL ESCUELA SUPERIOR DE CÓMPUTO ALUMNO: SANLUIS CASTILLO JOSE DAVID PROFESOR: CIFUENTES ALVAREZ ALEJANDRO SIGFRIDO MATERIA: WEB APPLICATION DEVEPLOMENT Introducción a JAX-WS

Más detalles

SERVLETS. Aplicaciones Distribuidas

SERVLETS. Aplicaciones Distribuidas SERVLETS Aplicaciones Distribuidas Contenido Definición. Framework Servlet. Ciclo de vida. Ejemplo. Procesamiento Petición. Generación de la Respuesta. Sesiones. Cookies. Colaboración entre servlets. Otros

Más detalles

Gestión Documental PREPARACION DEL ENTORNO DE DESARROLLO

Gestión Documental PREPARACION DEL ENTORNO DE DESARROLLO Gestión Documental PREPARACION DEL ENTORNO DE DESARROLLO Versión 1.0 Área de Integración y Arquitectura de Aplicaciones 1 de 10 Hoja de Control Título Documento de Referencia Responsable PREPARACION DEL

Más detalles

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA

Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Propuesta de Portal de la Red de Laboratorios Virtuales y Remotos de CEA Documento de trabajo elaborado para la Red Temática DocenWeb: Red Temática de Docencia en Control mediante Web (DPI2002-11505-E)

Más detalles

Introducción - por qué usarlas?(1)

Introducción - por qué usarlas?(1) Excepciones en Java Introducción - por qué usarlas?(1) En el mundo de la programación hay algo que siempre ocurre: los errores en los programas. Pero qué sucede realmente después de que ha ocurrido el

Más detalles

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios

INTRODUCCION. Tema: Protocolo de la Capa de aplicación. FTP HTTP. Autor: Julio Cesar Morejon Rios INTRODUCCION Tema: Protocolo de la Capa de aplicación. FTP HTTP Autor: Julio Cesar Morejon Rios Qué es FTP? FTP (File Transfer Protocol) es un protocolo de transferencia de archivos entre sistemas conectados

Más detalles

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la

La interoperabilidad se consigue mediante la adopción de estándares abiertos. Las organizaciones OASIS y W3C son los comités responsables de la Servicios web Introducción Un servicio web es un conjunto de protocolos y estándares que sirven para intercambiar datos entre aplicaciones. Distintas aplicaciones de software desarrolladas en lenguajes

Más detalles

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta.

Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO. Raúl Gutiérrez Sánchez LAEFF - INTA raul@laeff.inta. Primera Escuela de la Red Temática SVO. Madrid, 27-28 Noviembre, 2006 JAVA BÁSICO LAEFF - INTA raul@laeff.inta.es Qué es Java? Java es un lenguaje de programación orientado a objetos desarrollado por Sun

Más detalles