domingo, 16 de noviembre de 2008

Mashups o Web como servicio

Explicando brevemente un concepto que se ha manejado ultimamente, mashups (asociado con Web 2.0)

Un mashup es un componente web (que a la vezpuede ser consumido como un webservice tipo SOAP o REST) y que integra informacion de distintas fuentes de informacion.

Es decir, un mashup permite consumir informacion de una pagina Web o un WebService o de servicios como Google Maps, Blogger, Flicker o del.icio.us.

Resuelve problemas en los cuales, si es necesario consumir datos de una aplicacion Web, basada en HTML, permite capturar la informacion que se tiene en una pagina.

El concepto es muy interesante y poderoso, ya que es un mecanismo que permite exponer paginas Web como servicios.

Les recomiendo visiten la documentacion del proyecto WSO2 server mashup.

Otro ejemplo, pero no tan accesible para probar (es decir, algun gerente de ventas te estara cuestionando para que usar el software antes de dartelo) es el de la empresa JackBe , con su tecnologia Presto


Cierro este comentario, dejando que mediten las posibilidades de integrar a las aplicaciones informacion que vienen de Internet.

domingo, 28 de septiembre de 2008

Web Services con Mule CXF y Spring

Hola que tal

Despues de un rico desayuno en un agradable domingo en casa de mis padres, saque del polvo mi cuenta de integracion y pues aqui estamos; Antes de entrar en materia he de comentarles que han pasado muchas cosas interesantes en el trabajo, una que me tiene muy entusiasmado es el proyecto de SOA, mas alla del nombre, es interesante ver como gran parte de la comunidad de sistemas tiene su propia definion de SOA lo entendemos de diferentes maneras (no quiero pensar en la gente que es de negocio).. es un reto interesante en lo personal ya que se derivan muchas cosas desde la parte tecnica como la parte de venta la parte de convencer todo lo que vamos a estar haciend... en fin. Estuve leyendo el ultimo post de gustavo y comparto la opinion acerca de nuestros hermanos de la india, asi como en mexico, en la india hay gente muy trabajadora, muy comprometida y sobretodo sencilla, ya les contare mas detalle lo que estamos haciendo por aca en el trabajo.

Bien pues despues de lo anterior..... el post de hoy habla de de como combinar Spring, CXF y MULE, para generar y exponer servicios web usando el ESB Mule.

Bien, en muchas ocasiones me ha tocado ver como compañeros del trabajo les encargan generar un servicio web que exponga funcionalidad de negocio y me sorprende ver como tardan mas en generar todo la talacha que implica el exponer el servicio, que en lo que generan sus servicios de negocio.... creo que todo lo anterior tiene una explicacion, no estamos acostumbrados a trabajar con frameworks. Hoy en dia existen framworks como spring que como dicen en muchas paginas "hace la plomeria el plumbing", este tipo de marcos de trabajo nos permiten concentrarnos en generar nunestros componentes de negocio. En el siguiente ejemplo vamos a ver como exponemos un POJO como servicio web.

Bien los ingredientes son:

  • La distribucion de Mule (que esta basada en spring)
  • Si gustan usamos Eclipse Mule IDE
Es todo, ahora bien iniciamos pensando que tenemos un POJO sencillo basado en una INTERFAZ que realiza los siguientes calculos :D suma, resta, multiplicacion y division.

El codigo como sigue

public interface ICalculadora {
public float suma(float a, float b);
public float resta(float a, float b);
public float division(float a, float b);
public float multiplicacion(float a, float b);

}

y la implementacion

public class CalculadoraImpl implements ICalculadora {
public float division(float a, float b) {
if (b==0) return -1;
else return a/b;

}
public float multiplicacion(float a, float b) { return a*b;}
public float resta(float a, float b) { return a-b; }
public float suma(float a, float b) { return a+b; }
}

woow!!!, ahora bien si este pojo lo queremos usar con spring lo unico que necesitamos haces es su archivo de configuracion el application context:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.springframework.org/schema/beans
http://www.springframework.org/schema/beans/spring-beans-2.5.xsd">

