SOAizando aplicaciones GeneXus
Desde hace un tiempo venimos incorporando a nuestros sistemas algunas de las ideas que trae SOA (Service Oriented Architecture) y estudiando algunas de las cosas nuevas que vienen adosadas al nuevo paradigma, como BPEL, ESB y demas mojos.
El uso de algunos web services para conectar aplicaciones es algo que no es ninguna novedad, pero cuando se empiezan a tener varios y en funcionalidades cada vez mas críticas de nuestros sistemas, nos obliga a encarar la cosa con algunas otras herramientas.
Una de la que estamos tratando de resolver en estos dias es el tener un registro (o auditoría) del uso que hacen los externos de web services brindados por nuestro sistema. Se deben brindar información usable por algunos usuarios autorizados del sistema, que puedan ver quienes esta utilizando el sistema, en que momento nos llegan los requests, cuanto demoramos en responderselo y que le respondemos.
Diciendolo de una forma sencilla, necesitamos registrar:
- Quien llama a determinado web services (incluye un certificado digital, ip, etc)
- Con que datos hace el request (parametros de invocacion al ws, un XML/SOAP?)
- Cuando (fecha/hora/segundo/milisegundo)
y algo similar para la respuesta del sistema.
Una vez que se tienen estos datos, debemos permitir consultar estos datos a traves del sistema, necesitando consultar datos dentro del XML por valores de los parametros de invocación.
Me gustaria poder utilizar algun mecanismo genérico que sirva para varios webservices (o sea no dependa de la implementacion actual de un WS), y que a traves de expresiones tipo XQuery o Xpath consultar los datos dentro del xml, sin tener que formatearlo antes.
Esto parece una funcionalidad que muchos deberían necesitar, sin embargo no estoy encontrando soluciones genéricas que lo resuelvan.
Me encantaría conocer la experiencia de quienes están mas adelantados que nosotros en SOA, para saber como resolvieron este (y otros!!) temas.
Las preguntas que me aquejan son:
- Como autentican los web services (o los servicios en general)?
- Como manejan el tema de auditoria de webservices?
- Utilizan Enterprise Services Bus? Cual? Por que eligieron ese?
Enrique,
ResponderBorrarEs interesante la necesidad que planteas. No conozco como es la implementación de web sevices en Genexus, pero para resolver el requerimiento de auditoría yo manejaría dos alternativas:
1- Solución a nivel de diseño: Aplicar un patrón de diseño llamado “Bussines Delegate”, donde se crea un capa que recibe las solicitudes de los clientes y se encarga de delegar la llamada al servicio existente, aquí mismo se podría agregar lógica para auditar antes y después de la invocación. Conceptualmente sería un “Interceptor”, recibe las llamadas, hace cosas y delega la ejecución.
2- Solución técnica: Usar Aspect Oriented Programming (http://es.wikipedia.org/wiki/Programación_Orientada_a_Aspectos), no se si es posible aplicarlo a Genexus, tal vez es algo que se podría integrar en el futuro. Básicamente permite configurar lógica encapsulada para que se ejecute automáticamente en distintos puntos del flujo de un método, por ejemplo antes o después del llamado. Dicha configuración es externa y depende del framework utilizado.
Usando Genexus, me inclinaría por la opción 1.
Saludos,
Federico
Federico:
ResponderBorrarHay varias soluciones que permiten resolver el problema planteado, pero lo que quiero es lograr alguna opcion que me lo resuelva "de modo GeneXus", o sea sin tener que programar demasiado y que algo que se adapte sin mucho trabajo a una aplicacion que va a sufrir varias re-generaciones.
La opcion que pones en 1) es buena, pero estoy a la busqueda de algun Enterprise Service Bus que resuelva ese problema.
En cuanto a Aspect Oriented Programing, hace un tiempo lei del tema y me costo entenderlo.
Se que es algo que voy a tener que encarar en los proximos meses...
Gracias por el comentario.
Enrique