domingo, 14 de julio de 2013

WSO2 publica su Factoría de Software.



Con buen agrado he visto la semana pasada como era publicada la versión 1.0.0 del WSO2 AppFactory así como su documentación. Aún no he tenido tiempo de probar esta nueva herramienta pero si ya tienes una cuenta en WSO2 no esperes, entra, autentícate y ya tendrás un entorno completo para el desarrollo de tus aplicaciones. Bien pueden ser APIs, aplicaciones web o para dispositivos móviles.

Ya la última versión del WSO2 Developer Studio

Sus principales características son las siguientes:


Provision Application Projects
Self-service provisioning of project workspaces and resources including source repository, issue tracker and build configuration
Invite developers, testers, and DevOps (operation engineers) into application workspace
On-demand access to development, test, and production run-time Clouds

Accelerate Development Iterations
Rapidly build Web applications, JAX-WS or JAX-RS services, business processes and back-ends for mobile applications
Automate and integrate continuous build, continuous test, and continuous deployment activities
Perform one-click actions for code branching, versioning, and promotion
Access shared source repositories, build farms, testing servers and run-time environments

Increase best practice adoption and establish agile application governance processes
Establish application development process phases, checkpoints, or approval workflows
Enforce coding conventions and best practices via automated tools, automated quality assurance, and security testing
Promote managed API subscriptions and access
Validate introduction of 3rd party libraries and license compliance
Manage application scaling parameters across development, testing, staging and production environments

Adopt a Cloud Platform and offer PaaS
Offer a shared, on-demand elastic infrastructure that scales
Deploy applications onto the complete WSO2 middleware platform, non-Java language containers (PHP), and 3rd party products (JBoss Application Server, Tomcat)

Obtain an Integrated DevOps Experience
Incorporates full lifecycle tooling, workflow, and reports for developers, quality assurance members, and operations engineers.
Automate and integrate continuous build, continuous test, and continuous deployment activities
Encompasses complete development lifecycle, from source code checkout, code development, check-in, and push up stream
Incorporates functional, non-functional, regression, and performance test activities


Management Dashboards for CXOs & Project Managers
Ability to develop dashboards provide visibility into application status, application health, application service assets, application activity, and application lifecycle stage progress
DevOps KPI monitoring via integration with WSO2 Business Activity Monitor
Project managers can monitor and receive notifications based on KPIs


Customize to follow your best practices and standards
Configure application development process phases, checkpoints, or approval workflows
Specify custom lifecycle stages in addition to pre-defined Development, Testing, and Production phases


Integrates with Your Existing Infrastructure
Integrates with your existing software development lifecycle (SDLC) tools including SVN, JIRA, Git, Maven, Jenkins, Bamboo and Clover
Integrates with existing user repositories via LDAP or Microsoft Active Directory

jueves, 4 de julio de 2013

WSO2 Identity Server como proveedor de SSO.



El tema de Single Sign On o SSO siempre ha sido objeto de análisis e implementación cuando vamos a diseñar la arquitectura empresarial y tecnológica para una empresa.
Que todas las aplicaciones puedan usar 1 o varios almacenes de usuarios y además implementar el SSO, permitiendo a los usuarios ir de una aplicación a otra sin necesidad de autenticarse en cada una es día a día una necesidad imperiosa.

Mientras más aplicaciones se tienen pues mayor es la necesidad.

En desarrollos que he participado la solución siempre ha sido usar CAS, por considerarla la herramienta líder en este tema en la parte Open Source, además de tener agentes para múltiples lenguajes y ejemplos probados así como una comunidad cada día más creciente.

Pero me he topado con que cuando uso la suite de WSO2 y utilizo el IS para temas de autenticación y autorización para los servicio web la funcionalidad de SSO está presente ya, por lo que de usar el CAS la estaría duplicando.

En las últimas versiones del IS viene una versión establece del SSO tanto para las herramientas de la misma suite, como para las aplicaciones web en JAVA. Y ahora revisando el blog de Prabath Siriwardena veo una entrada donde pone un ejemplo para aplicaciones en PHP lo cual incrementa el uso que se le puede dar al IS. Y para JAVA tienen esta otra entrada.

En próximas entradas estaré mostrando como usar el IS para SSO en aplicaciones web desarrolladas en JAVA y en PHP.

miércoles, 3 de julio de 2013


Los desarrolladores de software siempre estamos buscando como volver más ágiles nuestras aplicaciones, ya sea bien por un deseo propio o por los constantes cambios en el negocio. Tener la facilidad de modificar las reglas del negocio sin tener que sacar la aplicación de producción es el deseo de todo arquitecto.

Lo mismo pasa con los desarrolladores BPM que desean que sus procesos utilicen servicios de reglas, en vez de tener que implementarlas dentro del proceso.