<bean id="calculadora"
class="ejercicio.CalculadoraImpl"
scope="singleton">
</bean>

</beans>

Ahora bien... hasta aqui nada nuevo... para los que han manejado spring no tiene nada de complicado lo anterior. Bien, pues vamos a hacer la pregunta que generalmente se coloca en el google "How do I expose my POJO as a webservice in Mule?", hay varios caminos... uno de ellos es usando CXF de apache para lo cual debemos de colocar una serie de anotaciones en nuestra clase y nuestra interfaz... veamos:

import javax.jws.WebResult;
import javax.jws.WebService;

@WebService
public interface ICalculadora {

@WebResult(name="suma")
public float suma(float a, float b);

@WebResult(name="resta")
public float resta(float a, float b);

@WebResult(name="division")
public float division(float a, float b);

@WebResult(name="multiplicacion")
public float multiplicacion(float a, float b);

}

y para la implementacion:

import javax.jws.WebService;

@WebService(endpointInterface = "ejercicio.ICalculadora",
serviceName = "Calculadora")
public class CalculadoraImpl implements ICalculadora {

public float division(float a, float b) {
if (b==0) return -1;
else return a/b;

}

public float multiplicacion(float a, float b) {
return a*b;
}

public float resta(float a, float b) {
return a-b;
}

public float suma(float a, float b) {
return a+b;

}

}

Las anotaciones usadas @WebService indican que la clase es un servicio web y @WebResult los valores a recibir. Estas anotaciones serviran para que CXF y Mule compongan el WSDL que describira nuestro servicio.

Una vez colocadas las anotaciones lo que sigue es generar nuestro archivo de configuracion de Mule mule-config.xml tal y como sigue:

<?xml version="1.0" encoding="UTF-8"?>
<mule xmlns="http://www.mulesource.org/schema/mule/core/2.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns:spring="http://www.springframework.org/schema/beans"
xmlns:soap="http://www.mulesource.org/schema/mule/soap/2.0"
xmlns:cxf="http://www.mulesource.org/schema/mule/cxf/2.0"
xsi:schemaLocation="
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-2.0.xsd
http://www.mulesource.org/schema/mule/core/2.0 http://www.mulesource.org/schema/mule/core/2.0/mule.xsd
http://www.mulesource.org/schema/mule/soap/2.0 http://www.mulesource.org/schema/mule/soap/2.0/mule-soap.xsd
http://www.mulesource.org/schema/mule/cxf/2.0 http://www.mulesource.org/schema/mule/cxf/2.0/mule-cxf.xsd">

<spring:beans>
<spring:import resource="springContext.xml"/>
</spring:beans>

<model name="servicescalculadora">
<service name="Calculadora">
<inbound>
<cxf:inbound-endpoint address="http://localhost:65082/services/Calculadora" />
</inbound>
<component>
<spring-object bean="calculadora" />
</component>
</service>
</model>

</mule>


Bien pues ya tenemos todos los componentes, ahora vamos a ejecutar nuestro archivo de configuracion de mule, si lo hacen si el ide consideren todas las dependencias para que el poryecto compile:

MULE_HOME\mule -config mule-config.xml

Se ejecuta el servidor de mule al finalizar debemos de ver algo como lo siguiente:

INFO: Setting the server's publish address to be http://localhost:65082/services/Calculadora

Bien, pues listo! ya estsmos en posibilidades de ver el WSDL

http://localhost:65082/services/Calculadora?WSDL

Ahora solo es cuestion de ejecutar pruebas con nuestro servicio web, en lo personal yo uso SOAP UI, pero pues lo pueden hacer con cualquier herramienta que pueda mandar peticiones hacia sua servicios web.



Bueno pues es todo, esperemos que les sirva, quejas y sugerencias seran bien recibidas.

Por una integracion mejor, hasta la vista!!

Tuzo

lunes, 14 de julio de 2008

Antes de dormir

Como conclusion y antes del inicio de semana, confirmo mi concepto sobre lo mucho que se puede aprender de la India, he tenido la oportunidad de conocer personas que trabajan en la organizacion donde estoy, y el conocimiento que tienen es muy bueno y que se combina muy bien en la sencillez, amabilidad y humildad de los mismos

