<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	xmlns:media="http://search.yahoo.com/mrss/"
	>

<channel>
	<title>.Salaboy</title>
	<atom:link href="http://salaboy.wordpress.com/feed/" rel="self" type="application/rss+xml" />
	<link>http://salaboy.wordpress.com</link>
	<description>.open.source.Rules!</description>
	<lastBuildDate>Tue, 07 Jul 2009 15:46:47 +0000</lastBuildDate>
	<generator>http://wordpress.com/</generator>
	<language>es</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<image>
		<url>http://www.gravatar.com/blavatar/31ec3a39a9cca55fd5733e2a6967b8f8?s=96&#038;d=http://s.wordpress.com/i/buttonw-com.png</url>
		<title>.Salaboy</title>
		<link>http://salaboy.wordpress.com</link>
	</image>
			<item>
		<title>Usuarios de Drools #1  &#8211; Empezando/No conozco</title>
		<link>http://salaboy.wordpress.com/2009/07/07/usuarios-de-drools-1-empezandono-conozco/</link>
		<comments>http://salaboy.wordpress.com/2009/07/07/usuarios-de-drools-1-empezandono-conozco/#comments</comments>
		<pubDate>Tue, 07 Jul 2009 15:40:38 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[accion]]></category>
		<category><![CDATA[Argentina]]></category>
		<category><![CDATA[condicion]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[empezando]]></category>
		<category><![CDATA[engine]]></category>
		<category><![CDATA[expert]]></category>
		<category><![CDATA[expertos]]></category>
		<category><![CDATA[inference]]></category>
		<category><![CDATA[inferencia]]></category>
		<category><![CDATA[motor]]></category>
		<category><![CDATA[produccion]]></category>
		<category><![CDATA[regla]]></category>
		<category><![CDATA[sistemas]]></category>
		<category><![CDATA[systems]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=732</guid>
		<description><![CDATA[Continuando con la temática de mi post anterior y todavía sin haber tenido tiempo de formalizar los datos con una encuesta sobre el tema, voy a abordar lo que a mi manera de ver las cosas divide a los grupos/nubes antes mencionados.
De esta clasificación surge el titulo de este post, por eso #1 &#8211; Empezando, [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=732&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Continuando con la temática de mi <a href="http://salaboy.wordpress.com/2009/06/29/drools-5-x-sondeo-local/">post anterior</a> y todavía sin haber tenido tiempo de formalizar los datos con una encuesta sobre el tema, voy a abordar lo que a mi manera de ver las cosas divide a los grupos/nubes antes mencionados.</p>
<p>De esta clasificación surge el titulo de este post, por eso #1 &#8211; Empezando, va a caracterizar a la primer gran nube mencionada anteriormente. Esta clasificación, esta hecha teniendo como base el hecho de que JBoss y todos sus proyectos, estan hechos por desarrolladores para desarrolladores. (Se puede relacionar esto con el termino Middleware, probablemente este muy relacionado, mucha gente no lo alcanza a ver). Con esto ya dejamos afuera todo aquel que no quiera o sepa desarrollar aplicaciones. Esto no quiere decir que el resultado de lo que implementemos con Drools, no pueda ser usado por estadistas, analistas, gerentes, humanos, etc. Todo lo contrario, estos van a ser nuestros usuarios, pero necesitamos ser desarrolladores y tener una formación de desarrollador para entender por completo el fin, la manera de uso y como esta construido Drools como proyecto.</p>
<p>Mas que nada este post esta orientado a estas personas, que ni siquiera conocían la plataforma Drools, o que si la conocían, solamente la conocían por el nombre. Es importante, para este grupo de personas, recibir algo de orientación inicial, debido a que la documentación oficial, toma como base que estamos muy interiorizados con varios temas que a muchas personas les resulta difícil.</p>
<p>Si te sentís desorientado, no sabes por donde empezar, leyendo la documentación te das cuenta de que no manejas conceptos como por ejemplo: de motor de inferencia, motor de reglas, BPM, Procesos, CEP, etc. Este post esta orientado a ir iterativamente agregando distintas fuentes de información para introducir y relacionar todos estos temas, cuyas bases teóricas son fundamentales para entender como funciona Drools.</p>
<p>Por lo tanto a esta altura, tu gran problema es el <strong>Background teórico</strong> faltante. Y entender como funciona y como esta hecho internamente un <strong>motor de inferencia</strong> (el core de Drools como proyecto desde que empezó) se hace fundamental para aclarar el panorama. No hace falta irse al otro extremo de saber como implementar un motor de inferencia (me gustaría llegar a esto en algún post) pero si es necesario entender los conceptos básicos de funcionamiento y por sobre todo entender conceptualmente que representa y que soluciona.</p>
<p>Para esto voy a usar este post, para ir actualizandolo con artículos que explican y abordan temas conceptuales y genéricos, no solamente sobre Drools. Abordando los conceptos de motor de inferencias, sistemas expertos, sistemas de producción, etc, la documentación de <strong>Drools Expert </strong>empieza a tomar otra forma.</p>
<h1><strong>Algunos conceptos importantes</strong></h1>
<p>Esta sección va a listar algunas definiciones muy cortas, usadas para empezar a entrar en tema, junto con un listado de lecturas de referencia para ampliar cada tema en particular. Por mi parte voy a ir tratando de extraer las secciones de máximo interés para armar una mini guia conceptual que nos introduzca las herramientas necesarias para empezar con el pie derecho.</p>
<h1><strong><strong>Sistemas Expertos (Expert Systems)<br />
</strong></strong></h1>
<p>Se conoce como un sistema experto, un programa o pieza de software, que intenta imitar las decisiones o acciones tomadas por un experto humano en un dominio(rubro) especifico.</p>
<p>Estos sistemas, hacen uso de motores de inferencia, o motores de razonamiento, para ser mas genéricos, los cuales permiten basándonos en el conocimiento de un dominio, llegar a conclusiones a las que un experto humano llegaría.</p>
<h2><strong>Referencias:</strong></h2>
<p><a href="http://es.wikipedia.org/wiki/Sistemas_Expertos">http://es.wikipedia.org/wiki/Sistemas_Expertos</a></p>
<h1><strong>Motor de inferencias (Inference Engine)</strong></h1>
<p>Básicamente es un programa, o pieza de software, que trata de derivar una respuesta basándose en una base de conocimientos. Donde por base de conocimientos, entendemos que es algo similar a una base de datos, pero especializada para guardar conocimiento, ordenarlo y poder obtenerlo fácilmente. Teniendo como foco principal el hecho de poder llegar a nuevas conclusiones, basadas en el conocimiento almacenado.</p>
<p>Estos motores de inferencia, esta fuertemente relacionados con el ámbito de los sistemas expertos, ya que se considera que un motor de inferencia es el cerebro de un sistema experto.</p>
<h2><strong>Referencias:</strong></h2>
<p><a href="http://en.wikipedia.org/wiki/Inference_engine">http://en.wikipedia.org/wiki/Inference_engine</a></p>
<p><a href="http://es.wikipedia.org/wiki/Inferencia">http://es.wikipedia.org/wiki/Inferencia</a></p>
<h1><strong>Sistemas de Producción (Production Systems)<br />
</strong></h1>
<p>Son sistemas muy relacionados con la inteligencia artificial, construidos con bases en reglas (producción/production) y comportamientos asociados. A grandes rasgos, y con mi visión muy superficial sobre estos temas tan teóricos, relaciono la palabra producción no con el hecho de producir algo, sino al revés con que algo se produce y debemos saber que comportamiento tenemos que tomar en ese momento.</p>
<p>Para ser mas claros, estas producciones/reglas están formadas por dos partes. La primera parte es conocida como sensor, pre condición, guarda o solamente condición y es la encargada de describir un estado particular de nuestro mundo.</p>
<p>Cuando nuestro mundo coincide con algún estado expresado por alguna de las N condiciones que podemos tener, se dice que la producción/regla es activada. Aquí es donde entra en juego la segunda parte de la producción, que es llamada acción. La cual se ejecuta cuando la regla es disparada.</p>
<p>La manera mas simple de ver una producción/regla es la siguiente:</p>
<pre>RULE "nombre"
IF/WHEN
         CONDITION
THEN
         ACTION</pre>
<p>Cuando la acción es ejecutada, podemos decir que la regla ha sido disparada.</p>
<p>Otro concepto importante aquí, es lo que se conoce como memoria de trabajo (working memory), que es la encargada de tener el estado del mundo y sobre cual se ejecutan las acciones. Estas acciones muchas veces tienen la función de modificar el estado del mundo, pudiendo así causar la activación de otras reglas de manera recursiva.</p>
<p>Como últimos detalles, podemos decir que los sistemas de producción deben incluir dos cosas claves:</p>
<ol>
<li>Un algoritmo para comparar las condiciones y el estado actual del mundo eficiente. (Voy a dedicarle un post aparte a este tema, ya que aca entran los conceptos de forward y backward chainning junto con el algoritmo RETE, LEAPS,TREAT, etc)</li>
<li>Un algoritmo para priorizar activaciones en caso de que dos o mas condiciones se activen al mismo tiempo.</li>
</ol>
<h2><strong>Referencias:</strong></h2>
<p><a href="http://en.wikipedia.org/wiki/Production_system">http://en.wikipedia.org/wiki/Production_system</a></p>
<p><a href="http://www.cse.unsw.edu.au/~billw/cs9414/notes/kr/rules/rules.html">http://www.cse.unsw.edu.au/~billw/cs9414/notes/kr/rules/rules.html</a></p>
<h1><strong>Conclusión</strong></h1>
<p>Si bien las referencias son pobres, la idea es ir agregando y refinando los conceptos sobre este mismo post, a medida que las preguntas surjan.</p>
<p>Espero poder avanzar con cada uno de estos temas en particular, para que el background teórico vaya solidificándose hasta que el uso de la herramienta sea solamente comprender como fue implementada cada parte y cada concepto.</p>
<p>Cualquier comentario/corrección sobre los términos y conceptos discutidos aquí es totalmente bienvenida.</p>
<p>Saludos</p>
<div id="_mcePaste" style="overflow:hidden;position:absolute;left:-10000px;top:371px;width:1px;height:1px;"><span dir="ltr"> </span><a href="http://www.losandes.com.ar/notas/2009/7/6/un-433782.asp">http://www.losandes.com.ar/notas/2009/7/6/un-433782.asp</a></div>
Posted in Java, JBoss Drools, jbug Tagged: accion, Argentina, condicion, Drools, empezando, engine, expert, expertos, inference, inferencia, jbug, motor, produccion, regla, sistemas, systems <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/732/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/732/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/732/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/732/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/732/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/732/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/732/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/732/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/732/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/732/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=732&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/07/07/usuarios-de-drools-1-empezandono-conozco/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>Trabajar con el equipo de Drools en Argentina</title>
		<link>http://salaboy.wordpress.com/2009/07/02/trabajar-con-el-equipo-de-drools-en-argentina/</link>
		<comments>http://salaboy.wordpress.com/2009/07/02/trabajar-con-el-equipo-de-drools-en-argentina/#comments</comments>
		<pubDate>Thu, 02 Jul 2009 18:56:34 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[Argentina]]></category>
		<category><![CDATA[buenos aires]]></category>
		<category><![CDATA[capital federal]]></category>
		<category><![CDATA[cv]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[hat]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[job]]></category>
		<category><![CDATA[open]]></category>
		<category><![CDATA[red]]></category>
		<category><![CDATA[source]]></category>
		<category><![CDATA[trabajo]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=728</guid>
		<description><![CDATA[Este post es mas que nada para reflejar la propuesta de trabajo publicada en el blog oficial del proyecto JBoss Drools.
http://blog.athico.com/2009/07/drools-job-requested-buenos-aires.html
En el link anterior se encuentran los requisitos minimos y la explicación de que se busca en el trabajo.
A resumidas cuentas, mis empleadores andan buscando un nuevo compañero para trabajar a la par mía en [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=728&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Este post es mas que nada para reflejar la propuesta de trabajo publicada en el blog oficial del proyecto JBoss Drools.</p>
<p><a href="http://blog.athico.com/2009/07/drools-job-requested-buenos-aires.html">http://blog.athico.com/2009/07/drools-job-requested-buenos-aires.html</a></p>
<p>En el link anterior se encuentran los requisitos minimos y la explicación de que se busca en el trabajo.</p>
<p>A resumidas cuentas, mis empleadores andan buscando un nuevo compañero para trabajar a la par mía en el proyecto JBoss Drools. Esto requiere bastante entrega y dedicación en el sentido de que si o si tiene que gustarte y tenes que querer ser parte de un proyecto Open Source con todo lo que esto conlleva.</p>
<p>Si estas interesado, crees que podes cumplir con los requisitos necesarios y tenes la pasional y el deseo de ser parte de un proyecto Open Source. Manda tu CV a mi casilla personal (salaboy@gmail.com) usando DROOLS JOB como subject.</p>
<p>Saludos.</p>
<p>PD: dudas o comentarios seran bienvenidos aqui en el post.</p>
Posted in Java, JBoss Drools, jbug Tagged: 2009, Argentina, buenos aires, capital federal, cv, Drools, hat, JBoss, job, open, red, source, trabajo <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/728/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/728/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/728/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=728&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/07/02/trabajar-con-el-equipo-de-drools-en-argentina/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>Drools 5.x &#8211; Sondeo local</title>
		<link>http://salaboy.wordpress.com/2009/06/29/drools-5-x-sondeo-local/</link>
		<comments>http://salaboy.wordpress.com/2009/06/29/drools-5-x-sondeo-local/#comments</comments>
		<pubDate>Mon, 29 Jun 2009 19:19:11 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[Java]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=711</guid>
		<description><![CDATA[En Argentina, he tenido la oportunidad de estar en varios ambientes laborales, donde desde hace casi tres años ya, por lo general he estado relacionado con proyectos de JBoss. Por lo general, los más populares como Hibernate, Application Server, JBoss Portal últimamente, siempre están presente en las empresas. Al menos algo con que compararlos. Si [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=711&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>En Argentina, he tenido la oportunidad de estar en varios ambientes laborales, donde desde hace casi tres años ya, por lo general he estado relacionado con proyectos de JBoss. Por lo general, los más populares como Hibernate, Application Server, JBoss Portal últimamente, siempre están presente en las empresas. Al menos algo con que compararlos. Si no usas Hibernate, usas Top Link, o tu propio framework ORM. Si no usas el Application Server de JBoss, y estas en el mundo Java tenes siempre las opciones de usar Spring, cada vez mas, Glassfish de Sun, o alguno propietario.</p>
<h1><strong>Cambio de paradigma</strong></h1>
<p>Por lo general en el mundo Java dentro de la Argentina, más allá de algún framework de presentación un poco innovador, lo demás sigue siendo todo igual.<br />
Ya hace un tiempo, vengo tratando de involucrarme de manera activa a proyectos Open Source de JBoss, ya que veo que JBoss es una empresa donde la participación activa es bienvenida y apreciada. Más allá de la empresa y mis ganas de participar en proyectos Open Source, toda esta experiencia me ha hecho descubrir y dar un paso mas adelante en frameworks que JBoss ha ido sacando adelante y de alguna manera cambian nuestra forma de pensar aplicando algún nuevo paradigma a la programación Orientada a Objetos tal como la conocemos.</p>
<p>El primer paso fue jBPM, que por lo que veo cada día esta mas aceptado en el mercado local. Como podrán haber visto, tengo varios post sobre esto, ya que fue una de las primeras herramientas que me cambio enormemente el punto de vista que tenia sobre como hacer aplicaciones.<br />
Actualmente con mi salto al proyecto Drools y con la aparición de la versión 5.x un salto mas grande se propone. Esto como desarrollador, por supuesto que atrae y despierta interés, mas cuando las bases teóricas del proyecto parecen ser indestructibles.</p>
<p>Siguiendo con mi punto inicial, al estar involucrado fuertemente con el proyecto, queriendo que la gente lo use, contribuyendo lo que mas se pueda con el uso y la difusión del mismo, automáticamente genero un sondeo de como están Drools en mis círculos laborales y en el de los otros profesionales que también conozco.</p>
<h1><strong>Sondeo Local</strong></h1>
<p>EL sondeo local  me da el siguiente resultado, que es bastante aproximado y a ojo (prometo formalizarlo con algún tipo encuesta) de lo que se ve cuando uno menciona Drools en un ambiente de IT &#8220;normal&#8221; en Argentina (por supuesto mi limitada Argentina):</p>
<h2><strong>1) Primer gran nube: (85% -&gt; +/- 10%)</strong></h2>
<p>La gran mayoría no sabe ni que es. En ambientes donde el perfil fuerte es el de un desarrollador Web, la pregunta:  Conocen el proyecto Drools?, esta totalmente fuera de lugar.</p>
<h2><strong>2) Segunda pequeña nube: (14% -&gt; +/- 3%)</strong></h2>
<p>En ambientes financieros, bancos, empresas de seguro, empresas de salud y sobre todo grandes empresas, tienen el concepto de Regla de Negocio bastante fresco. El problema por lo general son las implementaciones, muchas veces caseras, muchas veces propietarias y las limitaciones que todo esto trae. Mas alla de las limitaciones técnicas, muchas veces el gran problema son las limitaciones teóricas al respecto. Muchas veces estos sistemas de inferencia funcionan como una caja negra, donde sabemos como expresar reglas de negocio y sabemos que esperar de ellas. También por estos ámbitos tan grandes o complejos como puede ser el ámbito financiero o un banco, estos sistemas están muy relacionados con perfiles muy avanzados de IT y de conocimiento del negocio. Con este grupo, se puede hablar perfectamente de Drools, en la versión 4.x</p>
<h2><strong>3) Tercera casi invisible nube: (0.9% va en disminución -&gt; +/- 0.1%)</strong></h2>
<p>Personas que siguen el proyecto, pero tampoco tienen una visión clara de hacia dónde va y cúal es el cambio fundamental que ocurrió desde la versión 4.x a la 5.x. Hay que recordar que tomo 2 anios en lograr el cambio de versión. Esto es importante, ya que se maduraron cosas fundamentales y el proyecto tomo una nueva dirección, sobre las bases obtenidas con la versión 4.x.</p>
<h2><strong>4) Cuarta nube casi imperceptible: (0.1% y va en crecimiento)</strong></h2>
<p>Comprenden que la propuesta del proyecto es fuerte, y que realmente plantea un cambio profundo en la manera de pensar a la hora de desarrollar una aplicación.</p>
<h2><strong>*) Nota final sobre estos grupos</strong></h2>
<p>Como nota final a esta distribución en grupos de personas relacionadas con el framework, me gustaría dejar en claro que todos aquellos que lo han sentido nombrar al framework, tiene una concepción positiva del mismo. También he notado mucha gente demostrar que esta entusiasmada con el proyecto, sin saber que es realmente, ni cuando aplicarlo. Eso sin duda demarca dos grandes aspectos el proyecto:</p>
<ul>
<li> Mucha gente no entiende que es, ni para que sirve. Mucha de esta culpa esta en la documentación y en el enfoque de la misma. Si bien se han publicado libros al respecto (de esta ultima versión de Drools), no parecen ser, ni explicar la solución definitiva para comprender el enfoque de la herramienta.</li>
</ul>
<ul>
<li> Muchas personas saben que es un buen enfoque, pero no saben como se aplica, ni si hay casos de éxitos a nivel mundial de este proyecto. También es un error de JBoss por no mover esta información de manera mas efectiva. Lo mas sorprendente es que empresas muy grandes a nivel mundial vienen usando y están interesadas en Drools 5.x desde sus versiones muy beta, hace mas de 10 meses.</li>
</ul>
<h1><strong>Conclusión</strong></h1>
<p>Estos posts, más allá de ser aburridos, tratan de atacar estos problemas, en castellano para hacer foco en el mercado local y en la importancia que puede llegar a tener que la región latino americana empiece a adoptar estos  frameworks.<br />
El siguiente post estará orientado nuevamente a tratar de introducir los conceptos importantes para la adopción de una herramienta como Drools 5.x. Estos conceptos no son nada del otro mundo, ni tampoco son tan difíciles, es cuestión solamente de entender porque cambiar la forma de pensar y de a poco ir introduciendoce en la teoría detrás del framework.</p>
<p>Para ir cerrando, estaría bueno leer sus porcentajes, y sus sondeos sobre que piensa la gente sobre Drools, cualquiera sea su versión. Nada mejor que discutir y compartir esta información para saber que sabe la gente de Drools en Argentina y alrededores, que le hace falta a la gente saber para poder adoptar una herramienta tan poderosa como Drools, etc.<br />
Espero sus comentarios y sus críticas.</p>
Posted in Java  <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/711/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/711/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/711/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/711/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/711/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/711/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=711&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/06/29/drools-5-x-sondeo-local/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>The Java One Experience #0 &#8211; Jug Leaders Meeting</title>
		<link>http://salaboy.wordpress.com/2009/06/03/the-java-one-experience-0-jug-leaders-meeting/</link>
		<comments>http://salaboy.wordpress.com/2009/06/03/the-java-one-experience-0-jug-leaders-meeting/#comments</comments>
		<pubDate>Wed, 03 Jun 2009 05:49:04 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Misc]]></category>
		<category><![CDATA[Trips]]></category>
		<category><![CDATA[09]]></category>
		<category><![CDATA[2009]]></category>
		<category><![CDATA[javaone]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[jug]]></category>
		<category><![CDATA[leader]]></category>
		<category><![CDATA[moscone]]></category>
		<category><![CDATA[one]]></category>
		<category><![CDATA[san francisco]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=674</guid>
		<description><![CDATA[Mucho de San Francisco todavía no he podido conocer, pero ya la noche anterior a el comienzo de JavaOne 2009 me hizo relacionar a muchos nicknames con personas físicas! Todo un avance para este tipo de trabajo.
Ya durante la registración en Moscone Center, ya se empieza a notar la magnitud del evento, y porque el [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=674&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><div id="attachment_682" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-682" title="CIMG3154" src="http://salaboy.files.wordpress.com/2009/06/cimg3154.jpg?w=459&#038;h=345" alt="Pre Bienvenida al Pavilion" width="459" height="345" /><p class="wp-caption-text">Pre Bienvenida al Pavilion</p></div>
<p>Mucho de San Francisco todavía no he podido conocer, pero ya la noche anterior a el comienzo de JavaOne 2009 me hizo relacionar a muchos nicknames con personas físicas! Todo un avance para este tipo de trabajo.</p>
<div id="attachment_677" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-677" title="CIMG3156" src="http://salaboy.files.wordpress.com/2009/06/cimg3156.jpg?w=459&#038;h=345" alt="Entrada JavaOne" width="459" height="345" /><p class="wp-caption-text">Entrada JavaOne en Moscone Center</p></div>
<p>Ya durante la registración en Moscone Center, ya se empieza a notar la magnitud del evento, y porque el precio de la entrada.</p>
<p>Por hoy solo fue la registración y comida china con los Jug Leader de alrededor del mundo. Siempre es un placer saber en que anda la gente como Sang Shin (<a href="http://www.javapassion.com">www.javapassion.com</a>) and all the other Jug Leaders del mundo.</p>
<div id="attachment_678" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-678" title="CIMG3159" src="http://salaboy.files.wordpress.com/2009/06/cimg3159.jpg?w=459&#038;h=345" alt="Sang Shin El Lider de los Lideres" width="459" height="345" /><p class="wp-caption-text">Sang Shin El Lider de los Lideres</p></div>
<div id="attachment_679" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-679" title="CIMG3161" src="http://salaboy.files.wordpress.com/2009/06/cimg3161.jpg?w=459&#038;h=345" alt="JugLeader de Alemania y un amigo de San Francisco" width="459" height="345" /><p class="wp-caption-text">JugLeader de Alemania y un amigo de San Francisco</p></div>
<div id="attachment_680" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-680" title="CIMG3160" src="http://salaboy.files.wordpress.com/2009/06/cimg3160.jpg?w=459&#038;h=345" alt="Mesas y Mesas llenas de JUGLeaders" width="459" height="345" /><p class="wp-caption-text">Mesas y Mesas llenas de JUGLeaders</p></div>
<p>Como siempre en este tipo de eventos, muchos regalos y cosas locas que van desde:</p>
<p><strong>1) Robots con pelotas:</strong></p>
<div id="attachment_681" class="wp-caption aligncenter" style="width: 469px"><img class="size-full wp-image-681" title="CIMG3155" src="http://salaboy.files.wordpress.com/2009/06/cimg3155.jpg?w=459&#038;h=345" alt="Robot Pelotero" width="459" height="345" /><p class="wp-caption-text">Robot Pelotero</p></div>
<p><strong>2)</strong> pasando por un<strong> auto Java con una patente que decia Java4Road</strong>(??)</p>
<div id="attachment_685" class="wp-caption aligncenter" style="width: 470px"><img class="size-full wp-image-685" title="DSC00855" src="http://salaboy.files.wordpress.com/2009/06/dsc00855.jpg?w=460&#038;h=345" alt="Tutus" width="460" height="345" /><p class="wp-caption-text">el Tutus de Gosling?</p></div>
<p><strong>3) hasta las clasicas gigantografias bastante ingenieriles que no podian faltar.<br />
</strong></p>
<p><strong> </strong></p>
<div id="attachment_683" class="wp-caption aligncenter" style="width: 469px"><strong><strong><img class="size-full wp-image-683" title="CIMG3157" src="http://salaboy.files.wordpress.com/2009/06/cimg3157.jpg?w=459&#038;h=345" alt="Duke en un auto deportivo gigante.. infaltable.." width="459" height="345" /></strong></strong><p class="wp-caption-text">Duke en un auto deportivo gigante.. infaltable..</p></div>
<p><strong> </strong></p>
<p><strong>Finalmente registrado:</strong></p>
<div id="attachment_684" class="wp-caption aligncenter" style="width: 470px"><img class="size-full wp-image-684" title="CIMG3162" src="http://salaboy.files.wordpress.com/2009/06/cimg3162.jpg?w=460&#038;h=613" alt="Salaboy @ JavaOne" width="460" height="613" /><p class="wp-caption-text">Salaboy @ JavaOne</p></div>
<p>Los dejo hasta mañana, que comienzan las charlas interesantes, espero poder a la noche agregar algún feedback general del evento, ya  que solo por la registración y los stands de grandes empresas ya sorprenden.</p>
Posted in Java, Misc, Trips Tagged: 09, 2009, Java, javaone, jbug, jug, leader, moscone, one, san francisco <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/674/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/674/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/674/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/674/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/674/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/674/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/674/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/674/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/674/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/674/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=674&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/06/03/the-java-one-experience-0-jug-leaders-meeting/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3154.jpg" medium="image">
			<media:title type="html">CIMG3154</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3156.jpg" medium="image">
			<media:title type="html">CIMG3156</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3159.jpg" medium="image">
			<media:title type="html">CIMG3159</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3161.jpg" medium="image">
			<media:title type="html">CIMG3161</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3160.jpg" medium="image">
			<media:title type="html">CIMG3160</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3155.jpg" medium="image">
			<media:title type="html">CIMG3155</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/dsc00855.jpg" medium="image">
			<media:title type="html">DSC00855</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3157.jpg" medium="image">
			<media:title type="html">CIMG3157</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/06/cimg3162.jpg" medium="image">
			<media:title type="html">CIMG3162</media:title>
		</media:content>
	</item>
		<item>
		<title>Jugando con Drools 5.0 – #3 Drools Expert</title>
		<link>http://salaboy.wordpress.com/2009/05/29/jugando-con-drools-5-0-%e2%80%93-3-drools-expert/</link>
		<comments>http://salaboy.wordpress.com/2009/05/29/jugando-con-drools-5-0-%e2%80%93-3-drools-expert/#comments</comments>
		<pubDate>Fri, 29 May 2009 13:35:15 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[Argentina]]></category>
		<category><![CDATA[consulta]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[ejecucion]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[example]]></category>
		<category><![CDATA[expert]]></category>
		<category><![CDATA[fact]]></category>
		<category><![CDATA[hecho]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[negocio]]></category>
		<category><![CDATA[practico]]></category>
		<category><![CDATA[query]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[Salaboy]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=663</guid>
		<description><![CDATA[Continuando con los dos post anteriores (post1 y post2), vamos a analizar el comportamiento de la aplicación cuando la misma se ejecuta. La idea es explicar y aclarar el comportamiento del framework para esta situación en particular y además dejar planteado los comportamientos que por lo general se intentan modelar con estos motores de inferencias.
Primero [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=663&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Continuando con los dos post anteriores (<a href="http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/">post1</a> y <a href="http://salaboy.wordpress.com/2009/05/27/jugando-con-drools-5-0-2-drools-expert/">post2</a>), vamos a analizar el comportamiento de la aplicación cuando la misma se ejecuta. La idea es explicar y aclarar el comportamiento del framework para esta situación en particular y además dejar planteado los comportamientos que por lo general se intentan modelar con estos motores de inferencias.</p>
<p>Primero que nada recordemos el código que armaba la sesión de Drools con la que vamos a interactuar:</p>
<pre name="code" class="java">

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
 kbuilder.add(ResourceFactory.newInputStreamResource(new App().getClass().getResourceAsStream(&quot;/rules/juego.drl&quot;)),ResourceType.DRL);

 if (kbuilder.hasErrors()) {
 System.out.println(kbuilder.getErrors());
 return;
 }
 Collection&lt;KnowledgePackage&gt; kpkgs = kbuilder.getKnowledgePackages();
 KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
 kbase.addKnowledgePackages( kpkgs );

 StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);

 ksession.insert(new Juego(&quot;Poker&quot;,2));
 ksession.insert(new Jugador(&quot;Jugador 1&quot;));
 ksession.insert(new Jugador(&quot;Jugador 2&quot;));
 ksession.fireAllRules();
</pre>
<p>Como podemos ver, una vez que creamos la sesión podemos interactuar con ella mediante el método insert(), que va a insertar nuevos Facts/Hechos a la memoria de trabajo que posee Drools para realizar las inferencias. Una vez ejecutado el método insert(), el objeto ya se encontrara dentro de la memoria de trabajo y automáticamente Drools analizara que deducciones puede realizar sobre el.</p>
<h2>Análisis de la ejecución</h2>
<p>A continuación vamos a ir viendo como se relaciona la salida que obtenemos por consola con la ejecución del código y las evaluaciones que se realizan las reglas sobre los facts.</p>
<p>Cuando realizamos el primer ksession.insert(new Juego(&#8221;Poker&#8221;,2)); la siguiente linea aparece por consola:</p>
<pre>OBJECT ASSERTED value:Juego =Poker factId: 1</pre>
<p>Lo mismo sucede cuando insertamos el primero Jugador:</p>
<pre>OBJECT ASSERTED value:Jugador 1 - cartas: [] puntos =0 factId: 3</pre>
<p>Ahora cuando vamos a realizar el siguiente insert, es decir cuando llamamos al método insert e insertamos un nuevo Jugador, debido a que hay una regla que esta esperando 2 jugadores para activarse, una Activación es creada. Esto significa que ya hay una regla lista para ejecutarse para un set de Facts determinados.</p>
<pre>ACTIVATION CREATED rule:Comienza una ronda de Poker cuando hay n jugadores activationId:Comienza una ronda de Poker cuando hay n jugadores [2, 1] declarations: $jugadores=[Jugador 1 - cartas: [] puntos =0, Jugador 2 - cartas: [] puntos =0](2); $juego=Juego =Poker(1)
OBJECT ASSERTED value:Jugador 2 - cartas: [] puntos =0 factId: 4</pre>
<p>Si analizamos la linea que comienza con &#8220;<strong>ACTIVATION CREATED</strong>&#8221; veremos que nos indica el nombre de la regla que esta cumpliendo con la condición (y sus restricciones) junto con los datos de los Facts que las satisfacen.</p>
<p>Ahora bien, en nuestra aplicación, no llamamos mas al método insert, ahora es el turno de llamar al famoso y querido método fireAllRules(). Este método, se encargara de ejecutar las Activaciones creadas, que se hayan generado con los inserts anteriores. Por esto, las siguientes lineas se mostraran en la consola cuando el metodo fireAllRules se ejecute:</p>
<pre>BEFORE ACTIVATION FIRED rule:Comienza una ronda de Poker cuando hay n jugadores activationId:Comienza una ronda de Poker cuando hay n jugadores [2, 1] declarations: $jugadores=[Jugador 1 - cartas: [] puntos =0, Jugador 2 - cartas: [] puntos =0](2); $juego=Juego =Poker(1)
ACTIVATION CREATED rule:Iniciar Ronda Poker activationId:Iniciar Ronda Poker [5, 1] declarations: $dealer=Poker Dealer - cartas: [] puntos =0(5); $juego=Juego =Poker(1)
OBJECT ASSERTED value:Poker Dealer - cartas: [] puntos =0 factId: 5
AFTER ACTIVATION FIRED rule:Comienza una ronda de Poker cuando hay n jugadores activationId:Comienza una ronda de Poker cuando hay n jugadores [2, 1] declarations: $jugadores=[Jugador 1 - cartas: [] puntos =0, Jugador 2 - cartas: [] puntos =0, Poker Dealer - cartas: [] puntos =0](2); $juego=Juego =Poker(1)
BEFORE ACTIVATION FIRED rule:Iniciar Ronda Poker activationId:Iniciar Ronda Poker [5, 1] declarations: $dealer=Poker Dealer - cartas: [] puntos =0(5); $juego=Juego =Poker(1)
ACTIVATION CREATED rule:Nueva Ronda activationId:Nueva Ronda [18, 4, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 2 - cartas: [] puntos =0(4)
ACTIVATION CREATED rule:Nueva Ronda activationId:Nueva Ronda [19, 3, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 1 - cartas: [] puntos =0(3)
OBJECT ASSERTED value:Nueva Ronda factId: 6
AFTER ACTIVATION FIRED rule:Iniciar Ronda Poker activationId:Iniciar Ronda Poker [5, 1] declarations: $dealer=Poker Dealer - cartas: [13 de Pica, 13 de Diamante, 7 de Trebol, 8 de Corazon, 6 de Corazon, ] puntos =0(5); $juego=Juego =Poker(1)
BEFORE ACTIVATION FIRED rule:Nueva Ronda activationId:Nueva Ronda [18, 4, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 2 - cartas: [] puntos =0(4)
AFTER ACTIVATION FIRED rule:Nueva Ronda activationId:Nueva Ronda [18, 4, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 2 - cartas: [2 de Trebol, 4 de Corazon, ] puntos =0(4)
BEFORE ACTIVATION FIRED rule:Nueva Ronda activationId:Nueva Ronda [19, 3, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 1 - cartas: [] puntos =0(3)
AFTER ACTIVATION FIRED rule:Nueva Ronda activationId:Nueva Ronda [19, 3, 1, 6] declarations: $juego=Juego =Poker(1); $jugador=Jugador 1 - cartas: [9 de Pica, 13 de Trebol, ] puntos =0(3)</pre>
<p>Todo esto sucede cuando el método fireAllRules() se ejecuta, pero, que exactamente hace este método? Como vemos en la consola, lo primero que este método va a realizar es la ejecución de la activación que se habia generado cuando estábamos insertando facts en la sesión. La ejecución de estas activaciones van a ser loggeadas en consolas antes y después de ejecutarse. Esto es para que nosotros podamos ver, si la consecuencia de la regla que se ejecuta nos modifica el estado actual de la memoria de trabajo.</p>
<p>Como vemos en el log anterior, en las primeras 4 lineas, sucede exactamente esto que estábamos describiendo.</p>
<pre>BEFORE ACTIVATION FIRED rule:Comienza una ronda de Poker cuando hay n jugadores activationId:Comienza una ronda de Poker cuando hay n jugadores [2, 1] declarations: $jugadores=[Jugador 1 - cartas: [] puntos =0, Jugador 2 - cartas: [] puntos =0](2); $juego=Juego =Poker(1)
ACTIVATION CREATED rule:Iniciar Ronda Poker activationId:Iniciar Ronda Poker [5, 1] declarations: $dealer=Poker Dealer - cartas: [] puntos =0(5); $juego=Juego =Poker(1)
OBJECT ASSERTED value:Poker Dealer - cartas: [] puntos =0 factId: 5
AFTER ACTIVATION FIRED rule:Comienza una ronda de Poker cuando hay n jugadores activationId:Comienza una ronda de Poker cuando hay n jugadores [2, 1] declarations: $jugadores=[Jugador 1 - cartas: [] puntos =0, Jugador 2 - cartas: [] puntos =0, Poker Dealer - cartas: [] puntos =0](2); $juego=Juego =Poker(1)</pre>
<p>Entre un BEFORE ACTIVATION FIRED y un AFTER ACTIVATION FIRED, de la misma regla podemos ver si la consecuencia de la misma, cambio el estado de algún hecho/fact, se inserto un nuevo hecho/fact o por alguna otra razón se genero una nueva activación. En este caso en particular vemos que se creo una nueva Activación de de una regla llamada &#8220;<strong>Iniciar Ronda Poker</strong>&#8221; al haber sido insertado un objeto de tipo Dealer en la consecuencia de la regla &#8220;<strong>Comienza una ronda de Poker cuando hay n jugadores</strong>&#8220;.</p>
<p>Si recordamos la consecuencia de la regla &#8220;<strong>Comienza una ronda de Poker cuando hay n jugadores</strong>&#8220;, podemos ver que efectivamente esta regla esta insertando un nuevo hecho de tipo Dealer, con lo cual causa una nueva activación para la regla llamada &#8220;<strong>Iniciar Ronda Poker</strong>&#8220;.</p>
<pre name="code" class="java">

 then
    $juego.setMazo(MazoPoker());
    Dealer dealer =new Dealer(&quot;Poker Dealer&quot;);
    insert(dealer); 
</pre>
<p>Cuando este hecho/fact de tipo Dealer sea insertado en la memoria de trabajo de Drools, la regla llamada &#8220;<strong>Iniciar Ronda Poker</strong>&#8220;, que tiene la siguiente condición, genera una activación:</p>
<pre name="code" class="java">

  $juego: Juego(nombre == &quot;Poker&quot;)
  $dealer: Dealer() 
</pre>
<p>Esto se debe a que ya teniamos un Juego, el que nosotros habiamos insertado y ahora la regla anterior inserto un nuevo Dealer, entonces la consecuencia de la regla tiene que ser ejecutada.</p>
<p>Siguiendo esta misma lógica, pueden analizar el resto de las activaciones que se generan, asi modificar el ejemplo para que se generen nuevas o diferentes activaciones según el estado de la memoria de trabajo de Drools.</p>
<h2>Consultas sobre la memoria de trabajo</h2>
<p>Para ir terminando con este post, solo resta ver la ejecución de cada uno de los queries que se realiza al finalizar todas las inferencias. Es bueno aclarar también que cuando ya no quedan activaciones que ejecutar, el método fireAllRules devuelve el control a nuestra aplicación para que pueda continuar su ejecución.</p>
<p>Cuando el control retorna a la aplicación luego del método fireAllRules(), podemos consultar como quedaron nuestros hechos en la memoria de trabajo. Para esto podemos definir consultas/queries en nuestros archivos DRL que incluimos a la hora de armar nuestra sesión.</p>
<p>En este caso, se agrego la siguiente consulta:</p>
<pre name="code" class="java">

query &quot;Jugador por nombre&quot; (String qnombre)
  jugador : Jugador( nombre ==  qnombre)
end 
</pre>
<p>Es bueno notar que la sintaxis para definir consultas es la misma que para expresar restricciones en las condiciones de nuestras reglas.</p>
<p>La salida a consola de la ejecución de esta consulta con diferentes parámetros es la siguiente:</p>
<pre>El Dealer tiene las cartas:
OBJECT ASSERTED value:org.drools.base.DroolsQuery@f7a53d93 factId: 20
[Carta -&gt; 13dePica, Carta -&gt; 13deDiamante, Carta -&gt; 7deTrebol, Carta -&gt; 8deCorazon, Carta -&gt; 6deCorazon]

El Jugador 1 tiene las cartas:
OBJECT ASSERTED value:org.drools.base.DroolsQuery@f7a53d93 factId: 21
[Carta -&gt; 9dePica, Carta -&gt; 13deTrebol]

El Jugador 2 tiene las cartas:
OBJECT ASSERTED value:org.drools.base.DroolsQuery@f7a53d93 factId: 22
[Carta -&gt; 2deTrebol, Carta -&gt; 4deCorazon]</pre>
<p>Donde el código para ejecutar cada una de estas consultas es el siguiente:</p>
<pre name="code" class="java">

 QueryResults results = ksession.getQueryResults(&quot;Jugador por nombre&quot;, new Object[]{&quot;Poker Dealer&quot;});
 for ( QueryResultsRow row : results ) {
   Jugador jugador = ( Jugador ) row.get( &quot;jugador&quot; );
   System.out.println( jugador.getCartas() + &quot;\n&quot; );
 }
</pre>
<p>Donde se puede apreciar que estas consultas se ejecutan obteniendolas por nombre y pasando los parámetros como un array de objetos. Luego para recuperar los resultados obtenemos los objetos mediante el nombre de su variable vinculada, en este caso llamada &#8220;<strong>jugador</strong>&#8220;. Vale la aclaración de que debería llamarse <strong>$jugador</strong> para seguir con las reglas de legibilidad.</p>
<h2>Conclusión</h2>
<p>Vimos un poco como es el flujo de ejecución de este ejemplo propuesto en particular. Espero que esta explicación, también genere dudas e inquietudes sobre como funciona el framework internamente. La idea principal de estos posts, es dejar precedencia para poder escribir artículos mas profundos sobre temas mas avanzados. Espero sus comentarios, criticas y dudas si es que las hay.</p>
<p>Saludos.</p>
<p>PD: nuevamente les dejo el link del ejemplo, para que no tenga que andar buscandolo por todos lados: <a title="Ejemplo" href="http://jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip">www.jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip</a></p>
Posted in Java, JBoss Drools, jbug Tagged: Argentina, consulta, Drools, ejecucion, ejemplo, example, expert, fact, hecho, jbug, modelo, negocio, practico, query, reglas, rules, Salaboy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/663/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/663/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/663/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/663/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/663/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/663/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=663&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/29/jugando-con-drools-5-0-%e2%80%93-3-drools-expert/feed/</wfw:commentRss>
		<slash:comments>9</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>Jugando con Drools 5.0 &#8211; #2 Drools Expert</title>
		<link>http://salaboy.wordpress.com/2009/05/27/jugando-con-drools-5-0-2-drools-expert/</link>
		<comments>http://salaboy.wordpress.com/2009/05/27/jugando-con-drools-5-0-2-drools-expert/#comments</comments>
		<pubDate>Wed, 27 May 2009 18:41:58 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[Argentina]]></category>
		<category><![CDATA[condicion]]></category>
		<category><![CDATA[consecuencia]]></category>
		<category><![CDATA[definir]]></category>
		<category><![CDATA[dominio]]></category>
		<category><![CDATA[drl]]></category>
		<category><![CDATA[drools 5]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[negocio]]></category>
		<category><![CDATA[practica]]></category>
		<category><![CDATA[practico]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[Salaboy]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=590</guid>
		<description><![CDATA[Continuando con el ejemplo propuesto en el post anterior, vamos a analizar las reglas propuestas, junto con el modelo de dominio (objetos) propuestos para el ejemplo.
Hay que tener en cuenta que este modelo, fue creado a modo de ejemplo, y puede no contemplar algunas situaciones. Asi que acepto sugerencias, si el ejemplo no les parece [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=590&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Continuando con el ejemplo propuesto en el <a title="Jugando con Drools #1 " href="http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/">post anterior</a>, vamos a analizar las reglas propuestas, junto con el modelo de dominio (objetos) propuestos para el ejemplo.</p>
<p>Hay que tener en cuenta que este modelo, fue creado a modo de ejemplo, y puede no contemplar algunas situaciones. Asi que acepto sugerencias, si el ejemplo no les parece el mas adecuado, o se les ocurre algún otro modelo de dominio con el cual ejemplificar.</p>
<p>Les recomiendo que si no leyeron el <a title="Jugando con Drools #1 " href="http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/">post anterior</a>, lo lean, ya que explica la estructura del proyecto propuesto y aclara un poco las APIs básicas que vamos a utilizar cuando definimos conocimiento en forma de reglas de negocio dentro de Drools 5.0.</p>
<h2><strong>Modelo de dominio</strong></h2>
<p>En este ejemplo, vamos a utilizar un modelo de dominio bastante simple para crear algunas reglas de negocio simples. La idea de este dominio es simular un escenario donde podemos definir distintos juegos de cartas y dependiendo de la cantidad de jugadores que el juego necesite, crear una ronda cuando se pueda empezar con algún juego. En este caso, vamos a ver como se podría escribir algunas reglas para que cuando se cumplan las condiciones, el juego definido comience.</p>
<div id="attachment_591" class="wp-caption aligncenter" style="width: 310px"><a href="http://salaboy.files.wordpress.com/2009/05/model-class-diagram.png"><img class="size-medium wp-image-591" title="Model Class Diagram" src="http://salaboy.files.wordpress.com/2009/05/model-class-diagram.png?w=300&#038;h=156" alt="Dominio en el Ejemplo" width="300" height="156" /></a><p class="wp-caption-text">Dominio en el Ejemplo</p></div>
<p>Como podemos ver en la imagen, la clase Juego nos permitiría definir el nombre del juego y algunos datos genéricos que el mismo debería almacenar. Por ejemplo, todo juego tiene una relación con un Mazo de cartas y cuantas cartas por mano se deberán repartir a los jugadores de dicho juego.</p>
<p>Asi también estan definidas las clases Carta y Jugador, que mantienen información genérica sobre estas entidades que se utilizaran en todos los juegos.</p>
<p>Como podran apreciar, estas clases son simples POJOS (Plain Old Java Objects), por lo tanto, técnicamente no hay mucho que aclarar. Estas clases representaran las entidades que nuestro dominio necesita poder representar las interacciones de la realidad. En otras palabras, estas clases representan la información que se manejara en un escenario real donde tengamos Juegos de cartas.</p>
<h2><strong>Especificando reglas de negocio</strong></h2>
<p>Una vez que conocemos nuestro modelo de dominio, ya estamos listos para empezar a escribir reglas que van a actuar sobre el. Para esto, vamos  a crear un archivo de texto plano en el directorio <strong>/src/main/resources/rules</strong> llamado <strong>juego.drl</strong>.</p>
<p>Para los que no conocen DRL es la extensión que se suele utilizar para los archivos que van a contener reglas de negocios expresados en el lenguaje que propone Drools. A continuación vemos este archivo que pueden encontrar dentro del directorio antes mencionado.</p>
<pre name="code" class="java">

package com.wordpress.salaboy.playing.with.drools
import com.wordpress.salaboy.playing.with.drools.model.Juego;
import com.wordpress.salaboy.playing.with.drools.model.Jugador;
import com.wordpress.salaboy.playing.with.drools.model.Dealer;
import com.wordpress.salaboy.playing.with.drools.model.MazoPoker;
import com.wordpress.salaboy.playing.with.drools.model.Mazo;
import com.wordpress.salaboy.playing.with.drools.model.Ronda;
import com.wordpress.salaboy.playing.with.drools.model.Carta;
import java.util.ArrayList;

query &quot;Jugador por nombre&quot; (String qnombre)
  jugador : Jugador( nombre ==  qnombre)
end

rule &quot;Comienza una ronda de Poker cuando hay n jugadores&quot;
  when
    $juego: Juego(nombre == &quot;Poker&quot;)
    $jugadores: ArrayList( size == 2 ) from collect (Jugador())
  then
    $juego.setMazo(new MazoPoker());
    Dealer dealer = new Dealer(&quot;Poker Dealer&quot;);
    insert(dealer);
end

rule &quot;Iniciar Ronda Poker&quot;
  when
    $juego: Juego(nombre == &quot;Poker&quot;)
    $dealer: Dealer()
  then
    $dealer.addCartas($juego.getMazo().getMano(5));
    insert(new Ronda());
end

rule &quot;Nueva Ronda&quot;
  when
    Ronda()
    $juego: Juego(nombre == &quot;Poker&quot;)
    $jugador: Jugador()
    ArrayList(size == 0)  from collect ( Carta() from $jugador.cartas)
    //eval($jugador.getCartas().size() == 0)
   then
     $jugador.addCartas($juego.getMazo().getMano($juego.getCantidadCartasPorMano()));
end
</pre>
<p>Como podemos ver, en el archivo <strong>juego.drl</strong>, se definen actualmente 3 reglas y una consulta (query). Cada regla delimitada por las palabras reservadas del lenguaje &#8220;<strong>rule</strong>&#8221; y &#8220;<strong>end</strong>&#8220;.</p>
<h2>Una Regla</h2>
<p>Cada una de estas reglas tiene un nombre asociado y dos secciones internas que definen la condición de la regla y la consecuencia que se ejecutara cuando la condición sea cierta. Como podemos apreciar las palabras reservadas &#8220;<strong>when</strong>&#8221; y &#8220;<strong>then</strong>&#8221; son utilizadas para demarcar estas secciones dentro de cada regla.</p>
<p>Luego de la palabra reservada &#8220;<strong>when</strong>&#8220;, expresaremos la condición que debera cumplirse para que esta regla se ejecute. Esta condición se expresa en un lenguaje especial donde las restricciones de la condición se expresan utilizando tipos de objetos y filtrando por propiedades. Este lenguaje es llamado DRL (Drools Rule Language) y es muy sencillo de aprender.</p>
<p>Analicemos juntos una de estas reglas:</p>
<pre name="code" class="java">

rule &quot;Comienza una ronda de Poker cuando hay n jugadores&quot;
  when
    $juego: Juego(nombre == &quot;Poker&quot;)
    $jugadores: ArrayList( size == 2 ) from collect (Jugador())
  then
    $juego.setMazo(new MazoPoker());
    Dealer dealer = new Dealer(&quot;Poker Dealer&quot;);
    insert(dealer);
end
</pre>
<h2>La Condición</h2>
<p>Como podemos ver, la condición de esta regla especifica dos restricciones que deben cumplirse para que la consecuencia se ejecute. Analizaremos estas dos restricciones y vamos a aprovechar para hacer algunos comentarios de la sintaxis y la semántica con la que se escriben estas restricciones.</p>
<pre name="code" class="java">

 when
    $juego: Juego(nombre == &quot;Poker&quot;)
    $jugadores: ArrayList( size == 2 ) from collect (Jugador())
</pre>
<p>Es importante notar, que hay dos restricciones expresadas aqui, ambas unidas por un operador AND implícito. La dos restricciones que tenemos en esta condición pueden ser expresadas de la siguiente manera en lenguaje natural:</p>
<p>SI&#8230;</p>
<ul>
<li>Hay un Juego que se llama Poker</li>
<li>Y hay 2 jugadores</li>
</ul>
<p>Entonces&#8230; Consecuencia</p>
<p>Por lo tanto si estas restricciones se cumplen, la consecuencia de la regla se ejecutara. La primer restricción &#8220;Hay un Juego que se llama Poker&#8221; es expresada con la siguiente linea en Drools:</p>
<pre name="code" class="java">

Juego(nombre == &quot;Poker&quot;)
</pre>
<p>Donde lo unico que estamos expresando aqui es que en la memoria de trabajo que Drools utiliza, tendra que haber una instancia del objecto Juego, por eso se utiliza el tipo de la clase (con la J mayúscula) y luego se hace una restriccion de valor de propiedad, en este caso, que el valor de la propiedad nombre sea igual a Poker. En Drools cada instancia de objeto que es insertada en la memoria de trabajo es tratada con el nombre de Hecho. Esto hace referencia a que cada objecto que insertemos, va a generar en Drools un hecho cierto del mundo real sobre el cual queremos hacer inferencias y deducciones.</p>
<p>La siguiente restricción un poco mas compleja, sin embargo, lo unico que hace es contar que hayan dos jugadores para comenzar el juego. Basicamente para esto, realiza una búsqueda en la memoria de trabajo sobre todas las instancias del objeto Jugador que hayamos insertado y cuando sean dos evalúa como verdadera.</p>
<p>Esta bueno notar, que como con Drools escribimos código declarativo y no imperativo, no podríamos escribir esta segunda parte de la restricción de la siguiente manera:</p>
<pre name="code" class="java">

 when
    $juego: Juego(nombre == &quot;Poker&quot;)
    Jugador()
    Jugador()
</pre>
<p>Debido a que aquí estaríamos expresando que por cada par de Jugadores se debería empezar un Juego. Esto causaría que si en la memoria de trabajo tuviéramos 2 instancias de objetos Jugador, la consecuencia se ejecutaría dos veces, ya que el par [Jugador 1, Jugador 2] es distinto al par [Jugador 2, Jugador 1].</p>
<p>Como ultima aclaración sobre las restricciones en las condiciones, vale la pena mencionar los bindeos/enlaces a variables que se estan realizando en ambas restricciones con: $juego y $jugadores. Estas variables, luego pueden ser usadas dentro de restricciones siguientes o en la consecuencia de la regla, como veremos a continuación.</p>
<h2>La consecuencia</h2>
<p>Pasando a la consecuencia, solamente hay que aclarar que podemos expresar cualquier código Java que queramos que se ejecute cuando las restricciones de la condición son satisfechas.</p>
<pre name="code" class="java">

then
    $juego.setMazo(new MazoPoker());
    Dealer dealer = new Dealer(&quot;Poker Dealer&quot;);
    insert(dealer);
</pre>
<p>Como podemos ver, hacemos uso de dos facilidades que son agregadas a la condición. La primer facilidad usada aquí es la la variable que relacionamos en la condición ($juego) y luego la función/método insert que nos deja insertar un nuevo hecho dentro de la memoria de trabajo desde la consecuencia de una regla.</p>
<h2>Interacción y conclusión</h2>
<p>Para ir terminando con el post, ya que se hizo muy extenso, lo falta aclarar como interactuamos con la sesión que habíamos creado en el post anterior. Si descargan el proyecto y revisan la clase App.java, veran que luego de configurar y obtener la session interactuamos con ella llamando los métodos insert y fireAllRules.</p>
<pre name="code" class="java">

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
 KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
ksession.insert(new Juego(&quot;Poker&quot;,2));
 ksession.insert(new Jugador(&quot;Jugador 1&quot;));
 ksession.insert(new Jugador(&quot;Jugador 2&quot;));
 ksession.fireAllRules();
</pre>
<p>Espero que a grandes rasgos se entienda el post, y como podemos crear reglas que representen nuestro conocimiento para poder interactuar con el. Aparte de querer compartir los lineamientos básicos para utilizar Drools, la idea del post también es generar dudas, para poder establecer un canal de discusión. Asi que espero sus comentarios, criticas y preguntas si las dudas comienzan a surgir.</p>
<p>Saludos</p>
<p>PD: les dejo de vuelta el link del ejemplo para que puedan descargarlo sin tener que ir al post anterior: <a title="Ejemplo" href="http://jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip">www.jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip</a></p>
Posted in Java, JBoss Drools, jbug Tagged: Argentina, condicion, consecuencia, definir, dominio, drl, drools 5, ejemplo, Java, jbug, negocio, practica, practico, reglas, Salaboy, tutorial <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/590/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/590/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/590/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=590&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/27/jugando-con-drools-5-0-2-drools-expert/feed/</wfw:commentRss>
		<slash:comments>6</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/05/model-class-diagram.png?w=300" medium="image">
			<media:title type="html">Model Class Diagram</media:title>
		</media:content>
	</item>
		<item>
		<title>Drools 5.0 reviews en The Server Side.</title>
		<link>http://salaboy.wordpress.com/2009/05/25/drools-5-0-reviews-en-the-server-side/</link>
		<comments>http://salaboy.wordpress.com/2009/05/25/drools-5-0-reviews-en-the-server-side/#comments</comments>
		<pubDate>Mon, 25 May 2009 15:09:31 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[Argentina]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[comentario]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[flow]]></category>
		<category><![CDATA[flujo]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[negocio]]></category>
		<category><![CDATA[proceso]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[review]]></category>
		<category><![CDATA[ruleflow]]></category>
		<category><![CDATA[server]]></category>
		<category><![CDATA[side]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=627</guid>
		<description><![CDATA[Hace tres dias ya, Mark Proctor lider del proyecto JBoss Drools publico en la famosa pagina The Server Side (http://www.theserverside.com) un articulo sobre el lanzamiento oficial de la versión 5.0 de Drools (http://www.theserverside.com/news/thread.tss?thread_id=54698). En este articulo se mencionan las características de la nueva versión, mas varios links de referencia bastante útiles. Mas alla de la [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=627&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Hace tres dias ya, Mark Proctor lider del proyecto JBoss Drools publico en la famosa pagina The Server Side (<a href="http://www.theserverside.com">http://www.theserverside.com</a>) un articulo sobre el lanzamiento oficial de la versión 5.0 de Drools (<a href="http://www.theserverside.com/news/thread.tss?thread_id=54698">http://www.theserverside.com/news/thread.tss?thread_id=54698</a>). En este articulo se mencionan las características de la nueva versión, mas varios links de referencia bastante útiles. Mas alla de la nota en si, es siempre bueno ver la respuesta/feedback de la comunidad en estos sitios donde se suelen hacer este tipo de presentaciones oficiales.</p>
<p>Como era de esperarse, si leen los comentarios, aparecieron varias preguntas, y yo espero que aparezcan mas, sobre el solapamiento de funcionalidades con JBoss jBPM. Yo aproveche para contar mi experiencia, para ayudar a todos aquellos a los que le surgen dudas sobre estos temas, tan comunes.</p>
<p>Tanto yo, como el equipo de Drools, estamos a la espera de feedbacks sobre esta nueva versión para poder continuar la mejora del proyecto para el bien de la comunidad de desarrolladores open source.</p>
<p>Les dejo mi comentario en TSS, y espero sus feedbacks al respecto:</p>
<p><a href="http://www.theserverside.com/news/thread.tss?m=c.reply&amp;thread_id=54698#309325">http://www.theserverside.com/news/thread.tss?m=c.reply&amp;thread_id=54698#309325</a></p>
<p>Estaría bueno poder armar este tipo de discusiones en vivo y compartir experiencias con la comunidad de desarrolladores aquí en Argentina, y en latino america para ver la aceptación de herramientas como Drools que van guiando y cambiando constantemente los paradigmas de desarrollo que conocíamos. Si hay algún entusiasta leyendo, lo invito a contactarse conmigo para organizar charlas o discusiones abiertas sobre estas herramientas tan interesantes.</p>
<p>Saludos!</p>
<p><strong>Actualización:</strong></p>
<p>Agrego un link al blog oficial de los core developers de Drools que vieron mi comentarion en The Server Side y me invitaron a compartirlo tambien en su blog: <a href="http://blog.athico.com/2009/05/drools-vs-jbpm-personal-experience.html">http://blog.athico.com/2009/05/drools-vs-jbpm-personal-experience.html</a></p>
Posted in Java, JBoss Drools, jbug Tagged: 5, Argentina, BPM, comentario, Drools, flow, flujo, JBoss, jbug, modelo, negocio, proceso, reglas, review, ruleflow, server, side <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/627/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/627/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/627/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=627&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/25/drools-5-0-reviews-en-the-server-side/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>Drools 5.0 Final Release</title>
		<link>http://salaboy.wordpress.com/2009/05/20/drools-5-0-1-final-release/</link>
		<comments>http://salaboy.wordpress.com/2009/05/20/drools-5-0-1-final-release/#comments</comments>
		<pubDate>Wed, 20 May 2009 20:48:44 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[5.0]]></category>
		<category><![CDATA[5.0.1]]></category>
		<category><![CDATA[BPM]]></category>
		<category><![CDATA[CEP]]></category>
		<category><![CDATA[complejos]]></category>
		<category><![CDATA[Complex]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[event]]></category>
		<category><![CDATA[eventos]]></category>
		<category><![CDATA[final]]></category>
		<category><![CDATA[flow]]></category>
		<category><![CDATA[fusion]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[processing]]></category>
		<category><![CDATA[realease]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[Salaboy]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=612</guid>
		<description><![CDATA[Ayer 19 de mayo del 2009 fue publicada la versión final de Drools 5.0.1. (un regalo de cumpleaños atrasado)
Los invito a descargarla y a empezar a jugar con ella. Como veran, voy a empezar a postear ejemplos ( algunos posts utiles: post1, post2, post3, post4) que hagan uso de cada uno de sus módulos y [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=612&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Ayer 19 de mayo del 2009 fue publicada la versión final de Drools 5.0.1. (un regalo de cumpleaños atrasado)</p>
<p>Los invito a descargarla y a empezar a jugar con ella. Como veran, voy a empezar a postear ejemplos ( algunos posts utiles: <a href="http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/">post1</a>, <a href="http://salaboy.wordpress.com/2009/03/11/drools-50-candidate-release-1/">post2</a>, <a href="http://salaboy.wordpress.com/2009/01/27/drools-lab-2-de-osworkflow-a-ruleflow/">post3</a>, <a href="http://salaboy.wordpress.com/2009/05/20/jboss-drools-5-0-www-infoworld-com/">post4</a>) que hagan uso de cada uno de sus módulos y un poco de teoría como para que la gente que no conoce el framework pueda ir metiendo mano.</p>
<p>Les dejo el link de la pagina actualizada:</p>
<p><a href="http://www.drools.org">http://www.drools.org</a></p>
<p>Y el link directo para la descarga:</p>
<p><a href="http://jboss.org/drools/downloads.html">http://jboss.org/drools/downloads.html</a></p>
<p>Se agradecen comentarios, sobre las primeras impresiones del framework, tanto sobre mejoras como criticas constructivas para mejorar las experiencia de usuario.</p>
<p><strong>Actualizacion</strong>:</p>
<p>Recien hoy (22 de mayo 2009) se hizo la publicación oficial. Les dejo algunos links de interes:</p>
<p><a href="http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-introduction/html/ch02.html#d0e29">The Drools 5.0 Release Notes<br />
http://downloads.jboss.com/drools/docs/5.0.1.26597.FINAL/drools-introduction/html/ch02.html#d0e29</a></p>
<p><a href="http://www.jboss.org/drools">Home Page<br />
http://www.jboss.org/drools</a></p>
<p><a href="http://blog.athico.com/">Blog<br />
http://blog.athico.com/</a></p>
<p><a href="http://blog.athico.com/2009/03/drools-boot-camp-san-francisco-june.html">Drools Boot Camp &#8211; San Francisco 1-7 of June<br />
http://blog.athico.com/2009/03/drools-boot-camp-san-francisco-june.html</a></p>
<p>PD: <strong>grep -i &#8220;salaboy&#8221; * -R | wc -l</strong> en los source da 49! y viene mucho mas!</p>
Posted in Java, JBoss Drools, jbug Tagged: 5, 5.0, 5.0.1, BPM, CEP, complejos, Complex, Drools, event, eventos, final, flow, fusion, JBoss, jbug, processing, realease, reglas, Salaboy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/612/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/612/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/612/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=612&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/20/drools-5-0-1-final-release/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>JBoss Drools 5.0 &#8211; www.infoworld.com</title>
		<link>http://salaboy.wordpress.com/2009/05/20/jboss-drools-5-0-www-infoworld-com/</link>
		<comments>http://salaboy.wordpress.com/2009/05/20/jboss-drools-5-0-www-infoworld-com/#comments</comments>
		<pubDate>Wed, 20 May 2009 18:29:47 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[ar]]></category>
		<category><![CDATA[com]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[expert]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[rule]]></category>
		<category><![CDATA[ruleflow]]></category>
		<category><![CDATA[rules]]></category>
		<category><![CDATA[Salaboy]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=608</guid>
		<description><![CDATA[Los invito a leer la nota publicada sobre los features de la nueva versión 5.0 de Drools. Es un muy buen articulo para empezar a ver todas las características que esta nueva versión nos propone.
&#8220;JBoss Drools 5.0 adds several new features, such as workflow, constraint programming, and event programming, all of which significantly boost its [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=608&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><p>Los invito a leer la nota publicada sobre los features de la nueva versión 5.0 de Drools. Es un muy buen articulo para empezar a ver todas las características que esta nueva versión nos propone.</p>
<p><strong>&#8220;JBoss Drools 5.0</strong> adds several new features, such as workflow, constraint programming, and event programming, all of which significantly boost its usefulness as a decision management toolkit.&#8221;</p>
<p>Para leer el articulo completo dirigirse al siguiente link:</p>
<p><a href="http://www.infoworld.com/d/developer-world/first-look-jboss-drools-grows-and-out-137?page=0,0">http://www.infoworld.com/d/developer-world/first-look-jboss-drools-grows-and-out-137?page=0,0</a></p>
Posted in Java, JBoss Drools, jbug Tagged: ar, com, Drools, expert, JBoss, jbug, reglas, rule, ruleflow, rules, Salaboy <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/608/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/608/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/608/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=608&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/20/jboss-drools-5-0-www-infoworld-com/feed/</wfw:commentRss>
		<slash:comments>1</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>
	</item>
		<item>
		<title>Jugando con Drools 5.0 &#8211; #1 Drools Expert</title>
		<link>http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/</link>
		<comments>http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/#comments</comments>
		<pubDate>Tue, 19 May 2009 20:04:10 +0000</pubDate>
		<dc:creator>salaboy</dc:creator>
				<category><![CDATA[JBoss Drools]]></category>
		<category><![CDATA[Java]]></category>
		<category><![CDATA[jbug]]></category>
		<category><![CDATA[5]]></category>
		<category><![CDATA[5.0]]></category>
		<category><![CDATA[Drools]]></category>
		<category><![CDATA[ejemplo]]></category>
		<category><![CDATA[expert]]></category>
		<category><![CDATA[intro]]></category>
		<category><![CDATA[introduccion]]></category>
		<category><![CDATA[JBoss]]></category>
		<category><![CDATA[ksession]]></category>
		<category><![CDATA[Maven]]></category>
		<category><![CDATA[maven con drools]]></category>
		<category><![CDATA[modelo]]></category>
		<category><![CDATA[mvn]]></category>
		<category><![CDATA[negocio]]></category>
		<category><![CDATA[reglas]]></category>
		<category><![CDATA[StatefulKnowledgeSession]]></category>

		<guid isPermaLink="false">http://salaboy.wordpress.com/?p=566</guid>
		<description><![CDATA[Introducción a Drools Expert
Básicamente vamos a ver un ejemplo sencillo de como Drools Expert nos permite expresar reglas de negocios, para dejar ejemplos simples de como se expresan las reglas y de las interacciones que podemos tener entre ellas.
En este post veremos solamente la estructura del proyecto, las dependencias y las lineas básicas que necesitamos [...]<img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=566&subd=salaboy&ref=&feed=1" />]]></description>
			<content:encoded><![CDATA[<div class='snap_preview'><br /><h1><img class="aligncenter size-full wp-image-567" title="drools_logo" src="http://salaboy.files.wordpress.com/2009/05/drools_logo.png?w=266&#038;h=89" alt="drools_logo" width="266" height="89" /><strong>Introducción a Drools Expert</strong></h1>
<p>Básicamente vamos a ver un ejemplo sencillo de como Drools Expert nos permite expresar reglas de negocios, para dejar ejemplos simples de como se expresan las reglas y de las interacciones que podemos tener entre ellas.</p>
<p>En este post veremos solamente la estructura del proyecto, las dependencias y las lineas básicas que necesitamos para poder hacer uso del framework. En el siguiente post veremos como esta compuesto el conocimiento, nuestro modelo de objetos y que podemos hacer con el.</p>
<p>Por esto mismo, la idea principal de estos dos primeros posts sobre Drools Expert, es documentar y dejar un ejemplo sencillo para que la gente que no conoce el framework, pueda ir de a poco introduciendoce en cada uno de los submódulos de Drools.</p>
<p>En estos posts voy a utilizar la versión 5.0 del framework cuyas APIs estan orientadas al conocimiento en general. Asi es, es tan genérica como para permitirnos definir el conocimiento que tenemos en una situación de negocio en particular. Por lo tanto veran que toda la terminología que antes se usaba, como por ejemplo RuleBase o WorkingMemory (cuando estaba solamente orientado a reglas de negocio, en la version 4.0.7 o anterior), ahora estas son mucho mas genéricas y no estan tan atadas solamente a reglas, sino al concepto de conocimiento en general (Knowledge).</p>
<h2><strong>El Proyecto</strong></h2>
<p>Este ejemplo, mediante un proyecto sencillo construido con Maven, se mostraran los primeros pasos para utilizar el framework. Es importante ver el proyecto completo para comprender como interactúan las partes. Y tratar de jugar un poco con el cambiando las reglas y los hechos que se insertan para ver el comportamiento.</p>
<p>Sin mas vamos a ver el proyecto que utiliza Drools. Como en todo proyecto de Drools vamos a tener que incluir las dependencias a los módulos base que vamos a utilizar del proyecto.<br />
Esto, como estamos utilizando Maven, estara descripto en el archivo pom.xml file que describe al proyecto:</p>
<pre name="code" class="xml">

&lt;project xmlns=&quot;http://maven.apache.org/POM/4.0.0&quot; xmlns:xsi=&quot;http://www.w3.org/2001/XMLSchema-instance&quot;
 xsi:schemaLocation=&quot;http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd&quot;&gt;
 &lt;modelVersion&gt;4.0.0&lt;/modelVersion&gt;
 &lt;groupId&gt;com.wordpress.salaboy.playing.with.drools&lt;/groupId&gt;
 &lt;artifactId&gt;playingWithDrools-ExpertIntroduction&lt;/artifactId&gt;
&lt;packaging&gt;jar&lt;/packaging&gt;
 &lt;version&gt;1.0-SNAPSHOT&lt;/version&gt;
 &lt;name&gt;playingWithDrools-ExpertIntroduction&lt;/name&gt;
 &lt;url&gt;http://maven.apache.org&lt;/url&gt;&lt;repositories&gt;
 &lt;repository&gt;
 &lt;id&gt;repository.jboss.org&lt;/id&gt;
 &lt;url&gt;http://repository.jboss.org/maven2&lt;/url&gt;
 &lt;snapshots&gt;
 &lt;enabled&gt;false&lt;/enabled&gt;
 &lt;/snapshots&gt;
 &lt;releases&gt;
 &lt;enabled&gt;true&lt;/enabled&gt;
 &lt;/releases&gt;
 &lt;/repository&gt;
 &lt;/repositories&gt;
 &lt;dependencies&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;junit&lt;/groupId&gt;
 &lt;artifactId&gt;junit&lt;/artifactId&gt;
 &lt;version&gt;3.8.1&lt;/version&gt;
 &lt;scope&gt;test&lt;/scope&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.drools&lt;/groupId&gt;
 &lt;artifactId&gt;drools-core&lt;/artifactId&gt;
 &lt;version&gt;5.0.0.CR1&lt;/version&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.drools&lt;/groupId&gt;
 &lt;artifactId&gt;drools-api&lt;/artifactId&gt;
 &lt;version&gt;5.0.0.CR1&lt;/version&gt;
 &lt;type&gt;jar&lt;/type&gt;
 &lt;/dependency&gt;
 &lt;dependency&gt;
 &lt;groupId&gt;org.drools&lt;/groupId&gt;
 &lt;artifactId&gt;drools-compiler&lt;/artifactId&gt;
 &lt;version&gt;5.0.0.CR1&lt;/version&gt;
 &lt;type&gt;jar&lt;/type&gt;
 &lt;/dependency&gt;
 &lt;/dependencies&gt;
&lt;/project&gt;
</pre>
<h2><strong>Algunos conceptos de Maven</strong></h2>
<p>Para aquellos que no estan acostumbrados a Maven es importante notar que:</p>
<ul>
<li><span><span class="tag-name"><strong>groupId:</strong> nos va a decir el grupo donde podremos encontrar nuestro proyecto construido dentro del repositorio de Maven.<br />
</span></span></li>
<li><span><span class="tag-name"><strong>artifactId:</strong> nombre de nuestro proyecto construido.<br />
</span></span></li>
<li><span><span class="tag-name"><strong>packaging:</strong> tipo de empaquetado, en este caso estamos generando un Jar, pero podríamos querer hacer un war, algún otro tipo de proyecto.<br />
</span></span></li>
<li><span><span class="tag-name"><strong>version: </strong>la versión de nuestro proyecto.<br />
</span></span></li>
<li><strong><span><span class="tag-name">secci</span></span><span><span class="tag-name">ó</span></span></strong><span><span class="tag-name"><strong>n repositories:</strong> en esta secci</span></span><span><span class="tag-name">ó</span></span><span><span class="tag-name">n se incluye el repositorio maven2 de JBoss donde estan las ultimas versiones empaquetadas de Drools. Necesitamos tener este repositorio para poder buscar las dependencias y el framework en si.<br />
</span></span></li>
<li><strong><span><span class="tag-name">dependencies con groupId</span></span></strong><span><span class="tag-name"><strong> org.drools: </strong>incluimos las dependencias a las bibliotecas core, api y compiler, ya que son necesarias para la compilación y ejecución de nuestro proyecto que hace uso del framework.<br />
</span></span></li>
</ul>
<p>Una vez dicho esto, solo queda bajar el proyecto, descomprimirlo y recorrer su estructura (la estructura refleja un típico proyecto Maven, para un empaquetado de tipo Jar).</p>
<h2><strong>Conociendo las APIs básicas</strong></h2>
<p>Vamos a analizar el uso mas común de las APIs básicas de Drools, para esto podemos abrir la clase App.java dentro del paquete <strong>com.wordpress.salaboy.playing.with.drools</strong>, donde encontraremos las siguientes lineas dentro del método main de la clase:</p>
<pre name="code" class="java">

KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newInputStreamResource(new App().getClass().getResourceAsStream(&quot;/rules/juego.drl&quot;)),ResourceType.DRL);
</pre>
<p>Con estas dos grandes lineas de codigo, lo que estamos haciendo es mediante un KnowledgeBuilder recaudar todo el conocimiento que vamos a utilizar en nuestra aplicación para luego obtener paquetes de conocimiento ya compilado. Estos paquetes de conocimiento ya compilados se llaman KnowledgeBase, en versiones anteriores llamados RuleBase.</p>
<pre name="code" class="java">

Collection kpkgs = kbuilder.getKnowledgePackages();
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages( kpkgs );
</pre>
<p>Como podemos ver, ya tenemos nuestro conocimiento compilado, ahora contra este conocimiento compilado, que llamamos KnowledgeBase podemos crear sesiones para hacer uso de este conocimiento.</p>
<pre name="code" class="java">

StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
KnowledgeRuntimeLogger logger = KnowledgeRuntimeLoggerFactory.newConsoleLogger(ksession);
</pre>
<p>Como vemos, a partir de nuestra base de conocimiento se obtiene una sesion de tipo StatefulKnowledgeSession con la cual vamos a poder interactuar para obtener las deducciones que se generen a partir de nuestro conocimiento.</p>
<p>A continuación solamente creo un logger que nos va a ir indicando los eventos que se van generando dentro de nuestra sesión mientras interactuamos con ella. Este tipo de logger, ConsoleLogger, como su nombre lo aclara, nos mostrara por consola todos los eventos que se vayan generando.</p>
<h2><strong>Conclusión</strong></h2>
<p>Hasta aquí vimos algunos conceptos básicos de como construir un proyecto que utilice Drools y un preview con una breve explicación de como se ven las APIs que utilizaremos en el día a día si nuestra aplicación utiliza Drools.</p>
<p>En el siguiente post discutiremos el modelo del ejemplo y como se realizaran las ejecuciones de las reglas. Para los ansiosos, el siguiente link tiene el proyecto completo con las reglas y un Main, para probar la ejecucion.</p>
<p><a title="Ejemplo" href="http://jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip">www.jbug.com.ar/external/playingWithDrools-ExpertIntroduction.zip</a></p>
<p>Pueden bajarlo, jugar y romper tranquilos.</p>
Posted in Java, JBoss Drools, jbug Tagged: 5, 5.0, Drools, ejemplo, expert, intro, introduccion, Java, JBoss, jbug, ksession, Maven, maven con drools, modelo, mvn, negocio, reglas, StatefulKnowledgeSession <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gocomments/salaboy.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/comments/salaboy.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godelicious/salaboy.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/delicious/salaboy.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/gostumble/salaboy.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/stumble/salaboy.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/godigg/salaboy.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/digg/salaboy.wordpress.com/566/" /></a> <a rel="nofollow" href="http://feeds.wordpress.com/1.0/goreddit/salaboy.wordpress.com/566/"><img alt="" border="0" src="http://feeds.wordpress.com/1.0/reddit/salaboy.wordpress.com/566/" /></a> <img alt="" border="0" src="http://stats.wordpress.com/b.gif?host=salaboy.wordpress.com&blog=2849476&post=566&subd=salaboy&ref=&feed=1" /></div>]]></content:encoded>
			<wfw:commentRss>http://salaboy.wordpress.com/2009/05/19/jugando-con-drools-5-0-1-drools-expert/feed/</wfw:commentRss>
		<slash:comments>8</slash:comments>
	
		<media:content url="http://1.gravatar.com/avatar/7666e02db7c2afa17051ef9d480443d1?s=96&#38;d=identicon&#38;r=G" medium="image">
			<media:title type="html">salaboy</media:title>
		</media:content>

		<media:content url="http://salaboy.files.wordpress.com/2009/05/drools_logo.png" medium="image">
			<media:title type="html">drools_logo</media:title>
		</media:content>
	</item>
	</channel>
</rss>