Activación de servicios de decisión basados en reglas como servicios web

Combinar la agilidad de las reglas con la flexibilidad de SOA

JRules permite que los servicios de decisión se muestren como un servicio web sin codificación alguna. Mostrar los servicios de decisiones de negocios como servicios web combina la agilidad de las reglas de negocio con la flexibilidad de SOA. Esto facilita una integración sencilla con otros productos habilitados para SOA.

Yang Chen Ming, Consultant, IBM Corporation

Yang Chen MingYan Chen Ming tiene seis años de experiencia basada principalmente en Sistemas de Gestión de Reglas de Negocios y JEE. Durante los últimos cuatro años, Yan ha trabajado en forma exhaustiva con la cartera de ILOG JRules.



04-08-2011

Introducción

WebSphere ILOG JRules es un Sistema de Gestión de Reglas de Negocios (BRMS por su sigla en inglés) líder que ofrece un conjunto integral de características que abarca todos los aspectos de las reglas de negocios, que van desde el diseño, el desarrollo, las pruebas, la implementación y la ejecución hasta el mantenimiento.

El servicio web es una tecnología que permite que las aplicaciones se comuniquen entre ellas de manera agnóstica basada en plataformas y lenguaje de programación. Un servicio web es una interfaz de software que describe un conjunto de operaciones a las que se puede acceder en la red por medio de mensajería XML estandarizada. El servicio web es de uso generalizado y juega un papel fundamental en la mayoría de las arquitecturas orientadas a los servicios (SOA).

JRules presenta una característica llamada Hosted Transparent Decision Server (HTDS) que permite que los servicios de decisión se muestren como un servicio web que no requiere codificaciones de programa adicionales.


Instalación y configuración

Para ejecutar esta muestra, hay que instalar y configurar correctamente los productos que se detallan a continuación:

  • IBM WebSphere ILOG JRules V7.0.x

Después de la instalación, deberemos poder:

  • Lanzar Rule Studio que viene con el instalador JRules.
  • Ver la página principal de la consola Rule Execution Server en http://localhost:8080/res/. Esto está soportado por la instancia del servidor tomcat lista para usar. Se necesitan configuraciones adicionales para que JRules se ejecute en otros servidores de aplicaciones, tales como WebSphere, u Oracle WebLogic.

Tome nota que no se necesitan los siguientes paquetes/componentes JRules para ejecutar la muestra.

  • Rule Team Server bundle
  • Decision Validation Service
  • Rule Solutions for Office

Escenario de generalidades

El escenario de negocios es muy sencillo. Supongamos que hay una solicitud de cotización de préstamo Java EE basada en Internet, que toma la información del cliente e invoca al servicio de decisiones para determinar la tasa del préstamo, si la solicitud del mismo cumple con los requisitos. Por practicidad, determinamos la tasa del préstamo con el monto del mismo y la edad del solicitante suministradas. Dos entidades clave son Customer (Cliente) y Loan (Préstamo).

Hay dos maneras de modelar el JRules Execution Object Model (XOM), esto es el modelo de objeto subyacente que aprovecha JRules durante la ejecución. Los objetos del dominio pueden modelarse tanto en Java como en XML. En esta muestra utilizamos XML XOM.

Figura 1. XML_Customer
XML_Customer
Figura 2. XOM_Loan
XOM_Loan

Hay dos reglas implementadas en el proyecto de regla, Loan Value (Valor del Préstamo) y Young Applicant (Solicitante Joven). Están categorizadas dentro del sub-paquete Eligibility (Elegibilidad) y Rating (Tasación) respectivamente.

Listado 1. SRule Eligibility.Loan Value
 if
        the advance amount of the loan of 'the customer' is more than 100000
        then
        set the decision of the loan of 'the customer' to "Declined";
        else
        set the decision of the loan of 'the customer' to "Accepted";
        set the rate of the loan of 'the customer' to 5.5;
Listado 2. Rule Rating.Young Applicant
if
                the age of 'the customer' is less than 21
                then
                set the rate of the loan of 'the customer' to 6.5;

El ruleflow instrumentado conecta las reglas tanto desde el paquete de elegibilidad como desde el paquete de tasación.

Figura 3. Ruleflow
Ruleflow

Los parámetros RuleSet definen la interfaz de datos para el ruleset que será invocado como servicio de decisión. El servicio de decisiones es capaz de determinar la tasa de préstamo apropiada para todas las entradas de Customer. La tasa de préstamo será devuelta en un objeto de cliente actualizado a través de customer.getLoan().getRate().