Mientras estaba preparando mis vacaciones anuales, estaba viendo de reojo la pelicula de Gandhi y dejando atras todo lo que implica una pelicula de Hollywood, retrata bien la manera como Gandhi logro dar identidad a su pais. Y lo veo en los actuales ciudadanos de la India, tienen orgullo de su nacion, sus costumbres y trabajan para salir adelante.

Mi idea es algun dia poder aplicar las ideas de Gandhi para lograr un cambio en nuestro pais, o en latinoamerica, para que un dia la industria de software deje de estar en manos de los grandes inversionistas, y formar algo que se llame comunidades de software, y basadas en las granjas de Tolstoy, en Satyagraha

Y pensar que todo empezo con oir la musica de Philip Glass

Les dejo de tarea que investiguen lo que les digo

Parece algo muy lejano, pero creo lo grande se hace al inicio de lo intangible e inalcanzable

Un blog de interoperabilidad recomendable

Encontre este blog de una persona llamada Jesus Rodriguez

Me llama la atencion el alto nivel tecnico que tiene, y la cantidad de temas de los que habla

Business Capabilities y SOA

Hace como 3 meses, se dio el foro de Arquitectura que organiza Microsoft

Puede solo ir a las conferencias de las 9 a.m.

Y el segundo dia fue muy bueno, ya que expuso Arvindra Sehmi sobre el concepto de "Competencias de la Empresa y Arquitectura Orientada a Servicios" ( o en ingles, Business Capabilities y SOA)

Durante su platica empezo a contestarme las preguntas que tanto me han inquietado, sobre una metodologia para tomar el modelo de negocio de una empresa y a partir de eso especificar la estrategia SOA.

Esta metodologia se me hace solida. En el blog de Arvindra encontraran detalles sobre como verlo

Mientras, yo sigo buscando la aplicacion del modelo de Competencias de la Empresa, ya que estoy en el momento en el que tengo que tomar un rol en el cual debo ser quien entienda las necesidades de arquitectura de cuatro grandes proyectos que son el nucleo de la organizacion para la que trabajo. Creo que ese rol de manera formal se llama arquitecto empresarial, espero no estar pecando de presumido.

Les contare como me fue

DSL

Un tema que parece reciente, Domain Specific Language, es algo que estuve leyendo en esta madrugada

Sin embargo, me desentierra una idea que tuve desde hace 15 años, cuando estaba en la carrera, y viendo compiladores.

Todo empezo con el libro del sabio Bertrand Meyer, Introduction to the Theory of programming language, que describe la teoria necesaria para diseñar un lenguaje de programacion, utilizando conceptos como calculo lambda, semantica denotacional. Pero un punto muy importante del que hablar Meyer es que cualquier computo puede ser expresado en un lenguaje de programacion, y lo mejor, que es posible la definicion de un lenguaje especifico a un problema o dominio en particular.

Por ejemplo, se puede definir un lenguaje para definir interfaces graficas, ya sea definiendo una sintaxis que se puede interpretar o compilar; o se puede crear un API en algun lenguaje.

Y precesiamente, el concepto de DSL es que se defina un lenguaje de programacion que exprese de mejero manera el dominio del problema a definir.

Para no explicar mal, les dejo estas ligas


Martin Fowler
Java World

martes, 24 de junio de 2008

Google Developer Day 2008

Ayer fue un día muy emocionante: el primer Google Developer Day en México.

Único desde el proceso de inscripción en el cual tenías que proporcionar mucho de tu perfil e incluso url's de aplicaciones desarrolladas.

Finalmente llegó la confirmación y empezó la cuenta atrás para la fecha del evento y la travesía de media ciudad (o ciudad y media) para arribar al Centro Banamex.

El registro simple y directo. Cero complicaciones. Se perfilaba el look de la gente de Google, todos con unas curiosas batas tipo laboratorio.

En ese momento fue cuando empecé a encontrar conocidos y a conocer a muchas personas. Varios amigos nos fuimos encontrando y se fue armando la banda antes de entrar al salón de las conferencias plenarias.

