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.
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
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
Figura 2. 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
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
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.
- Crear un proyecto RuleApp para empaquetar LoanRules en un Archivo RuleApp
- Crear una Configuración de Servidor de Ejecución de Reglas para el Servidor Tomcat incorporado
- Implementar el Archivo RuleApp en Tomcat
- Generar y Verificar el archivo WSDL del Servicio de Decisiones
- Ejecutar un Cliente de servicio web para invocar al servicio web
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
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"
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
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
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
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
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
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
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
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
Hacer clic en "LoanRules" para entrar en la vista del RuleSet.
Figura 15. 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
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
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
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);
|
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
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.
Aprender
- El Centro de Información IBM WebSphere ILOG
JRules v7 es un único portal Web para toda la documentación WebSphere ILOG
JRules v7, con información conceptual, de tareas, y de referencia sobre la
instalación, configuración, uso y personalización de su entorno WebSphere
MQ.
- Comience ya con un tutorial integral que
abarca los principales temas de JRules.
- Lea más sobre las novedades de JRules v7con recursos
técnicos para una explicación detallada sobre las nuevas características
introducidas en JRules v7.
- Descargue la prueba WebSphere ILOG JRules v7, una
descarga de prueba gratuita de WebSphere ILOG JRules v7. Incluye soporte online
limitado para instalaciones Windows y Linux en forma gratuita durante el período de
prueba.
- Vea la zona de conectividad de aplicaciones
developerWorks WebSphere para acceder a instructivos de conectividad
WebSphere (ex-WebSphere business integration), descargas, tutoriales, educación,
información del producto, y más.
- Vea la zona de gestión de procesos developerWorks
WebSphere business para acceder a instructivos WebSphere BPM, descargas,
tutoriales, educación, información del producto, y otros recursos para ayudarlo a
modelar, ensamblar, implementar, y gestionar procesos de negocios.
- En el área de servicios SOA and
Web developerWorks, obtenga los recursos necesarios para mejorar sus
habilidades.
- Manténgase al día con eventos técnicos developerWorks y
transmisiones por Internet enfocados en una variedad de temas sobre productos
IBM y de la industria IT.
- Concurra a una sesión informativa DeveloperWorks ¡En
Vivo! para ponerse rápidamente al día sobre los productos y herramientas IBM
así como sobre tendencias de la industria IT.
- Siga a SOA por Twitter.
- Mire demostraciones a pedido de
developerWorks que van desde instalación de productos y demos de
configuración para principiantes, hasta funcionalidades avanzadas para
desarrolladores experimentados.
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.
