2/05/2013

Preguntas que debemos hacernos en un proyecto de Integracion SOA, ESB, BPM

He leído muchas veces la importancia de hacer buenas preguntas; en ese sentido, cuando abordamos proyectos de integración se presentan muchos problemas por no tomar en cuenta variables que son importantes para una buena implementación. Aquí algunas preguntas que como arquitectos debemos hacernos cuando necesitemos enfrentarnos a servicios de integración.
  1. Que protocolo de transporte disponibiliza el servicio?  (Por ejemplo: HTTP, HTTPS, JMS, SMTP, TCP/IP)
  2. Que protocolo de comunicación utiliza el servicio?. (Por ejemplo: HTML, XHTML, SOAP, XML, JSON)
  3. Qué tipo de patrón de mensajería utiliza el servicio?  (Por ejemplo: Síncrono o Asíncrono)
  4. El acceso al servicio requiere autentificación y autorización?
  5. Qué tipo de seguridad utiliza el servicio? (Por ejemplo: ws-security, token, request).
  6. El servicio tiene asociada alguna política? (Por ejemplo: Solo puede ser invocado desde una direccion ip especifica, algunos datos deben estar encriptados, el response time del servicio no puede exceder de 200 ms, solo puede ser invocado una sola vez al día).
  7. Como se gestionaran los errores que pueden presentarse en el servicio? (Por ejemplo: soap faults, xml, texto, entre otros.)
  8. Qué tipo de notificación deberá ser aplicada al generarse una excepción de disponibilidad del servicios (timeout, no disponible, entre otros). Por ejemplo: sms, correo electrónico.
  9. Quien será el responsable o gestor de servicio? (Por ejemplo: nombre, correo electrónico, teléfono, entre otros)
  10. El servicio requiere algún tipo de transformación (mapeo) o utilización de alguna expresión de salida?
  11. Cuáles son los datos que pueden ser provistos por el servicio?
  12. El servicio requiere algún componente transaccional?
  13. Se debe aplicar alguna estrategia de cache en el servicio?
  14. Como se gestionará la auditoria y logging del comportamiento del servicio en tiempo de ejecución?
  15. Cual será el Service Level agreement del servicio? (Por ejemplo: timeresponse minimo)
  16. Cual será la disponibilidad del Servicio?
  17. Cuentan con un formato para especificar los servicios proveedores?
  18. Cuál es el grado de complejidad del servicios?
  19. Cuál es el tiempo estimado para su desarrollo?
  20. Que recursos son necesarios para desarrollar los servicios?
Saludos;

Proyecto Challenge DevFactory


Desde hace un año y no con la frecuencia que quisiera, he estado  involucrando a niños, estudiantes y profesionales para que aprendan técnicas y métodos para el desarrollo de software basado en el  pensamiento de diseño. El desafió, ninguna de las personas tiene ningún tipo de conocimiento en ingeniería de software. Aquí algunas imágenes que transmiten por si solas.

Los invito a revisar las técnicas del pensamiento de diseño e incorporarlas en sus áreas de competencia!!

Pueden los jovenes apreder a desarrollar software sin una formacion formal?, que piensan ustedes!!!!;

Recomendaciones para abordar un proyecto BPM con Bonita BPM (Entrenamiento Bonita Open Solution BPM y API)

Hace algunas semanas desarrolle un programa de formación SOA/BPM que incluyo un entrenamiento intensivo en el modelado y automatización de procesos mediante la solución Bonita Open Solution. Durante esta transferencia de conocimiento y experiencias registre un conjunto de recomendaciones que fue enriquecido con los participantes y sus distintas contribuciones; el cual quisimos compartir con la comunidad con el objeto de incentivar no las herramientas tecnológicas sino las consideraciones metodológicas y políticas que deben establecerse.
Recomendaciones para abordar proyectos BPM con  Bonita Open Solution
  1. La actividad de análisis y modelado de procesos debe realizarse de forma multidisciplinaria. Los procesos no se modelan en un solo día y con una solo perspectiva.
  2. Los procesos pueden ser modelados por coreografía u orquestación, sin embargo para iniciar les recomiendo adoptar la orquestación.
  3. Las tecnologías BPM no son herramienta de desarrollo, por ende se debe evitar en la medida de lo posible escribir código bajo sus diferentes características.
  4. El proceso debe ser tratado como un prototipo, por ende debe pasar por diversas revisiones para ir dividiendo las responsabilidades por ejemplo: identificar  procesos utilitarios e invocarlos mediante actividades de llamada, o la utilización de timers y contadores para la gestión de acuerdos de servicios.
  5. La gestión de excepciones debe siempre incluirse en los procesos, para asegurar que las instancias no se interrumpan durante excepciones en la disponibilidad de un conector o servicio.
  6. Se recomienda que la mayoría de la lógica de integración, de datos o de reglas resida en servicios web que pueden ser invocados desde conectores o scripts groovy.
  7. Los procesos pueden utilizar formularios, sin embargo existe la posibilidad de utilizar formar externas que invoquen procesos  mediante el api de servicios REST de bonita. Con esta aproximación existe mayor control de la interfaces. Otra opción es generar los formularios con bonita y modificarlos según las necesidades.
  8. Utilice procesos utilitarios para notificaciones, cambio de estatus de documentos, escalamiento, entre otros.
  9. Cuando modele utilice como máximo tres procesos por diagrama.
  10. Utilice patrones para la gestión de errores en la invocación de servicios web, con el objeto de evitar que el ciclo de vida del proceso sea interrumpido por la falta de disponibilidad de un servicio.