Figura 4. Parámetro RuleSet
Parámetro RuleSet

Hay muchas opciones de integración listas para usar, por ejemplo, servicio web, J2SE o el modo EJB Local/Remoto etc. En este artículo aprenderemos a habilitarlo como un servicio web. Supongamos que ya hemos creado de antemano este proyecto de regla LoanRules (compuesto por todos los elementos descriptos anteriormente), lo que haremos a continuación es lo siguiente.

  1. Crear un proyecto RuleApp para empaquetar LoanRules en un Archivo RuleApp
  2. Crear una Configuración de Servidor de Ejecución de Reglas para el Servidor Tomcat incorporado
  3. Implementar el Archivo RuleApp en Tomcat
  4. Generar y Verificar el archivo WSDL del Servicio de Decisiones
  5. Ejecutar un Cliente de servicio web para invocar al servicio web

Explicación detallada

Paso 1. Crear un proyecto RuleApp para empaquetar LoanRules en un Archivo RuleApp

Crear un nuevo proyecto RuleApp usando el asistente de “New Project” (Proyecto Nuevo). El proyecto RuleApp se usa para generar archivos RuleApp.

Figura 5. Creación de un RuleApp nuevo
Creación de un RuleApp nuevo

Especificar “LoanRules” y agregarlo al proyecto RuleApp. Al hacerlo, le estamos diciendo a JRules que el archivo RuleApp contendrá las reglas definidas en el Proyecto de Reglas "LoanRules".

Figura 6. Agregar RuleProject "LoanRules"
Agregar RuleProject

Aceptar las configuraciones predeterminadas restantes, y hacer clic en “Finish” (Finlizar). Ahora el proyecto RuleApp "LoanRuleApp" está listo.

Paso 2. Crear una Configuración de Servidor de Ejecución de Reglas para Tomcat

Observen que, aunque este paso es opcional para implementar el Servidor de Ejecución de Reglas (RES) ruleapp, se trata de un enfoque recomendado y más sistemático para almacenar la configuración del RES para usos futuros. Es mucho más sencillo cambiar el RES de destino si disponemos de una lista de configuraciones de RES para entornos de desarrollo, pruebas y producción.

Figura 7. Creación de un Proyecto de Configuración de RES nuevo
Creación de un Proyecto de Configuración de RES nuevo

Ingresar la configuración correcta para el servidor Tomcat, y especificar el usuario y contraseña para la Consola del Servidor de Ejecución de Reglas (RES) que se ejecuta en esta instancia tomcat. Verificar que la conexión funcione haciendo clic en el botón “Test Connection” (Probar Conexión).

Figura 8. Configuración del Servidor Tomcat
Configuración del Servidor Tomcat

Aceptar las configuraciones predeterminadas restantes, y hacer clic en “Finish”. Ahora tenemos nuestro Proyecto de Configuración de RES. Este proyecto será usado por el proyecto RuleApp que creamos en el Paso 1 para una implementación apropiada.

Paso 3. Implementar el Archivo RuleApp en Tomcat

Hacer doble clic en el archivo "archive.xml" de la carpeta de proyectos LoanRuleApp.

Figura 9. Abrir el Proyecto RuleApp
Abrir el Proyecto RuleApp

Tomar nota de que hay un vínculo “Deploy” (Implementar) en la parte inferior izquierda del panel. Hacer clic en él, se nos pide seleccionar una política de versiones. Como es la primera vez que implementamos un RuleApp, seleccionamos "Increment RuleApp major version” (Incrementar RuleApp a versión principal).

Figura 10. Implementación de una versión nueva
Implementación de una versión nueva

Hacer clic en el primer botón de opción y seleccionar “Tomcat”. Esto es para decirle a JRules que queremos que nuestras reglas se implementen en el servidor Tomcat. Hacer clic en “Finish” para finalizar el asistente.

Figura 11. Implementación de RuleApp en el Servidor
Implementación de RuleApp en el Servidor

El panel de la consola tendrá el mensaje detallado que indica que la implementación fue exitosa.

Figura 12. El mensaje indica que se implementó RuleApp
El mensaje indica que se implementó RuleApp

Paso 4. Generar y Verificar el archivo WSDL del Servicio de Decisiones

Iniciar sesión en la consola RES de Tomcat, la URL predeterminada es http://localhost:8080/res. Si es necesario, cambiar el nombre del host o del puerto. El nombre de usuario y contraseña predeterminados son resAdmin.

