Archivo de la categoría: Computers and Internet

Windows Live Writer, dejó de ser BEta

Por fin salio la versión final del editor de Post, para los que le gusta escribir en Blogs está muy bueno.

Yo lo estoy usando para escribir este POST.

Dentro de las funcionalidades nuevas que trae están:

  1. Poder dar una fecha de publicación.
  2. Manejo de Plugin como por ejemplo para copiar código desde Visual Studio formateado.
  3. Manejo de Glosario :O muy cool para quien postea puros acrónimos como ESB, WS, FIFO, LIFO, etc….
  4. Mejora en la inserción de link’s

Que lo disfruten, se puede descargar for free desde Aquí

salu2

Pipe and Filter, simple y útil.

Para un proyecto necesitamos hacer un Middleware. Este Middleware consume servicios del BackOffice del cliente, pero no es solo un catalogo de servicios sino que debe actuar como intermediario entre el cliente y los servicios.

Para implementar esta maravilla se me ocurrió mirar el patrón de diseño Pipe And Filter, después de leer con atención me dije que esto podía hacerse extremadamente simple y quedar muy útil.

Entonces en unas 2,5 horas hice el ejemplo que incluyo en este POST. Este es un ejemplo para mostrarlo a los otros Developer del equipo por lo que deben perdonarme algunas barbaridades en la escritura del código, no es un ejemplo de buenas prácticas de codificación.

Aclarado eso, vamos al grano!!

Descripción del Patrón

Lo primero es entender el patrón Pipe and Filter. Este patrón se refiere a una cadena de filtros por los cuales pasa un mensaje (Contexto), desde el inicio al final. Cada uno de los filtros tiene acceso al contexto tanto de lectura como de escritura. Quien controla el armado y ejecución del Pipe es un Controlador. Este controlador lee de la configuración cuales son los filtros y su orden, los carga y le pasa el contexto al primero. Cuando el primero ejecuta le regresa el control al Controlador para que tome el Contexto y se lo pase al siguiente filtro.

 

Diagrama 1: Pipe And Filter

Contexto

El contexto es lo que se comparte entre los filtros. Los filtros tienen que compartir un método de ejecución, es este método el que ejecuta el Controlador para que el filtro se active. La siguiente clase es un ejemplo de una implementación de una clase Contexto.

 

Diagrama 2: Clase Contextooperaciones

 

EL siguiente código muestra la implementación de de la clase contexto. Este contexto es el que se irá traspasando de filtro en filtro para ser usado en la lógica que implementa cada filtro. Aparte de los dos operadores, que se usaran como argumentos en cada filtro, tiene una lista de respuestas dónde almacenará la respuesta de cada uno de los filtros. Así al terminar la ejecución del Pipe se contará con los resultados de cada filtro en la lista.

 

Código 1: Clase Contextooperaciones

 

Filtro

Los filtros componen el Pipe. La idea de los filtros es que expongan un método que los acciones (los ponga a trabajar) y que cuando terminen de ejecutar ese método regresen el Contexto al Controlador del Pipe. En el siguiente diagrama se muestran cuatro filtros los cuales exponen el método interceptar como iniciador del trabajo del filtro.

Diagrama 3: Clases que implementan filtros

El método que los acciona es Interceptar (muy creativo el nombre) el cual recibe el contexto, ejecuta la lógica programada en el filtro y deja el contexto en la propiedad miNuevoContexto para que el controlador del Pipe pueda tomarlo.

El siguiente código muestra la implementación del filtro. Este filtro lo que hace es sumar dos números que lee del contexto y guardar el resultado en una lista de resultados. Esa lista contendrá el resultado de todas las operaciones realizadas en el Pipe, esto es posible porque la lista de resultados está en el contexto y no el filtro.

Código 2: Clase FiltroSuma

Controlador

El controlador es el director de orquesta de este patrón, toma desde la configuración cuales son los filtros que debe cargar y en qué orden. Cuando inicia la ejecución utiliza el contexto y se lo entrega al primer filtro ejecutando su método para gatillar la lógica del filtro. En el ejemplo anterior el método Interceptar.

Diagrama 4: Controlador

 