Existe una necesidad de externalizar ese desarrollo de las reglas de negocio en sistemas que sean capaces de desplegarlas y ejecutarlas, y es ahí donde interviene WSO2 y su herramienta Business Rule Services o BRS, como la llamaremos a partir de ahora.

Esta herramienta permite desde su UI la implementación de servicios de reglas de negocio pero en esta ocasión quiero mostrarles las potencialidades del Developer Studio de WSO2 para la creación de reglas de negocio.

Precondiciones:
  • Tener eclipse JUNO instalado. Si tiene la versión más actual del STS mejor.
  • Tener el plugin Developer Studio 3.2.0 instalado en el IDE.


Paso 1:
Crear un proyecto “Business Rules Servic Project” usando el Developer Studio Dashboard.



Aquí los pasos son muy sencillos:
  • Le dan a la primera opción para crea un servicio de reglas.
  • Luego definen un nombre para el proyecto y un nombre para el servicio.
  • Y luego Next  y Finish.

En mi caso tengo el siguiente proyecto creado:

Por defecto se les abre el fichero Service.rsl y bueno ya le he puesto algunas cosas así que me luce así. Veremos cada una ahora.




Paso 2:

He añadido una regla que se ve de la siguiente manera:



O sea le he puesto una descripción a la regla y en la opción inline he copiado el siguiente texto:

import aplicacion.rrhh.Empleado; 
      
    rule "Programador" salience 11 dialect "mvel" no-loop true 
        when 
            $empleado : Empleado (promedioConocimientos >= 8 ) 
        then 
               $empleado.setCargo("Programador"); 
               $empleado.setSalario(500); 
    end 
      
    rule "Lider de Proyecto" salience 10 dialect "mvel" no-loop true 
        when 
            $empleado : Empleado (promedioConocimientos >= 6, promedioConocimientos <= 7) 
        then 
               $empleado.setCargo("Lider de Proyecto"); 
               $empleado.setSalario(1000); 
    end 
      
    rule "Analista" salience 9 dialect "mvel" no-loop true 
        when 
            $empleado : Empleado (promedioConocimientos >= 3, promedioConocimientos <= 5) 
        then 
              $empleado.setCargo("Analista"); 
              $empleado.setSalario(2000); 
    end  
      
    rule "Gerente" salience 8 dialect "mvel" no-loop true 
        when 
            $empleado : Empleado (promedioConocimientos >= 0, promedioConocimientos <= 2) 
        then 
            $empleado.setCargo("Gerente"); 
            $empleado.setSalario(3000); 
    end


Veamos la traducción de este texto para aquellos que no dominan el leguaje de Drools:

Supongamos que tenemos una empresa X que quiere automatizar la forma en que le asigna el salario y el cargo a sus trabajadores en dependencia de su nivel de conocimientos. Esta es la forma en que lo hace:
El nivel de conocimientos va desde 0 y hasta más de 8. Mientras más conocimiento más alto el valor.
  • Si el trabajador tiene 8 o más de conocimientos entonces es programador y su salario es de 500.
  • Si el trabajador tiene 6 o 7 de conocimientos entonces es Líder de proyecto y su salario es de 1000.
  • Si el trabajador tiene 3 o hasta 5 de conocimientos entonces es Analista y su salario es de 2000.
  • Si el trabajador tiene 0 o hasta 2 de conocimientos entonces es Gerente y su salario es de 3000.
El servicio debe automatizarnos la asignación del rol y el salario al trabajador cuando le especificamos su nivel de conocimiento. Y eso es lo que aparece en el texto anterior, que se puede leer bastante fácil una vez que se tiene una comprensión de estas reglas para asignar rol y salario.

Ej.:  Esta regla:


    rule "Gerente" salience 8 dialect "mvel" no-loop true 
        when 
            $empleado : Empleado (promedioConocimientos >= 0, promedioConocimientos <= 2) 
        then 
            $empleado.setCargo("Gerente"); 
            $empleado.setSalario(3000); 
    end

Me dice que cuando un empleado tenga el nivel de conocimientos mayor o igual que cero y menos o igual que 2 tendrá el cargo de gerente y su salario será de  3000. Lo mismo se aplica para el resto de las reglas.


Seguimos.!!!!

Paso 3:

Vamos a crear ahora la clase que nos representa a un empleado. Para eso vamos a src/main/java dentro del proyecto, clic derecho y creamos una clase nueva:




Como ven es una clase muy sencilla, con los métodos get/set para cada uno de sus atributos.

Paso 4:

Volvemos al fichero  Service.rsl, a su pestaña de diseño y agregamos una operación nueva:

