Monday, October 19, 2009

ILog y OpenRules

Gracias a una pregunta del foro de la comunidad java México http://www.comunidadjava.org/, me pareció importante crear una entrada sobre ILog y OpenRules.

Para empezar con el pie derecho vamos a plantear algunas preguntas:: ¿Se va a poner de moda openRules y/o ILog? según yo Sí! . ¿La moda sera planteada como una panacea? Sí, y los vendedores tocaran tu puerta. ¿Todos debemos usar un motor de reglas de negocio? No, pero buena parte podria (mas no deberia). ¿Puedo entrarle a ILog/OpenRules? Sí, hay que trabajar duro en el diseño pero todos podemos.

¿Es muy caro? Depende, openRules es openSource y es relativamente barato, ILog puede llegar a ser muy caro dependiendo de los módulos que te interesen.

Primero hay que dejar claro que los motores de reglas de negocio ILog y OpenRules son muy distintos pero con una filosofía similar, OpenRules solo trabaja con "Tablas de decisión" y un conjunto reducido de opciones, mientras que ILog es mas completo. A pesar de esto OpenRules es una herramienta sencilla, practica y poderosa, para descargar en ella la responsabilidad de manejar nuestras reglas de negocio.

¿Como que puedo hacer con OpenRules? Tablas de decisión, déjame mostrarte como es esto.

Los pasos que vamos a seguir son:


  • Entender nuestra regla de negocio y expresarla como una tabla en Excel.

  • Reordenar nuestra regla de negocio como una serie de condiciones que nos llevan
    a una serie de acciones. Dentro del mismo Excel!.

  • Leer y ejecutar la regla desde ese mismo Excel con la ayuda de OpenRules.



Supongamos que nuestro experto de negocio nos pasa una tabla en Excel donde están las reglas que quiere que el sistema valide, cosas del tipo:

  • Todos los clientes con cuatro o mas productos de la categoría A son acreedores a un descuento.

  • Cuando los productos de la categoría A y B para las sucursales 1,2,3 8 y 9, son usados para calcular el bono del vendedor se debe tomar la tasa especial del 4% para calcular su comisión.

  • Si los clientes hacen reservaciones en un Hotel de la cadena Hilton, se debe generar un bono por el 5% del monto total a facturar, valido en toda la cadena de hoteles con vigencia de tres meses, en destinos nacionales.



Este tipo de reglas y como muchas otras cosas son del tipo condición -> acción; causa -> efecto. Típicamente las reglas que genera el experto de negocio son fácilmente expresables como varias tablas de Excel, una vez que tenemos la regla expresada de esa manera, un desarrollador debe tomar esas reglas y afinarlas , para determinar posibles contradicciones y reglas múltiples.

Cada condición de la regla se evalúa usando expresión Java como la que usaríamos en un "IF" cualquiera . Está expresión se evalúa para cada uno de los posibles valores de la condición (los valores de la columna). Donde la expresión tenga un valor TRUE, la regla hace "match". Las condiciones de la tabla se leen de izquierda a derecha y de arriba hacia abajo. En la imagen que muestro a continuación vemos cinco columnas (C1,C2,C3,C4 y C5) de condiciones cada una con una variable asignada, Cliente, Monto, Sucursal, Producto y Frontera.



Después se le asigna un nombre como si fuera un método normal Java , en este caso recorteMontosInformal (atención a la firma del método!!!). Al terminar este proceso, vamos a diferenciar las columnas de la tabla como condiciones y acciones; estas condiciones y acciones quedan asociadas a métodos y/o otros atributos de clase (Ver imagen, lineas 49,50,51...). Por ejemplo en el caso presentado celda E50 tenemos "xSolicitud.getProducto().equals(producto)" donde:


  • xSolicitud: Es el parametro de entrada de la tabla. El parametro del método!

  • getProducto(): Es el nombre de un método en el objeto xSolicitud, un simple método get

  • equals(producto): Es aquí donde se ejecuta la regla, donde producto, son los valores de la columna uno a la vez para evaluar la condición.