En el siguiente código se muestra la clase PipeManager, que es el controlador del Pipe. LA instanciarse la clase, se le pasa la configuración XML que contiene los filtros a ser cargados. Una Vez cargados los filtros, el Pipe está listo para ser ejecutado.

Para poner en acción el Pipe es necesario llamar al método Ejecutar pasándolo el contexto inicial como argumento. Opcionalmente hay un parámetro de la ejecución que se llama ExceptionForward. Este segundo parámetro especifica cómo se comporta el Pipe si hay una excepción en alguno de los filtros. Puede comportarse de dos maneras ante una excepción: detenerse o guardar en el log y avanzar.

Código 3: Clase PipeManager

Programa para probar el código

Para probar la implementación hice una aplicación de consola que instancia el controlador pasándole la ruta del archivo XML que contiene la configuración de los filtros. Paso dos, crea el contexto inicial. Luego comienza un loop en el que pide ingresar los dos operadores, los carga en el contexto y ejecuta el Pipe.

Código 4: Clase Program

Configuracion XML

La configuración XML se muestra en el siguiente archivo XML.

Código 5: Xml configuración

 

Los códigos de este ejemplo los pueden descargar aquí.

 

Salu2  

Entendiendo la administración de SOA

He aquí un excelente artículo sobre administración de SOA (SOA Management) escrito por Dain Hansen para BEA.

El aspecto de administración es crítico para el éxito de las iniciativas de SOA. Para lograr cumplir con la promesa de lograr agilidad usando SOA no solo es necesario una solida tecnología de servicios sino administrarla de manera efectiva.

En el siguiente link pueden ver una buena introducción al tema de administración.

Understanding SOA Management: What’s in your SOA?

Salu2

Mi primera aplicación BlackBerry

Ayer terminé mi primera aplicación BlackBerry (BB) [1] que hace consultas a una base de datos MSSQL [2]. Es un piloto demostrativo para Cliente XXX. El esquema de la solución es muy simple:

1.- Cliente JAVA desarrollado con MDS Studio [3]
2.-Web Services con dos métodos, uno para cada tipo de consulta.
3.- Una base de datos con los datos a consultar.

No es un tema complejo, como son simples consultas nada de la NASA. Ahora, MSD STUDIO es una herramienta hecha para aplicaciones simples, que tiene un Wizard con el cual puedes construir una aplicación de consultas a Web Services con 3 Click’s sin saber nada de JAVA. Utiliza un concepto muy cool, que es Workflow. Si ha usado el ide de desarrollo de BEA [4], hace tiempo que ellos lo tienen. Es una simplificación del concepto de Page Flow.

Una vez ejecutado el Wizard de desarrollo en base a servicios Web, queda customizar la aplicación, proceso que se hace con código JAVA y JAVA SCRIPT [5].
Los resultados son como esto.

 

Salu2

Referencias
[1] BlackBerry: http://na.blackberry.com/eng/developers/
[2] MSSQL: http://www.microsoft.com/sql/default.mspx
[3] MDS Studio: http://na.blackberry.com/eng/developers/downloads/studio.jsp
[4] BEA: http://es.bea.com/
[5] Java Script: http://es.wikipedia.org/wiki/JavaScript

Link’s de Biztalk :)

WCF Referencias

Data in SOA, Part I: Transforming Data into Information

 

La administración de datos es un tema central en cualquier solución de sistemas.

En este notable articulo Web “Data in SOA, Part I: Transforming Data into Information”, se enfoca la administración de datos desde la perspectiva de SOA. Un modelamiento y administración de datos efectiva es un requisito fundamental para el éxito de una iniciativa SOA.

El Link es:

Data in SOA, Part I: Transforming Data into Information

Que lo disfruten, ojo que viene una segunda parte el próximo mes.

3-tier Architecture with ASP.NET 2.0 Tutorial Series

Hola,
Haciendo me revisión de los días viernes de la información de MSDN me encontré con este tutorial “3-tier Architecture with ASP.NET 2.0 Tutorial Series”que está buenísimo para comenzar a ordenar las aplicaciones que hacemos.

Tiempo atrás, yo puse la idea de que existe una arquitectura muy conocida (3 capas) pero que nadie da guías prácticas para que los desarrolladores no hagan implementaciones caóticas. Está guía ayuda en ese sentido.

Salu2.