Una vez iniciada la sesión, hacer clic en la pestaña "Explorer" (Explorador). Se visualiza una lista de RuleApps implementadas. En este ejemplo, veremos un RuleApp llamado "LoanRuleApp" con versión 1.0.

Figura 13. RuleApp listada en la consola RES
RuleApp listada en la consola RES

Hacer clic en "LoanRuleApp" para entrar en la vista de RuleApp. Aquí es donde editamos las propiedades personalizadas para LoanRuleApp. En el panel "RuleSet" de abajo, hay una fila con el nombre "LoanRules". Este es el ruleset incluido en la LoanRuleApp.

Figura 14. Vista de RuleApp
Vista de RuleApp

Hacer clic en "LoanRules" para entrar en la vista del RuleSet.

Figura 15. Vista de RuleSet
Vista de RuleSet

Veremos un vínculo "Get HTDS WSDL for this ruleset version". Hacer clic en él para generar un archivo WSDL para este servicio de decisiones. Nos llevará a la página WSDL. La URL final de este servicio web es http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL.

Figura 16. WSDL generado
WSDL generado

Paso 5a. Simular un cliente de servicio web usando SOAPUI para invocar al servicio web

En este paso, usaremos SOAPUI como el cliente de servicio web que probará el servicio web mencionado anteriormente.

En primer lugar, crear un proyecto SOAPUI nuevo especificando en el cuadro de diálogo del asistente la URL del WSDL, http://localhost:8080/DecisionService/ws/LoanRuleApp/1.0/LoanRules/1.0?WSDL. Optionalmente, marcar la opción "Create sample requests for all operations” (Crear solicitudes de muestra para todas las operaciones) para ver el aspecto de la estructura del XML ingresado.

Figura 17. Asistente para Proyecto SOAPUI nuevo
Asistente para Proyecto SOAPUI nuevo

En segundo lugar, pegar el siguiente XML en el cuadro de solicitud del lado izquierdo de SOAPUI. Observar que hay un sufijo "Z" para el DOB del cliente, que significa la misma zona horaria que Coordinated Universal Time (UTC).

<?xml version="1.0" encoding="UTF-8"?>
<soapenv:Envelope xmlns:dec="http://www.ilog.com/rules/DecisionService" 
xmlns:loan="http://ilog.com/loan" 
xmlns:par="http://www.ilog.com/rules/param" 
xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
    <soapenv:Header>
    </soapenv:Header>
    <soapenv:Body>
        <dec:DecisionServiceRequest>
            <par:inputCustomer>
                <loan:Customer>
                    <loan:ID>AB1265H</loan:ID>
                    <loan:Salary>35000</loan:Salary>
                    <loan:Dob>1960-01-01Z</loan:Dob>
                    <loan:Security/>
                    <loan:Loan>
                        <loan:AdvanceAmount>100000</loan:AdvanceAmount>
                        <loan:Term>36</loan:Term>
                        <loan:PaymentFrequency>1</loan:PaymentFrequency>
                        <loan:ID>AB1265H</loan:ID>
                        <loan:Product/>
                    </loan:Loan>
                </loan:Customer>
            </par:inputCustomer>
        </dec:DecisionServiceRequest>
    </soapenv:Body>
</soapenv:Envelope>

Muestra de Mensaje de Entrada SOAP en XML

Hacer clic en el botón "Run" (Ejecutar), el mensaje de respuesta SOAP en XML aparecerá del lado derecho, desde donde seremos capaces de encontrar información relacionada con la decisión de negocios: Loan Accepted with the rate of 5.5 percent (Préstamo Aceptado con una tasa de 5.5 porciento).

Listado 3. Salida de XML
<Loan>
                        <AdvancedAmount>1000000.0</AdvancedAmount>
                        <Term>36</Term>
                        <Rate>5.5</Rate>
                        <RepaymentAmount xsi:null="true"/>
                        <Decision>Accepted</Decision>

El SOAPUI GUI que tenemos ahora se parecerá a la captura de pantalla que aparece a continuación en la figura 18.

Figura 18. Captura de pantalla de SOAPUI
Captura de pantalla de SOAPUI

Paso 5b. Ejecutar un Cliente Apache Axis para invocar el servicio web

En lugar de aprovechar el SOAPUI, los desarrolladores avanzados tal vez quieran implementar un Cliente Apache Axis para probar el servicio web. Por ejemplo, utilizaremos una aplicación .NET para verificar este servicio web.

