martes, 26 de febrero de 2008

SOA

SOA - Arquitectura Orientada a Servicios

En todo el mundo se habla de SOA... pero qué es? para que me sirve? cómo puedo adaptarme a SOA?

Estas son las preguntas que todos en algún momento nos hemos planteado al comenzar a conocer SOA, mi idea es en esta ocasión intentar aclarar un poco de que se trata todo ésto.

Si bien SOA resurgió con el auge de los Web Services, es una filosofía que existía anteriormente basada en corba y colas de mensajes. La arquitectura orientada a servicios, implica un conjunto de servicios interactuando entre ellos, que permiten construir aplicaciones de una manera rápida y cumpliendo siempre con los principios de la Orientación a Servicios.

Existen 4 elementos fundamentales en una arquitectura SOA, la operación, el servicio, el mensaje y el proceso de negocio. La más atómica de ellos es la operación, por ejemplo, verificar si un cliente tiene deuda, luego existe el servicio, el cual engloba un conjunto de operaciones que se ofrecen a los usuarios, por ejemplo crear un cliente que implique invocar operaciones como la verificación de deuda y el alta del cliente en una base de datos, luego tenemos el concepto de mensaje, los cuales son los encargados de encapsular y transportar los datos de entrada y salida de los servicios, y por último se encuentran los procesos de negocio, los cuales son un conjunto de operaciones ejecutadas en una determinada secuencia, intercambiando mensajes entre ellas, con el objetivo de realizar una determinada tarea.

Una aplicación SOA se definiría como un conjunto de operaciones de negocio, compuestas por muchos servicios que realizan operaciones, que son invocados en un determinado órden, y que intercambian mensajes entre ellos.
Una tecnología SOA tradicional es la que se basa en el uso de Web Services: ésto significa utilizar SOAP como lenguaje de intercambio, WSDL como lenguaje para la descripción de los servicios y UDDI para la publicación o registro de los mismos.

Los principios de una arquitectura SOA (si bien no son un standard) serían estos:

- Los servicios deben ser Reusables.
- Los servicios deben proporcionar un contrato formal (WSDL).
- Los servicios deben tener bajo acoplamiento. (deben ser lo más independientes unos de otros).
- Los servicios deben permitir la composición de servicios de más alto nivel.
- Los servicios deben ser autónomos, es decir tener su propio entorno de ejecución.
- Los servicios no deben mantener un estado.
- Los servicios deben poder ser descubiertos (UDDI).

martes, 8 de enero de 2008

AJAX de forma simple

Es imposible negar la necesidad de utilizar AJAX para brindar mayor usabilidad a las aplicaciones, y es justamente AJAX lo que necesitamos para obtener o enviar datos al servidor sin necesitad de refrescar la pantalla.

Es muy simple, primero que nada se debe obtener una instancia del objeto XMLHttpRequest, con el cual se realizan las solicitudes al servidor, a continuación incluyo un fragmento de código que permite obtener esta instancia independientemente del browser que utilize el cliente:


if (window.XMLHttpRequest) {
// browser has native support for XMLHttpRequest object
http_request = new XMLHttpRequest();
} else if (window.ActiveXObject) {
// try XMLHTTP ActiveX (Internet Explorer) version
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e1) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e2) {
http_request = null;
}
}
}

Una vez que tenemos el objeto XMLHttpRequest, ya podemos hacer la solicitud al servidor de la siguiente forma:

http_request.open('POST', "myServlet.do?action=getMoreData", false);
http_request.setRequestHeader("content-type","application/x-www-form-urlencoded");
http_request.send("parametro1=valor1¶metro2=valor2");

En la primer línea indicamos hacia donde hacemos el submit, con qué metodo, en este caso, POST y si es sincrónico o no.
En la segunda linea, se indica el tipo de contenido que enviaremos.
Y por último datos a pasar por el request.

Por último, solo se necesita procesar el resultado:

if (http_request.readyState == 4) {
if (http_request.status == 200) {
if(http_request.responseText != "ERROR"){
//Aqui se debe incluir el código para procesar el resultado
} else {
//OCURRIO UN ERROR
alert(http_request.responseText);
}
} else {
alert("Could not contact the server.");
}
}

Espero les sea útil.