Saludos;

From Mijao Blog
From Mijao Blog
From Mijao Blog
From Mijao Blog

4 lenguajes de programación (PHP, PYTHON, JAVA, GROOVY) y un Web Services – Programa BPM/SOA


Hace algunas semanas realice un programa de formación BPM/SOA, donde se abordaron diversas técnicas y métodos para el desarrollo de servicios de datos y decisión (reglas). El equipo técnico al cual impartí el entrenamiento contaba con una experiencia relevante en diversos lenguajes; lo cual enriqueció la actividad. Durante el entrenamiento, el equipo me plateo crear varios consumidores de servicios web bajo SOAP en diferentes lenguajes, lo cual me pareció una excelente práctica para ver los diferentes modelos de implementación para consumir servicios web.

En este post, podremos observar varias formas de consumir servicios web con diversos lenguajes:

PHP - NUSOAP
@include_once("nusoap/nusoap.php");
$oSoapClient = new nusoap_client('http://10.100.14.232:9763/services/tramiteCRUD?wsdl');
$respuesta = $oSoapClient->call("select_with_key_tramite_operation",array("tramite_id" => 2 ));
print_r($respuesta);
?>

PYTHON
from suds.client import Client
url = 'http://127.0.0.1:9764/services/tramiteWSS?wsdl'
client = Client(url)
print client.service.obtenerIdTramitesParIDs('1')

JAVA
package ve.gob.tramites.services.mppi.client;
import org.apache.axis2.AxisFault;
import ve.gob.tramites.services.mppi.TramiteCRUDStub;
import ve.gob.tramites.services.mppi.TramiteCRUDStub.Insert_tramite_operation;

public class Consumidor{
 public static void main(String[] args) {
  try {
   TramiteCRUDStub stub =new TramiteCRUDStub();
   Insert_tramite_operation objTramiteInsert=new Insert_tramite_operation();
   objTramiteInsert.setTramite_id(20);
   objTramiteInsert.setEstatus("ESTATUS PRUEBA");
   objTramiteInsert.setOrigen("ORIGEN PRUEBA");
  stub.insert_tramite_operation(objTramiteInsert);
  } catch (AxisFault e) {
   System.out.println("Ha ocurrido una Axis exception");
  } catch (Exception e) {
   System.out.println("Ha ocurrido una excepcion.");
  }
 }
}

PHP5 - SoapClient
$parametros['id']=2;
$client = new SoapClient("http://10.100.16.65:9763/services/tramiteidWS?wsdl",$parametros);
$respuesta = $client->selectId($parametros);
print_r($respuesta);
?>
 
Groovy
import wslite.soap.*
def client = new SOAPClient('http://localhost:1021/orden')
def response = client.send(SOAPAction: '') {
    body 
    { 
        'bam:createOrden'('xmlns:bam':'http://bam.service/') 
        { 
             'orden'('xmlns:bam':'http://bam.service/') 
             {  
                      campo1('I');
                      campo2('S');
                      campo3('A'); 
                      campo4('B');
             }             
        } 
    }
}
println response.envelope.Body.createOrdenResponse.return;

Felicitaciones al equipo por su alto nivel técnico, su proactividad, trabajo en equipo y su disposición a compartir con la comunidad su conocimiento. Este post es de ustedes!!!!
From Mijao Blog