Estas conferencias estuvieron interesantes, si tuviera que reducir al máximo lo que me dejaron quedan solamente dos palabras: comunidad y compartir. Realmente creó que la gente de Google se preparó para dar un mensaje positivo, incluyente e incluso comercial pero en un marco de una relación "ganar-ganar".

Al termino de las plenarias se organizó un brunch y me impactó de sobre manera la diferencia de cultura, actitudes y gente contra la conferencia gubernamental que se llevaba a cabo paralelamente. El área de los visitantes del GDD era un bonche de puffs para desparramarte a tu gusto. Lamentablemente no fueron suficientes y algunos tuvimos que buscar espacios alternativos.

Las conferencias por separado (breakout) dieron inicio y me apunté a la que trataba el tema de Google App Engine (GAE). Lo primero que me decepcionó fue ver que ponente utilizaba Windows... al menos era XP. Lo noté nervioso y algunas veces novatón. Esperaba más de la presentación.

A continuación vino el tema de GWT, que ya lo conocía y que me pareció interesante escucharlo de alguien que lo conoce muy, muy, muy a fondo. Excelente ponente.

El penúltimo tema fue Gears, la herramienta de Google para desarrollar aplicaciones web que pueden funcionar fuera de línea (offline). El ponente estuvo de miedo: ¡excelente! Y pues el tema da harto para hablar.

La última presentación a la que asistí fue la de OpenSocial + GAE. El ponente ya estaba muy cansado y la veda' fue como que de medio hueva.... pero bueno...

Como casi siempre lo mejor de todo fue la gente. Harto twittero, harto geek, harto conocido. Creo que a la fecha ha sido el mejor evento del año.

Finito.

miércoles, 5 de marzo de 2008

Con muchas cosas que compartir..

Hi folks.... pues regresando a dar un poquito de lata.

Ya con los primeros 2 meses del año que se fueron como agua...he de comentarles que este año trae consigo retos muy importantes tanto en lo profesional como en lo personal y hay que enfrentarlos como dice una cancion... con alma vida y corazon

Pues a lo que me truje chencha dijeran...

Hay muchos temas que me interesa tocar: SOA, Arquitectura Empresarial, Continuar con los ejemplos de Integracion de aplicaciones, hablar de algunos modelos y marcos de referencia, mas de ESBs Open Source, en fin...

Estos 2 dias estaremos asistiendo el buen Gus y su servidor a platicas de Cutter Enterprise Architectre Summit, de entrada las platicas del dia de hoy me parecieron bastante interesantes en especial la denominada "Enterprise Architecture By Example" el ponenete Mike Rosen.

Ya hablare mas a detalle de AE, pero de entrada creo que hoy dia estamos entrando a un punto interesante en la parte de Arquitectura, mas alla de la Arquitectura de Software (que como parte de la AE no deja de ser importante), existen diferentes aspectos que que necesitamos tomar en cuentas al definir una arquitectura empresarial, Mike lo denomina Enterprise Architecture Stack, y se compone principalmente de 4 arquitecturas:
  • Arquitectura de Negocio: Cadenas de valor , Modelos del negocio, Portafolio de servicios, Procesos de negocio
  • Arquitectura de Informacion: Informacion que soporta la toma de decisiones, Modelos de datos del negocio, informacion de datos operacionales y transaccionales
  • Arquitectura de Aplicaciones: Informacion de las responsabilidades de los componentes que forman parte de una aplicacion
  • Arquitectura Tecnologica: Harware, software, Infraestructura de Red, Data Centers
Lo anterior sin dejar fuera a la Organizacion misma y a la gente que la compone.

Mike menciona tambien que existen un modelo para evaluar la Madures de una Arquitectura Empresarial, tal como lo manejan el CMMI o el SOA Maturity Model.. ya platicare de esto con un poco mas de detalle.

Bueno pues los dejo con una presentacion que me parecio interesante se llama: Pragmatic SOA by Arjen Poutsma, espero la visiten

Ciao

Tuzo