<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Espacio SOA &#187; Patrones de Uso</title>
	<atom:link href="http://www.espaciosoa.net/category/patrones-de-uso/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.espaciosoa.net</link>
	<description>Un Espacio para el Mundo SOA y BPM</description>
	<lastBuildDate>Tue, 26 May 2009 11:29:40 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>Crear una Taxonomía de Servicios para SOA</title>
		<link>http://www.espaciosoa.net/2008/11/07/crear-una-taxonomia-de-servicios-para-soa/</link>
		<comments>http://www.espaciosoa.net/2008/11/07/crear-una-taxonomia-de-servicios-para-soa/#comments</comments>
		<pubDate>Thu, 06 Nov 2008 23:31:57 +0000</pubDate>
		<dc:creator>Kike</dc:creator>
				<category><![CDATA[Gobernabilidad]]></category>
		<category><![CDATA[Patrones de Uso]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.espaciosoa.net/?p=49</guid>
		<description><![CDATA[Interesante artículo de Mark Richards en SOA World Magazine acerca de como contruir una jerarquía taxonómica de servicios para SOA.
Según cuenta, lo principal es mantener una taxonomía simple basada en 4 tipos de servicios básicos que solo debería extenderse según las necesidades de cada empresa y siempre de una manera muy justificada y como medio [...]]]></description>
			<content:encoded><![CDATA[<p>Interesante <a target="_blank" href="http://soa.sys-con.com/node/738704">artículo de Mark Richards en SOA World Magazine</a> acerca de como contruir una jerarquía taxonómica de servicios para SOA.</p>
<p>Según cuenta, lo principal es mantener una taxonomía simple basada en 4 tipos de servicios básicos que solo debería extenderse según las necesidades de cada empresa y siempre de una manera muy justificada y como medio para asegurar el entendimiento de todas las partes (negocio, técnicos, etc&#8230;).</p>
<p>Los tipos básicos son:</p>
<p><strong>Servicios de Negocio :</strong> Servicios core de la empresa y del negocio, identificados por usuarios normalmente no técnicos y que cuando se coreografían representan casos de uso o escenarios de usuario. Se implementan con un lenguaje de definición de contrato (WSDL normalmente) y se nombran por alguno de los típicos verbos CRUD (Create, Read, Update y Delete). Un ejemplo sería, <em>&#8220;recuperarCliente&#8221;</em>.</p>
<p><strong>Servicios de Empresa :</strong> Son servicios que implementan servicios de negocio (relaciones 1 a N o N a N). Identificados normalmente por Arquitectos IT son producto de orquestación de servicios. Además, para la transformación de los modelos de datos entre los servicios de empresa y los de negocio, se utilizan transformadores (como XSLT) normalmente en un bus de servicios. Un ejemplo sería <em>&#8220;calcularCreditoBancario&#8221;</em>.</p>
<p><strong>Servicios de Aplicación :</strong> Servicios dentro del contexto de las aplicaciones (y que por tanto no se comparten al mismo nivel que los servicios de empresa o de negocio), que representan funciones específicas como validaciones o transferencias de datos. Son identificados por los desarrolladores de las aplicaciones. Un ejemplo sería <em>&#8220;añadirDireccion&#8221;</em>.</p>
<p><strong>Servicios de Infraestructura :</strong> Servicios que dan soporte a nivel de toda la empresa, tales como logging, auditoría, seguridad&#8230; Normalmente son identificados por los desarrolladores de las aplicaciones o equipos de soporte a infraestructuras. Un ejemplo sería <em>&#8220;escribeLog&#8221;</em>.</p>
<p>Podeis leer todo el <a target="_blank" href="http://soa.sys-con.com/node/738704">artículo aquí</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.espaciosoa.net/2008/11/07/crear-una-taxonomia-de-servicios-para-soa/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>La Capa de Datos en SOA</title>
		<link>http://www.espaciosoa.net/2008/08/11/la-capa-de-datos-en-soa/</link>
		<comments>http://www.espaciosoa.net/2008/08/11/la-capa-de-datos-en-soa/#comments</comments>
		<pubDate>Mon, 11 Aug 2008 15:30:52 +0000</pubDate>
		<dc:creator>Kike</dc:creator>
				<category><![CDATA[Patrones de Uso]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.espaciosoa.net/?p=47</guid>
		<description><![CDATA[Durante la evolución de las arquitecturas empresariales, la diversidad de sistemas, aplicaciones, bases de datos, etc&#8230; hacen que la disparidad y cantidad de datos que pueden llegar a manejarse sean precisamente todo lo contrario&#8230; inmanejables!!! (por no decir duplicados, inconsistentes, desconocidos&#8230;).
Generalmente cuando construimos una Arquitectura SOA, es importante crear una capa de datos que sirva [...]]]></description>
			<content:encoded><![CDATA[<p>Durante la evolución de las arquitecturas empresariales, la diversidad de sistemas, aplicaciones, bases de datos, etc&#8230; hacen que la disparidad y cantidad de datos que pueden llegar a manejarse sean precisamente todo lo contrario&#8230; inmanejables!!! (por no decir duplicados, inconsistentes, desconocidos&#8230;).<br />
Generalmente cuando construimos una Arquitectura SOA, es importante crear una capa de datos que sirva de base para la misma y evite en la medida de lo posible todas esas inconsistencias (a veces se le denomina Modelo Común de Datos o CDM).</p>
<p>A la hora de diseñar servicios web que luego sirvan como base para crear orquestación de los mismos (y así generar valor añadido a las empresas con los procesos de negocio), para que sean fácilmente reorganizados o reorquestados según surjan las necesidades (en este punto, es donde SOA muestra su potencial); es necesario que tengan una base de datos totalmente orientados a negocio. Así, cuando hablemos de datos a este nivel, deberíamos hablar de conceptos totalmente relacionados con el negocio de la empresa, a un nivel lógico y funcional (tipos de datos como &#8220;cliente&#8221;, &#8220;contrato&#8221; o &#8220;servicio&#8221;).</p>
<p>La abstracción con una capa de datos permite ocultar la complejidad de los mismos, permitiendo una estructura totalmente organizada a nivel del middleware. El resultado de esto, es que una aplicación o servicio puede pedir datos a nivel lógico y de una manera totalmente organizada sin preocuparse por la capa más física.</p>
<p>Normalmente esta capa de datos, se construye con XML, pues es un estándar muy fácil de utilizar y que permite generar datos complejos (a la granularidad deseada) independientes de la capa física.<br />
Para ello, se utilizan esquemas de datos XML (conocido como XSD).<br />
Existen ya estructuras de datos XML a nivel de negocio totalmente &#8220;estandarizadas&#8221; por distintas empresas (ejemplos como ACORD para seguros, HR-XML para Recursos Humanos, etc&#8230;), aunque la definición de una estructura totalmente orientada al negocio de una empresa por la gente que tiene el conocimiento de la misma suele ser la mejor opción (a partir de una estructura de datos particular, si fuera necesario, siempre existen maneras de transformar los datos a otras estructuras sean más &#8220;estándar de facto&#8221; o no que la propia de cada uno).</p>
<p>Por esto generalmente la creación de una capa de datos en la creación de una Arquitectura SOA es un beneficio a la misma, ya que en caso de ser necesario reordenar los datos a nivel físico (cosas como por ejemplo, la restructuración de una base de datos) no debería afectarle a nivel lógico y por tanto tampoco a las aplicaciones y servicios construidos por encima.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.espaciosoa.net/2008/08/11/la-capa-de-datos-en-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Probando SOA</title>
		<link>http://www.espaciosoa.net/2008/04/01/probando-soa/</link>
		<comments>http://www.espaciosoa.net/2008/04/01/probando-soa/#comments</comments>
		<pubDate>Tue, 01 Apr 2008 15:25:47 +0000</pubDate>
		<dc:creator>Kike</dc:creator>
				<category><![CDATA[Patrones de Uso]]></category>
		<category><![CDATA[SOA]]></category>
		<category><![CDATA[Web Services]]></category>

		<guid isPermaLink="false">http://www.espaciosoa.net/2008/04/01/probando-soa/</guid>
		<description><![CDATA[Vale, estamos en ello; tenemos entre manos el proyecto SOA del siglo y es terriblemente importante que salga adelante y lo haga bien (con lo que cuesta todo como para no hacerlo) 
Y es en este punto cuando nos planteamos como realizar pruebas correctas de la arquitectura para comprobar que realmente estamos construyendo una arquitectura [...]]]></description>
			<content:encoded><![CDATA[<p>Vale, estamos en ello; tenemos entre manos el proyecto SOA del siglo y es terriblemente importante que salga adelante y lo haga bien (con lo que cuesta todo como para no hacerlo) <img alt="" src="/wp-content/plugins/deans_fckeditor/fckeditor/editor/images/smiley/msn/regular_smile.gif" /></p>
<p>Y es en este punto cuando nos planteamos como realizar pruebas correctas de la arquitectura para comprobar que realmente estamos construyendo una arquitectura orientada a servicios y no una simple aplicaci&oacute;n muy cara.</p>
<p>La verdad, cuando hablamos de testear una Arquitectura SOA, tenemos que plantearnos ciertas cuestiones y elegir las herramientas adecuadas; ya que difiere bastante de la forma tradicional de probar aplicaciones normales.</p>
<p>Es importante tener en mente la arquitectura, sus partes, sus dominios; e intentar dividir la misma en partes peque&ntilde;as que sean m&aacute;s faciles de probar; para posteriormente ir probando la integraci&oacute;n de las mismas hasta llegar a un punto de arquitectura m&aacute;s o menos global.</p>
<p>Por ello, ante todo, tenemos que tener en mente unos objetivos a conseguir durante las pruebas de nuestra arquitectura:</p>
<ol>
<li>Los servicios son y deben ser siempre reutilizables. Es una de las m&aacute;ximas de SOA y si no conseguimos eso, posiblemente la arquitectura estar&aacute; abocada al fracaso.</li>
<li>Agilidad en los cambios: los procesos y la orquestaci&oacute;n de servicios buscan la facilidad de composici&oacute;n de los mismos. Un cambio deber&iacute;a ser r&aacute;pido y f&aacute;cil de hacer si la capa base de servicios es la correcta y funciona correctamente.</li>
<li>Monitorizaci&oacute;n : ey! eso que llaman BAM. Es importante tener siempre visible nuestra arquitectura, en tiempo real; para detectar errores, cuellos de botella y otros factores que indiquen la necesidad de un cambio para la optimizaci&oacute;n de la misma.</li>
<li>Interoperabilidad : SOA habla de reutilizaci&oacute;n y como tal nuestra arquitectura al nivel m&aacute;s alto posible deber&iacute;a ser as&iacute;. No solo se trata de que nuestros servicios sean reutilizables en referencia a nuestra arquitectura; sino que incluso lo sean de cara al exterior. Las posibilidades de reutilizaci&oacute;n entre empresas debe ser importante: por ello, cuanto m&aacute;s est&aacute;ndar, mejor que mejor.</li>
</ol>
<p>
Testear una arquitectura SOA pasa por tener en cuenta los dominios de la misma que debemos asegurar en fiabilidad y consistencia; esto es, que debemos probar:</p>
<ol>
<li><span style="font-weight: bold;">Pruebas a nivel de servicio:</span> Son la base de SOA y por tanto la base de toda la arquitectura. Probarlos a nivel de su funcionalidad es importante; pero m&aacute;s importante es probarlos asegurandonos su reutilizaci&oacute;n (incluso habr&aacute; ya servicios como composici&oacute;n de otros). <br />
    Es importante, tener en cuenta que los servicios no son aplicaciones en s&iacute; mismas y por tanto deben ser probados atendiendo a ese factor (son independientes, aislados, sin estados, etc&#8230;). La mejor manera para probarlos es definir los casos de prueba de los servicios y ejecutarlos para comprobar su correcto funcionamiento.<br />
    Adem&aacute;s, hay que tener en cuenta que los servicios son aut&oacute;nomos (sin dependencias de otros servicios) y con una granularidad adecuada (no se trata de que sean ni muy at&oacute;micos ni muy complejos; las necesidades determinar&aacute;n en cada caso como deben ser; pero es importante que tengan un sentido a nivel funcional para la empresa).
    </li>
<li><span style="font-weight: bold;">Pruebas a nivel de seguridad:</span> intentar probar los servicios con una capa de seguridad a&ntilde;adida desde el principio puede ser m&aacute;s complejo de lo que parece. Es mejor probarlos de manera simple y aislados y luego probar la capa de seguridad que tenga nuestra arquitectura a&ntilde;adida a los servicios.
    </li>
<li><span style="font-weight: bold;">Pruebas de orquestaci&oacute;n:</span> como estamos hablando de composici&oacute;n; en alg&uacute;n momento tendremos orquestaci&oacute;n de servicios y este dominio deber&iacute;a ser probado a partir de unos servicios fiables y seguros. En este momento estaremos hablando de pruebas que determinan la correcta comunicaci&oacute;n entre servicios; el trabajo de manera conjunta. <br />
    Estaremos hablando tambi&eacute;n de procesos de negocio (<a href="http://www.espaciosoa.net/category/bpm/">pruebas a nivel BPM</a>) por lo que debemos verlo como una capa superior a probar.
    </li>
<li><span style="font-weight: bold;">Pruebas de gobernabilidad:</span> la <a href="http://www.espaciosoa.net/category/gobernabilidad/">gobernabilidad de SOA</a> es algo muy importante y en buena medida puede ser determinante para la consecuci&oacute;n satisfactoria de nuestra arquitectura. Es importante probar las pol&iacute;ticas de las distintas capas que se hayan definido, los ciclos de vida y cualquier concepto de gobernabilidad que se haya introducido y deba ser probado.
    </li>
<li><span style="font-weight: bold;">Pruebas de integraci&oacute;n:</span> bueno, m&aacute;s o menos tenemos todo probado; solo quedar&iacute;a verlo en producci&oacute;n sin ning&uacute;n error. <img alt="" src="/wp-content/plugins/deans_fckeditor/fckeditor/editor/images/smiley/msn/shades_smile.gif" /> <br />
    Antes de eso es importante hacer pruebas de integraci&oacute;n de nuestra arquitectura. El objetivo de estas pruebas es principalmente, determinar el correcto funcionamiento de las interfaces de comunicaci&oacute;n de los distintos componentes.</li>
</ol>
<p>
Aunque no lo parezca, probar una arquitectura SOA definiendo diversos niveles y dominios de aplicaci&oacute;n es realmente importante; ya que sino podemos encontrarnos con desagradables sorpresas.</p>
<p>Por ello, es recomendable que esta fase de pruebas (el Plan de Pruebas) este siempre presente en la planificaci&oacute;n de cualquier arquitectura de este tipo.</p>
<p><strong>Articulos Interesantes:</strong></p>
<p><a href="http://www.theserverside.net/news/thread.tss?thread_id=47297">What is SOA test?</a><br />
<a href="http://blogs.ittoolbox.com/eai/business/archives/soa-testing-8376">SOA Testing</a><br />
<a href="http://soa.sys-con.com/read/417750_2.htm">SOA World &#8211; Approaching SOA Testing</a><br />
<a href="http://www.theserverside.com/tt/articles/article.tss?l=ReadytoTest">Ready to Test SOA, Web Services, ESBs and BI?</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.espaciosoa.net/2008/04/01/probando-soa/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
		</item>
		<item>
		<title>Patrones de Mensajería SOA</title>
		<link>http://www.espaciosoa.net/2007/10/30/patrones-de-mensajeria-soa/</link>
		<comments>http://www.espaciosoa.net/2007/10/30/patrones-de-mensajeria-soa/#comments</comments>
		<pubDate>Tue, 30 Oct 2007 20:18:40 +0000</pubDate>
		<dc:creator>Kike</dc:creator>
				<category><![CDATA[ESB]]></category>
		<category><![CDATA[Patrones de Uso]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.espaciosoa.net/2007/10/30/patrones-de-mensajeria-soa/</guid>
		<description><![CDATA[Cuando construimos una Arquitectura SOA, lo que al final estamos definiendo es la forma de intercambio de mensajes entre las distintas aplicaciones o sistemas de un entorno distribuido. Por ejemplo, cuando invocamos un Servicio Web por medio de SOAP/HTTP, lo que estamos dando lugar es a un intercambio de mensajes entre el cliente y el [...]]]></description>
			<content:encoded><![CDATA[<p>Cuando construimos una Arquitectura SOA, lo que al final estamos definiendo es la forma de intercambio de mensajes entre las distintas aplicaciones o sistemas de un entorno distribuido. Por ejemplo, cuando invocamos un Servicio Web por medio de SOAP/HTTP, lo que estamos dando lugar es a un intercambio de mensajes entre el cliente y el proveedor del servicio basado (normalmente) en un patr&oacute;n de mensajes Petici&oacute;n / Respuesta (Request / Response).</p>
<p>Dependiendo de las necesidades que tengamos de comunicaci&oacute;n (sincron&iacute;a vs. asincron&iacute;a; comunicaci&oacute;n 1 a 1, 1 a N o N a N; mensajes erroneos o correctos; mensajer&iacute;a por eventos, etc&#8230;) vamos a definir la forma de intercambio de los mensajes entre las distintas aplicaciones / sistemas de nuestra arquitectura.</p>
<p><strong>Petici&oacute;n / Respuesta (Request / Response)</strong></p>
<p>Es la m&aacute;s utilizadas de todas las formas de intercambios de mensajes (tambi&eacute;n llamada Request / Reply). B&aacute;sicamente, consiste en la petici&oacute;n por parte de un cliente a un proveedor de un servicio y la espera de la respuesta en un tiempo determinado. <br />
La principal caracter&iacute;stica de este patr&oacute;n de mensajer&iacute;a es que resulta s&iacute;ncrono y bloqueante, por lo que durante el tiempo de ejecuci&oacute;n del servicio, el cliente queda bloqueado a la espera. De hecho, es &uacute;til el manejo de timeouts para manejar la situaci&oacute;n en que no haya respuesta por parte del servidor.<br />
Este tipo de mensajer&iacute;a es el indicado para la petici&oacute;n de ejecuci&oacute;n de servicios que suelen ser r&aacute;pidos o cuando del lado del cliente no se puede seguir la ejecuci&oacute;n por necesitar obligatoriamente la respuesta del servidor.<br />
Desde el punto de vista del cliente, es una llamada de tipo RPC (Remote Procedure Call), ya que es bloqueante hasta la llegada de la respuesta.<br />
El protocolo de comunicaci&oacute;n m&aacute;s utilizado para este tipo de mensajer&iacute;a es HTTP.</p>
<p><strong>S&oacute;lo Petici&oacute;n (One-Way)</strong></p>
<p>Es un tipo de mensajer&iacute;a as&iacute;ncrono y no bloqueante. Suele utilizarse cuando el cliente no necesita la respuesta inmediata por parte del servidor y puede seguir ejecut&aacute;ndose. En estos casos puede utilizarse tanto HTTP (sin respuesta) como JMS (quiz&aacute; m&aacute;s apropiado) para la implementaci&oacute;n de este tipo de mensajer&iacute;a (tambi&eacute;n pueden utilizarse otros protocolos como FTP, SMTP, etc&#8230;)<br />
En este punto, es importante diferenciar entre Petici&oacute;n / Respuesta y One-way en ambos sentidos. <br />
En el primero de los casos, implica un bloqueo por parte del cliente a la espera de la respuesta del servidor. <br />
En el segundo de los casos, la Petici&oacute;n / Respuesta se implementa como dos llamadas one-way as&iacute;ncronas, por lo que durante el tiempo de ejecuci&oacute;n del servicio, el cliente no queda bloqueado y puede ejecutar otra l&oacute;gica diferente. De hecho, esta segunda forma requiere que el cliente sea a la vez consumidor y proveedor (ya que necesita implementar alg&uacute;na forma de binding para ser invocado por parte del servidor en la respuesta). Esta opci&oacute;n es bastante &uacute;til cuando se realiza una comunicaci&oacute;n con un servidor del que se necesita la respuesta, pero dada la duraci&oacute;n de ejecuci&oacute;n del mismo, el cliente puede aprovechar para realizar otras tareas programadas. El protocolo de comunicaci&oacute;n m&aacute;s utilizado para este tipo de mensajer&iacute;a es JMS por sus caracter&iacute;sticas as&iacute;ncronas.</p>
<p><strong>Request / Callback</strong></p>
<p>Es un tipo de mensajer&iacute;a request / response as&iacute;ncrona. Normalmente, el cliente puede realizar una invocaci&oacute;n al proveedor del servicio y seguir ejecutando otro c&oacute;digo. La diferencia con la petici&oacute;n one-way en ambos sentidos, radica en que en la petici&oacute;n, se pasa la informaci&oacute;n del callback o manejador de la respuesta. Es decir, a nivel del cliente existe una parte que es la encargada de realizar la petici&oacute;n al servicio y otra parte que es la encargada de manejar la respuesta. <br />
La principal complejidad de este patr&oacute;n de mensajer&iacute;a consiste en que la funci&oacute;n de callback debe ser capaz de manejar el contexto o la informaci&oacute;n de instancia para correlacionar los mensajes de respuesta correctamente con los de la petici&oacute;n.</p>
<p><strong>Publicaci&oacute;n / Suscripci&oacute;n (Publish / Subscribe)</strong></p>
<p>Cuando se realiza una petici&oacute;n que no necesita de una respuesta, suele utilizarse el patr&oacute;n de mensajer&iacute;a conocido como publicaci&oacute;n / suscripci&oacute;n. A diferencia del patr&oacute;n one-way, con Publish / Subscribe se permite la comunicaci&oacute;n 1 a N entre el cliente y los distintos consumidores de los mensajes (que se &quot;suscriben&quot; a la publicaci&oacute;n del mensaje en cuesti&oacute;n).<br />
Este tipo de mensajer&iacute;a suelen ser implementados por medio de protocolos JMS, que permiten la asincron&iacute;a y la persistencia de mensajes hasta su procesamiento.<br />
Un ejemplo de Publicaci&oacute;n / Suscripci&oacute;n ser&iacute;a la notificaci&oacute;n que hace un sistema a otros N sistemas de un cambio en el primero (con un modelo Request / Response o One-Way implicar&iacute;a notificar 1 a 1 a los sistemas implicados; mientras que con el patr&oacute;n Publish / Subscribe se puede realizar en un solo paso).</p>
<p><strong>Mensajes de Error (Fault Messages)</strong></p>
<p>Normalmente, en los casos de comunicaci&oacute;n que hemos descrito anteriormente, admitimos que los mensajes enviados son correctos y que contienen la informaci&oacute;n necesaria para su ejecuci&oacute;n satisfactoria. <br />
No obstante, a veces, es necesario definir como se realiza el intercambio de mensajes para resultados incorrectos o no esperados. <br />
En el caso de mensajer&iacute;a Petici&oacute;n / Respuesta, la informaci&oacute;n que devuelve el proveedor del servicio puede ser la de un mensaje de error. En estos casos, la forma en que est&aacute; definido el mensaje es dependiente del protocolo o el formato a utilizar. Por ejemplo, si utilizamos SOAP como medio de mensajer&iacute;a, se puede definir (aparte del formato de mensaje de la respuesta correcta) un formato para SOAP-Fault como mensajer&iacute;a para casos de excepciones.<br />
En el caso de mensajer&iacute;a as&iacute;ncrona, la respuesta de un mensaje con excepci&oacute;n puede resultar m&aacute;s complicada, ya que el env&iacute;o de una petici&oacute;n no implica la llegada de una respuesta. Por ello, se suelen utilizar colas JMS como protocolo de comunicaci&oacute;n as&iacute;ncrona, ya que nos permite implementar medios de asegurar la recepci&oacute;n/envio de los mensajes por medio de reintentos y persistencia de los mismos en las colas.</p>
<p><strong>EDA (Event-Driven Architecture)</strong></p>
<p>La mensajer&iacute;a por eventos, es un tipo de mensajer&iacute;a que se ha puesto de moda con lo que ha venido a llamarse EDA o la evoluci&oacute;n de SOA. Consiste basicamente en &quot;automatizar&quot; la generaci&oacute;n de mensajes y el env&iacute;o de los mismos por medio de eventos (que ocurren cuando se produce un cambio en el sistema generador de los mismos, por un timer que se ejecuta cada cierto tiempo, etc&#8230;).<br />
Normalmente, un proceso de negocio orquesta la comunicaci&oacute;n con los distintos sistemas/aplicaciones implicadas definiendo el orden en que se ejecutan y como se produce la mensajer&iacute;a o comunicaci&oacute;n con los mismos. <br />
Con EDA, esa orquestaci&oacute;n queda asumida por los propios procesos de cada sistema o aplicaci&oacute;n. Es decir, los servicios de negocio que permiten la integraci&oacute;n con los sistemas finales tienen un tiempo de ejecuci&oacute;n y adem&aacute;s, definen cual es el siguiente servicio a ejecutarse en esa &quot;cadena de eventos&quot; que conforman los procesos en una arquitectura EDA.</p>
<p><strong>Links interesantes:</strong></p>
<p><a target="_blank" href="http://www.w3.org/TR/2003/REC-soap12-part1-20030624/">SOAP Version 1.2 Part 1: Messaging Framework</a><br />
<a target="_blank" href="http://www.w3.org/2002/ws/cg/2/07/meps.html">Web Services Message Exchange Patterns</a><a target="_blank" href="http://en.wikipedia.org/wiki/Message_Exchange_Pattern"><br />
Message Exchange Pattern Wikipedia Definition</a><br />
<a target="_blank" href="http://www.serviceoriented.org/message_exchange_pattern.html">Message Exchange Pattern</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.espaciosoa.net/2007/10/30/patrones-de-mensajeria-soa/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Usos Prácticos de un ESB</title>
		<link>http://www.espaciosoa.net/2007/10/18/usos-practicos-de-un-esb/</link>
		<comments>http://www.espaciosoa.net/2007/10/18/usos-practicos-de-un-esb/#comments</comments>
		<pubDate>Wed, 17 Oct 2007 22:17:04 +0000</pubDate>
		<dc:creator>Kike</dc:creator>
				<category><![CDATA[ESB]]></category>
		<category><![CDATA[Patrones de Uso]]></category>
		<category><![CDATA[SOA]]></category>

		<guid isPermaLink="false">http://www.espaciosoa.net/2007/10/18/usos-practicos-de-un-esb/</guid>
		<description><![CDATA[Con este primer post, pretendo empezar una colecci&#243;n de art&#237;culos con patrones de uso para distintas herramientas, tecnolog&#237;as y est&#225;ndares relacionadas con el mundo SOA y BPM. Espero que sean de vuestro inter&#233;s y todos podamos aprender un poco m&#225;s; por ello agradecer&#237;a cualquier participaci&#243;n con experiencias reales, opiniones, ideas y cualquier comentario que permita [...]]]></description>
			<content:encoded><![CDATA[<p>Con este primer post, pretendo empezar una colecci&oacute;n de art&iacute;culos con patrones de uso para distintas herramientas, tecnolog&iacute;as y est&aacute;ndares relacionadas con el mundo SOA y BPM. Espero que sean de vuestro inter&eacute;s y todos podamos aprender un poco m&aacute;s; por ello agradecer&iacute;a cualquier participaci&oacute;n con experiencias reales, opiniones, ideas y cualquier comentario que permita enriquecer dichos posts.</p>
<p>El primero de estos art&iacute;culos va a tratar sobre el ESB, c&oacute;mo usarlo, sus aplicaciones reales m&aacute;s comunes, etc&#8230;</p>
<p>Comenzemos pues, definiendo el ESB como un elemento de integraci&oacute;n que combina mensajer&iacute;a, servicios web, transformaci&oacute;n de datos, enrutaci&oacute;n, pol&iacute;ticas de seguridad, etc&#8230; y que permite la interacci&oacute;n entre diversas aplicaciones o sistemas de una Architectura Empresarial.<br />
El ESB se ha convertido en una de las partes m&aacute;s importantes de una Arquitectura SOA ya que se presenta como el &quot;pegamento&quot; multiprotocolo y multiprop&oacute;sito para dicha arquitectura.</p>
<p>Las aplicaciones y caracter&iacute;sticas m&aacute;s comunes del ESB son las siguientes:</p>
<p><strong>Enrutaci&oacute;n basada en contenido:</strong></p>
<p>Generalmente, el ESB cumple un cometido de enrutaci&oacute;n entre sistemas o aplicaciones. Esa enrutaci&oacute;n o decisi&oacute;n del punto final (endpoint) que debe invocarse se puede hacer en funci&oacute;n del contenido del mensaje. Para ello, el mensaje en cuesti&oacute;n debe llevar informaci&oacute;n asociada que permita determinar el endpoint en cuesti&oacute;n (es lo que suele llamarse metadatos o metainformaci&oacute;n del mensaje).</p>
<p>Por ejemplo, podemos hacer una invocaci&oacute;n a un servicio web u otro por medio de sus endpoints (esto es, las url&#8217;s de invocaci&oacute;n de los servicios) en funci&oacute;n de alg&uacute;n par&aacute;metro del mensaje. <br />
El caso pr&aacute;ctico m&aacute;s com&uacute;n, es un mensaje con informaci&oacute;n sobre concesi&oacute;n de un pr&eacute;stamo de dinero para el sector bancario. La decisi&oacute;n de aceptaci&oacute;n del pr&eacute;stamo puede definirse como autom&aacute;tica para cantidades por debajo de un umbral o manuales si se supera dicho l&iacute;mite. El ESB ser&iacute;a capaz de analizar dicha cantidad (ser&iacute;a informaci&oacute;n inclusa en el mensaje) e invocar un servicio web de resoluci&oacute;n autom&aacute;tica o manual seg&uacute;n el caso que est&eacute; manejando.<br />
<strong><br />
Transformaci&oacute;n de mensajes:</strong></p>
<p>La mayor&iacute;a de los ESB suelen incorporar motores de transformaci&oacute;n y parseadores de mensajes que permiten y facilitan la transformaci&oacute;n de los mismos. La manera m&aacute;s com&uacute;n suele ser por medio de un fichero XSLT de Transformaci&oacute;n de mensajes, aunque algunas herramientas utilizan otros sistemas, incluso propietarios. </p>
<p>Por ejemplo, disponemos de un modelo de datos com&uacute;n de nuestra arquitectura y queremos invocar un servicio web con un modelo de datos particular y &uacute;nico. El ESB nos permite realizar la transformaci&oacute;n del mensaje de un modelo a otro por medio de un fichero XSLT (o cualquier otro sistema que utilice) y as&iacute; desacoplar completamente la implementaci&oacute;n de uno y otro. De esta manera, un futuro cambio de uno u otro modelo, solo deber&iacute;a, en principio, aceptar a la transformaci&oacute;n del mensaje, nunca a las implementaciones de ambos modelos involucrados.</p>
<p><strong> Configuraci&oacute;n y no codificaci&oacute;n:</strong></p>
<p>Una de las cosas m&aacute;s ventajosas de un ESB es que suele realizarse todo por medio de configuraci&oacute;n y no codificaci&oacute;n. Independientemente del producto que estemos utilizando (hoy en d&iacute;a la mayor&iacute;a incluyen IDE&#8217;s gr&aacute;ficos que facilitan la configuraci&oacute;n de los elementos del ESB; aunque algunos pueden necesitar de configuraci&oacute;n por medio de ficheros y manualmente) suele ser suficiente con la configuraci&oacute;n de los componentes del ESB que vayamos a utilizar. No suele necesitarse la codificaci&oacute;n, lo que limita el n&uacute;mero de errores y da fiabilidad al bus que se monte.<br />
No obstante, si fuera necesario, la codificaci&oacute;n (sea por medio de Java, .NET, o cualquier otro lenguaje) suele ser posible para casos concretos en que los componentes del ESB manejado no implementen o faciliten la configuraci&oacute;n deseada.</p>
<p><strong> Proxy de Servicios:</strong></p>
<p>Una de las mayores ventajas del ESB es la de crear una capa de proxy por encima del servicio. Ello, nos permite abstraer su implementaci&oacute;n (que al final, puede ser como una caja negra, de la que solo disponemos la interfaz, normalmente su WSDL) y a&ntilde;adirle informaci&oacute;n o requisitos para su ejecuci&oacute;n. </p>
<p>El caso m&aacute;s pr&aacute;ctico ser&iacute;a el de un servicio web con dos operaciones. Una de ellas, permite la consulta online en una base de datos de libros. La otra operaci&oacute;n permite la compra de un libro y por tanto requiere del manejo de informaci&oacute;n confidencial como puede ser una tarjeta de cr&eacute;dito.<br />
El ESB nos permite generar un proxy por encima de dicho servicio y dar lugar a dos nuevos servicios (que ser&aacute;n los que realmente se permitan invocar a traves de aplicaciones cliente). Uno de los dos proxy&#8217;s podr&iacute;a ser el servicio con la operaci&oacute;n de consulta (sin requisito adicional). El otro servicio podr&iacute;a resultar en un proxy con requisito de seguridad a&ntilde;adido sobre la operaci&oacute;n del servicio original. El proxy podr&iacute;a ser requer&iacute;do para su invocaci&oacute;n, por ejemplo, por medio de HTTPS que llamar&iacute;a finalmente a la operaci&oacute;n del servicio original no securizada. </p>
<p><strong> Conversi&oacute;n de protocolos:</strong></p>
<p>Como ya hemos comentado, una de las caracter&iacute;sticas del ESB es su funcionalidad multiprotocolo. Esto es, que permite la conexi&oacute;n a distintas aplicaciones o sistemas por medio de numerosos protocolos. Adem&aacute;s, suelen incorporar la posibilidad de a&ntilde;adir conectores a todo tipo de aplicaciones que pueden ser desarrollados por el mismo fabricante del ESB, por terceros o incluso por el propio desarrollador a trav&eacute;s de un API estandarizada.</p>
<p>El ejemplo m&aacute;s pr&aacute;ctico ser&iacute;a un servicio web por HTTP, al que se le quiere dar fiabilidad por medio de mensajer&iacute;a JMS. El ESB ser&iacute;a el encargado de exponer el servicio de manera fiable a trav&eacute;s de un proveedor de JMS y luego realizar la conversi&oacute;n de protocolo necesaria para la invocaci&oacute;n via HTTP.<br />
<strong><br />
Auditor&iacute;as y Logs de Mensajes:</strong></p>
<p>Otra caracter&iacute;stica importante del ESB es su funci&oacute;n como auditor de mensajer&iacute;a y &quot;logado&quot; de mensajes. La comunicaci&oacute;n de informaci&oacute;n a trav&eacute;s del ESB nos permite centralizar sistemas de log y persistencia de informaci&oacute;n susceptible de ser auditada. Adem&aacute;s, luego con herramientas de BAM o incluso Business Intelligence pueden explotarse dichos datos y realizar monitorizaciones exhaustivas que permitan la optimizaci&oacute;n del ESB, la Arquitectura SOA y en definitiva el negocio de la empresa.<br />
<strong><br />
Manejo de Excepciones:</strong></p>
<p>Generalmente los servicios web tienen un comportamiento de respuesta correcta y en algunos casos pueden devolver excepciones de manera controlada (o no). El ESB nos permite gestionar las excepciones de una manera estandarizada (por ejemplo SOAP Fault) y realizar las correcciones oportunas al ocurrir dichos errores.</p>
<p>El ejemplo m&aacute;s pr&aacute;ctico consistir&iacute;a en definir un modelo est&aacute;ndar de nuestra arquitectura para el manejo de excepciones. Por medio del ESB podr&iacute;amos tratar cualquier tipo de error (independientemente del protocolo o el modelo de datos de los servicios involucrados) de una manera com&uacute;n a todo nuestro entorno y as&iacute; poder unificar criterios, facilitar la internacionalizaci&oacute;n de mensajes de error, etc&#8230;<br />
<strong><br />
Securizaci&oacute;n de Servicios:</strong></p>
<p>Los servicios que suelen integrarse por medio de un ESB pueden o no estar securizados. A veces, la informaci&oacute;n es necesaria de securizarse en mayor o menor medida dependiendo del cliente externo que vaya a utilizarla. Por medio del ESB se pueden definir pol&iacute;ticas de seguridad para los servicios y establecer m&aacute;s o menos requisitos para la invocaci&oacute;n / ejecuci&oacute;n de los mismos.</p>
<p>El ejemplo pr&aacute;ctico consistir&iacute;a en securizar con SSL un servicio sin seguridad (por ejemplo, un servicio adaptado de un sistema legado que carece de elementos securizantes) por medio de certificados digitales.<br />
<strong><br />
Acceso a Repositorio de Servicios:</strong></p>
<p>Un Repositorio de Servicios (no confundir con UDDI) nos permite acceder a metainformaci&oacute;n de los servicios integrados que facilita el control de los mismos y el poder aplicar pol&iacute;ticas y condiciones de una manera centralizada y jerarquizada (entre muchas otras caracter&iacute;sticas, muy ligadas a veces con la gobernabilidad de la arquitectura).</p>
<p>Un ejemplo pr&aacute;ctico consistir&iacute;a en resolver de manera din&aacute;mica los endpoints de invocacion de los servicios por medio del acceso a un repositorio de servicios que nos diera dicha informaci&oacute;n en tiempo de ejecuci&oacute;n. De esta manera, por ejemplo, cambiar a la invocaci&oacute;n de un servicio en pruebas u otro de respaldo, ser&iacute;a autom&aacute;tico por medio de configuraci&oacute;n del propio repositorio.<strong></p>
<p>Validaci&oacute;n, Enriquecimiento, Transformaci&oacute;n y Operaci&oacute;n de Mensajes:</strong></p>
<p>Se puede decir, que estas son las 4 caracter&iacute;sticas estrella de un ESB:</p>
<p><em> Validaci&oacute;n</em> de la informaci&oacute;n, de los mensajes entrantes, sobre los que se pueden aplicar distintas condiciones y verificaciones que hagan cumplir los requisitos establecidos.<br />
<em> Enriquecimiento</em> de los mensajes, posiblidad de a&ntilde;adir informaci&oacute;n o metainformaci&oacute;n adicional para cumplir las necesidades de integraci&oacute;n en cada momento.<br />
<em> Transformaci&oacute;n</em> de los mensajes, normalmente entre los diversos modelos de datos del conjunto de servicios y aplicaciones a integrar.<br />
<em> Operaci&oacute;n</em> de los mensajes o enrutaci&oacute;n en funci&oacute;n de directivas preestablecidas o a partir de metainformaci&oacute;n inclusa en la propia comunicaci&oacute;n.</p>
<p>Estas son solo algunas de las principales caracter&iacute;sticas y usos de un ESB. Dependiendo del producto que vayamos a utilizar ser&aacute; m&aacute;s o menos fuerte en ciertas cosas u otras.</p>
<p>&iquest;Qu&eacute; otras experiencias reales teneis con ESB&#8217;s? &iquest;Veis que falte algo? &iquest;Cu&aacute;l es el producto del mercado que creeis mejor se adapta a vuestras necesidades o que cumple en mayor medida con estos requisitos?</p>
<p><strong>Links interesantes:</p>
<p></strong><a target="_blank" href="http://soa.sys-con.com/read/46170.htm">ESB Integration Patterns by Dave Chappel</a><br />
<a href="http://www.redbooks.ibm.com/abstracts/sg246346.html" target="_blank"> Patterns: Implementing an SOA using an Enterprise Service Bus </a><br />
<a target="_blank" href="http://www.redbooks.ibm.com/abstracts/sg246773.html"> Patterns: Integrating Enterprise Service Buses in a Service-Oriented Architecture </a><br />
<a href="http://www.ibm.com/developerworks/patterns/application/at4-runtime.html" target="_blank"> Application Integration::Broker application pattern::Runtime patterns</a><br />
<a target="_blank" href="http://safari.oreilly.com/0596006756/esb-PREFACE-2"> Enterprise Service Bus (O&#8217;Reilly Safari Books Online)</a><br />
<a href="http://artsciita.blogspot.com/2006/01/esb-patterns-that-click.html" target="_blank"> ESB Patterns that &quot;Click&quot; (The Art and Science of Being an I/T Architect)</a></p>
]]></content:encoded>
			<wfw:commentRss>http://www.espaciosoa.net/2007/10/18/usos-practicos-de-un-esb/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
	</channel>
</rss>
