3.3 Caso de estudio: diseño e
|
|
- Dolores Saavedra Santos
- hace 8 años
- Vistas:
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 Í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 detallesenví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 detallesRequisitos. 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 detallesServlets. 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 detallesTema 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 detallesUSANDO 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 detallesCurso 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 detallesModelo 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 detallesJAVA 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 detallesPrá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 detallesDesarrollo 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 detallesUn 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 detallesSistemas 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 detalles3.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 detallesWeb 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 detallesEjemplos 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 detallesFigura 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 detallesNIVEL 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 detallesJ2EE 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 detallesCapitulo 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 detallesEstructuras 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 detallesPrá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 detallesGUÍ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 detallesCOPIAS 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 detallesUso 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 detallesApp 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
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 detallesIntegració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 detallesGLOSARIO. 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 detallesOficina 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 detallesServidores 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 detallesEXAMEN 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 detalles5.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 detallesATLAS 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 detallesSesió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 detallesDossier 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 detallesConfiguració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 detallesATLAS 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 detallesAPLICACIONES 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 detallesIntroducció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 detalles19. 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 detallesIntroducció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 detallesPatrones 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 detallesFramework 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 detallesOracle 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 detallesSERVIDOR 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 detallesLlamada 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 detallesEXCEPCIONES 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 detallesMi 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 detallesManual 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 detallesCREAR 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 detallesSIEWEB. 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 Software de diagnóstico de la seguridad de la información y autoimplantación
Más detallesGUÍ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 detalles2.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 detallesSOLUCION 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 detallesCapí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 detallesInstalar 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 detallesTutorial: 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 detallesArquitectura 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 detallesManual 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 detallesPrá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 detallesINTRODUCCIÓ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 detallesIngenierí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 detallesElementos 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 detalles2.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 detallesIntroducció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 detallesHTTP, 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 detallesCapas 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 detallesTema 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 detallesSistemas 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 detallesINSTALACIÓ 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 detallesRESUMEN 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 detallesProgramació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 detallesIntroducció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 detallesJava 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 detallesDocumentació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 detalles1. 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 detallesORBERE. 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 detallesJava 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 detallesUnidad 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 detallesEjercicios - 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 detallesATLAS 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 detallesINSTALACIÓ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 detallesManual 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 detallesabacformacio@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 detallesJava 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 detallesUNIVERSIDAD 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 detallesEn 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 detallesCurso 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 detallesManual 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 detallesTema 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 detallesIntroducció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 detallesSERVLETS. 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 detallesGestió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 detallesPropuesta 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 detallesIntroducció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 detallesINTRODUCCION. 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 detallesLa 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 detallesPrimera 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