Para eso dan clic en el botón Add y luego la dejan de esta manera:


En mi caso la entrada es un objeto Empleado y la salida es el mismo objeto actualizado, por eso es que tanto la entrada como la salida se representan con la misma clase.

Y hasta aquí la implementación del servicio, porque ya está implementado. :-D

Ahora debemos desplegarlo en un BRS. En mi caso estaré usando uno local así que me aprovecharé de otras de las funcionalidades del WSO2 Developer Studio y crearé un servidor de WSO2 que me apunte al BRS que tengo.

Paso 5:

Para eso buscan la pestaña de Servers en el Eclipse y crear uno nuevo de la  siguiente manera:

En mi caso ya tenía  uno creado, si ustedes no lo tienen le dan a “Add”


Y ahí deben seleccionar usando el botón Browser la carpeta raíz de su BRS y listo.

El problema ahora es que el proyecto como lo tenemos no se puede desplegar en el BRS, para hacerlo debemos crear una Aplicación CARBON que nos empaquete este proyecto, y lo que desplegamos en el BRS es esta aplicación CARBON, que se encarga a su vez de desplegar el servicio de reglas.

Paso 6:

Para hacer esto volvemos al dashboard del Developer Studio y seleccionamos Carbon Application  Project.
Cuando lo hagan verán como nos lista todos los proyecto de WSO2 que tenemos en el workspace, y debemos seleccionar el de reglas de negocio. en mi caso luce así.

Le asignan un nombre y listo.

Luego es cosa de como cualquier aplicación web en java adicionarla al servidor CARBON que creamos antes y ejecutar el servidor.

Paso 7:

Cuando el servidor se inicie verán unos logs similares a estos:

[2013-07-02 23:33:19,741]  INFO - ApplicationManager Deploying Carbon Application : DespliegueReglaNegocio_1.0.0.car...
[2013-07-02 23:33:20,807]  INFO - ApplicationManager Successfully Deployed Carbon Application : DespliegueReglaNegocio {super-tenant}
[2013-07-02 23:33:36,890]  INFO - DeploymentInterceptor Deploying Axis2 service: SalaryRuleService {super-tenant}
[2013-07-02 23:33:36,949]  INFO - DeploymentEngine Deploying Web service: SalaryRuleService-1.0.0.aar -
[2013-07-02 23:33:42,927]  INFO - CarbonAuthenticationUtil 'admin@carbon.super [-1234]' logged in at [2013-07-02 23:33:42,927-0400]

Como ven nos ha desplegado la aplicación DespliegueReglaNegocio y esta a su vez nos ha desplegado el servicio SalaryRuleService-1.0.0.aar

Paso 8:

Abrimos la consola de administración, buscamos el servicio creado.

Y le damos “Try this Service”

Aquí tienen un pantallazo de la ejecución:

Y así en pocos pasos podemos tener creado un servicio web de reglas de negocio usando Drool y al cual podemos incorporarle todas las potencialidades de la suite de wso2 como son:

  • Múltiples niveles de seguridad para la autenticación y autorización.
  • Cacheo de la información.
  • Filtrado por IP.
  • Clusterización.
  • Transparencia de ubicación.
  • ……

Espero les resulte de utilidad y dejen su comentario.

lunes, 1 de julio de 2013

WSO2 Stratos 2.0 liberado y puesto a disposición de Apache Fundation


Hace unos días atrás se liberaba la nueva versión de la herramienta de WSO2 para la Computación en la Nube: Stratos.

Esta herramienta se desempeña como un Iaas y permite realizar diferentes despliegues tanto privados, como híbridos y públicos de la suite de herramientas de WSO2.

Ahora me desayuno con que se ha puesto a disposición de la ASF según veo en este enlace. Lo cual es una muy buena noticia pues nos dice que esta herramienta va por un muy buen camino.
Ya SUSE lo sabe y está claro que estas otras empresas también: Cisco, NASA, Citrix and Engine Yard.

Si a eso le sumamos que un reporte de Gartner ha llamado a este desarrollo como visionario, es más que suficiente entonces para tenerlo en el punto de mira si alguien desea intentar subirse a una nube :-D

Preguntas sobre la suite de WSO2


Para aquellos de habla hispana que tienen dudas o preguntas sobre el uso de la suite de WSO2 pueden hacer lo siguiente:

Si dominan algo de inglés pueden preguntar en este enlace: http://stackoverflow.com/questions/tagged/wso2 recuerden siempre poner los tags de wso2 más los relacionados a su pregunta.

Si no dominan el inglés o no tienen tiempo para traducir pues me pueden dejar la pregunta como un comentario en el blog y sin duda haré un tiempo para darles una respuesta, si está dentro de mis conocimientos técnicos de la suite de WSO2.