Obviamente lo que sucede es que el nombre de la regla/tabla (void recorteMontosInformal(Solicitud xSolicitud) es asociado por el openRules a un fragmento Java generado por el en base a los datos de la tabla de Excel.

Traduciendo la primera regla de la tabla a palabras mas entendibles tendríamos (rango de celdas B53-I53) los clientes de tipo A con un monto de factura de 1800 de cualquier sucursal (por eso la celda en blanco) que compraron en la frontera deben.... (y es aquí cuando bienen las acciones (columnas de la G-I)...) mantener su monto en 1800 (solo muestro el valor para fines ilustrativos, pero la celda bien se puedo haber quedado en blanco, pues no hubo cambio de valor como en filas posteriores) y pagar una comisión de 90 pesos con su respectivo IVA.

La información para validar la regla estaba ya en el objeto xSolicitud que se paso como "parámetro" a la tabla y las acciones afectan a este objeto con código Java como el señalado por la flecha en la imagen anterior. Dejénme mostrar el detalle.



Para usar openRules en tus proyectos Java solo tienes que incluir unas pocas librerías (2 Mb) y generar tu archivo JAR, WAR o EAR. Lo que le da a OpenRules una firma de librerías muy reducida y lo hace muy flexible.

Además el código para "ejecutar" la tabla es también muy sencillo.




package basic_types;
import com.openrules.ruleengine.OpenRulesEngine;

public class TestOpenRules
{
public void process(Solicitud xSolicitud)
{
String fileName =
"file:/workspace/HelloJava/rules/main/123.xls";
String methodName = "obtenerVerificaciones";

OpenRulesEngine engine = new OpenRulesEngine(fileName);
Object[] objects = new Object[] { xSolicitud };
engine.run(methodName,objects);
}
}






Para este caso elegi "Eclipse Galileo" para hacer la implementación , aunque quiero dejar claro que no tengo ninguna inclinación particular por Eclipse, ni lo recomiendo, simplemente es la herramienta que me sirvio para este ejemplo, cualquier otra herramienta puede ser igual o mejor que Eclipse.

¿Que mas se puede hacer a partir de aquí? Crear un WebServices , crear un applet , JSP, Portlets ? Lo que tu quieras la imaginación es el limite. :D...

La siguiente entrega ??? Afghanistan, JavaFx, El arte de la guerra y MTG... no lo sé...

Y la patria. Por Germán Dehesa.

Aquí hay dos historias. Está por una parte el tristisimo Via Crucis de la palabra "patria", un vocablo que tuvo nobilísimo origen y que ahora se ha entregado a la mala vida en boca de los políticos, los demagogos, los líderes sindicales y demás bichos rastreros

Para ventura nuestra, hay otra patria, la verdadera, la legítima que es muy difícil de formular con las palabras. Y sin embargo, existe.

Aquí me propongo contar, aunque sea a modo de esbozo, las dos historias de la patria. La primera, ya lo dije , llena oropel y de luces semejantes a las de las ferias; la otras es íntima , es callada y surge para quien quiera verla como una suerte de prodigio cotidiano.

Nosotros los ciudadanos tenemos que recononces nuestra grave falla: fuimos nosotros los que dejamos a la patria en manos de los políticos. Nadie parece molestarse, pero si comparámos aquella patria que les entregamos en un grave momento de debilidad cívica, con la que día a día nos devuleven "ojerosa y pintada" como dice el poeta, nos daríamos cuenta de la magnitud del daño que entre todos le hemos hecho a la patria, hasta el punto de dejarla irreconocible.

No pasa un solo día en el que un político o alguno de estos jilgueros aspirantes a engrosar las filas de la alta burocaria política, no emplee como coartada para sus delirios o burradas verbales o disfrazados delitos, a la pobre patria que no siente el aguacero, sino la granizada que la tiene en permanente prostración.

Octavio Paz reflexionó acerca de las palabras en sus ensayos y en sus poemas. En alguno de estos últimos nos muestra lo que le puede pasar a una palabra si se abusa de ella y si si emplea no para abrile espacio a la luz, sino para mantener la oscuridad. Dice Paz que esas palabras en cuanto se marchitan son desechadas por los mismos canallas que las protituyeron. Tal es el caso de la palabra "patria" que ya es inútil, sospechosa y poco significativa.

Nosotros los ciudadanos tendríamos que recuperarla, darle respiración boca a boca, patrocinarle un curo de rehabilitación y volverla a incluir con mucha mesura y sigilo en nuestra habla cotidiana.

También existe "eso" que casi no se nombra con las palabras. No hay manera de nombrar lo que experimentamos al visitar Tlacotalpan, o nuestro museo de Antropología, o mirar los verdes cañaverales cuando se cimbran acariciados por el viento que provoca la antigua canción de la inminente cosecha. De pronto un sorprendente acto de generosidad, o de buen amor nos recuerdan que sí, en efecto, estamos en México y que los mexicanos somos así, súbitamente dispuestos a relajarnos, o a jugarnos la vida por un amigo y que tenemos corazón de pollo y nos enamoramos un mínimo de dos veces diarias y no somos capaces de ser indiferentes ante ninguna pena, ni vicisitud de los hombres , u orfandad de los niños, o penurias de una mujer.

A Borges varias veces le pidieron que escribiera un poema dedicado a la patria. Jamás lo hizo por que sebía que era un tema intratable para aquellos que ya han experimentado el milagro de la patria. Lo más cercano que pudo escribir con referencia a este tema fueron tres palabras que pronunció en la Pampa mientras contempabla el amanecer y los tempranos trabajos de los gauchos que comenzaban a arriar a sus animales rumbo a la luz. Borges vio, olfateó, sintió todo esto y sólo pudo decir: "la patria, ¡carajo!".

No está en nosotros ser mejores poetas que Borges. En muchos momentos, México nos provoca un intensísimo amor; ése que sentimos al comer un taco de chicharrón en salsa verde, o al ver a dos ancianos que caminan juntos y del brazo, o al percibir lo que el poeta nombrara como el "santo olor de la panadería" ....México, ¡carajo!.

Friday, May 29, 2009

De regreso .... ;(

Soló regreso aqui para enfatizar mi situación actual de no saber que hacer. La lógica parece un camino fácil, hacer lo que hace el mosquito buscando el calor.

Ya no me siento tan distinto a los demas como yo pensaba que era...

No sé...

Este mes visite España, solo para recordar con un poco de tristeza todo lo que heredamos de esa bella tierra... que como muchas a visto como los hombres luchan por ella.

Regresaré....

Me asaltarón al regresar a mi México lindo y querido, pero me ayudo a recordar que hay algo que ningún ladrón me podra quitar, asi me mate en el intento.

Tuesday, April 7, 2009

Hoy regresé... ya que es un día muy importante.





Hoy despues de mucho tiempo quiero escribir un poco en mi blog.

Siento que hoy es un día muy importante para mi, creo que es el principio del camino en el que las cosas van tomando sentido. Acabo de leer un poco del libro de Remedios Varo, "Cinco llaves del mundo secreto de Remedios Varo"; me encanta la pintura de esta mujer, me parece sugestiva , estimulante , casi esperanzadora.

Tambien termine de leer el libro "Como la vida imita al ajedrez", para darme cuenta de como mi vida imita a mi ajedrez o como mi ajedrez imita a mi vida ó como mi ajedrez es reflejo de como vivo mi vida. Decisiones , decisiones , solo decisiones! . Estudiare al genio de Riga, tal vez el me pueda enseñar como tomar la decision contundente, eficiente y/o eficaz.

Me veo a mi y veo que no con el suficiente empeño llego a la parte culminante de mi medio juego, la parte en la que debo demostrar que mi idea funciona que mi estilo funciona, pero no logro dar el paso definitivo, la jugada contundente , el hechizo eficiente, la tactica ganadora, pero se que estoy "cerca" de dar ese paso, pues estoy en el camino correcto; mi camino.

No quiero que mi vida sufra el desenlace de mis partidas.