Invocamos el servicio web mediante las clases ServiceLocator y PortType Estas clases se generan automáticamente por el WSDL2Java ant target.

DecisionServiceLoanRules_ServiceLocator service 
                = new DecisionServiceLoanRules_ServiceLocator();
                DecisionServiceLoanRules_PortType port 
                = service.getDecisionServiceSOAPlocalhost();
                
                DecisionServiceRequest request = new DecisionServiceRequest();
                DecisionServiceResponse response = null;
                
                InputCustomer customerWrapper = new InputCustomer();
                Customer customer = new Customer();

Inicializar Axis ServiceLocator y la instancia portType

Luego establecemos los datos de entrada de type Customer (tipo Cliente). Tiene los siguientes valores. En particular el DOB del cliente es 1 de enero, 1960, y el monto del préstamo es US$100,000.

customer.setID("AB1265H");
                customer.setSalary(35000.00);
                customer.setDob(new Date(60,1,1));
                Loan loan = new Loan();
                loan.setAdvanceAmount(100000.00);
                loan.setTerm(36);
                loan.setPaymentFrequency(1);
                loan.setProduct(new Product());
                customer.setLoan(loan);

Completar datos de entrada

El último paso es invocar el servicio de decisiones e imprimir la tasa del préstamo. Si la decisión es rechazar la solicitud del préstamo, Customer.Loan.Decision se establecerá el atributo en "Rejected".

response = port.executeDecisionService(request);
                InputCustomer customerWrapperReturned = response.getInputCustomer();
                System.out.println("The decision is " +
                customerWrapperReturned.getCustomer().getLoan().getDecision());
                System.out.println("The rate is " +
                customerWrapperReturned.getCustomer().getLoan().getRate());

Extraer e Imprimir Datos de salida

A continuación, ejecutamos el cliente. El resultado aparece impreso en la pantalla. El préstamo será aceptado, la tasa supuesta del préstamo es 5.5 por ciento. El primer mensaje de salida "Unable to find required class….” (Clase requerida no encontrada) la correspondiente biblioteca MIME faltante no es relevante para nuestro caso de prueba, ignórelo.

Figura 19. Salida de Consola Java
Salida de Consola Java

Conclusión

JRules genera y aloja el servicio web automáticamente después de una implementación correcta de RuleApp. Esto combina la agilidad que brinda JRules con la flexibilidad que viene con los servicios web. Esta característica facilita una integración más pareja con otros productos IBM como WebSphere Process Server, WebSphere Enterprise Service Bus y WebSphere Message Broker.

Recursos

Aprender

Obtener los productos y tecnologías

  • Evalúe los productos IBM de la forma que más le convenga: Descargue una prueba de producto, pruebe un SOA Sandbox aprendiendo a implementar Arquitectura Orientada a los Servicios de manera eficiente.

Comentar

  • Involúcrese en la Comunidad My developerWorks.Conéctese con otros usuarios de developerWorks mientras explora los blogs, foros, grupos, y wikis impulsados por desarrolladores.

Comentarios

developerWorks: Ingrese

Los campos obligatorios están marcados con un asterisco (*).


¿Necesita un IBM ID?
¿Olvidó su IBM ID?


¿Olvidó su Password?
Cambie su Password

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


La primera vez que inicie sesión en developerWorks, se creará un perfil para usted. La información en su propio perfil (nombre, país/región y nombre de la empresa) se muestra al público y acompañará a cualquier contenido que publique, a menos que opte por la opción de ocultar el nombre de su empresa. Puede actualizar su cuenta de IBM en cualquier momento.

Toda la información enviada es segura.

Elija su nombre para mostrar



La primera vez que inicia sesión en developerWorks se crea un perfil para usted, teniendo que elegir un nombre para mostrar en el mismo. Este nombre acompañará el contenido que usted publique en developerWorks.

Por favor elija un nombre de 3 - 31 caracteres. Su nombre de usuario debe ser único en la comunidad developerWorks y debe ser distinto a su dirección de email por motivos de privacidad.

Los campos obligatorios están marcados con un asterisco (*).

(Por favor elija un nombre de 3 - 31 caracteres.)

Al hacer clic en Enviar, usted está de acuerdo con los términos y condiciones de developerWorks.

 


Toda la información enviada es segura.


static.content.url=http://www.ibm.com/developerworks/js/artrating/
SITE_ID=90
Zone=SOA y servicios web
ArticleID=588300
ArticleTitle=Activación de servicios de decisión basados en reglas como servicios web
publish-date=08042011