You are on page 1of 28

Sistemas Expertos uniminuto

Laboratorio 2 de sistemas experto.


Elaborado por: Ing. John Jaiver Muoz

Universidad uniminuto
Santiago de Cali, valle del cauca.
2014

Introduccin.
Caractersticas de las aplicaciones web
El usuario puede acceder fcilmente a estas aplicaciones empleando un navegador web
(cliente) o similar.
Si es por internet, el usuario puede entrar desde cualquier lugar del mundo donde tenga
un acceso a internet.
Pueden existir miles de usuarios pero una nica aplicacin instalada en un servidor, por lo
tanto se puede actualizar y mantener una nica aplicacin y todos sus usuarios vern los
resultados inmediatamente.
Emplean tecnologas como Java, JavaFX, JavaScript, DHTML, Flash, Ajax... que dan gran
potencia a la interfaz de usuario.
Emplean tecnologas que permiten una gran portabilidad entre diferentes plataformas.
Por ejemplo, una aplicacin web flash podra ejecutarse en un dispositivo mvil, en una
computadora con Windows, Linux u otro sistema, en una consola de videojuegos, etc.
Java servlets.
Java Servlets son programas en java que son pre compilados por el programador, entonces
puestos en el servidor de pginas (web server) que los carga, compila y ejecuta al momento que
un usuario remoto lo solicita, generalmente a travs de una pagina html.
Es de tomar muy en cuenta que cuando el servidor de paginas carga y ejecuta un servlet, lo va
mantener activo en memoria en su propio proceso por toda la vida del servidor de pginas (es
decir mientras no se recete el servidor).
Procedimiento
Para el desarrollo de la implementacin del laboratorio se necesitan los siguientes:
Libreras Drools - 4.0.7
Aplicacin Drools Brms - 4.0.7 GA
JBoss 4.2.2 GA
Eclipse 3.6 Estructuras de Datos que contiene el plugin de JBoss IDE instalado.
Prerrequisitos
Para la realizacin de este tutorial es necesario que se encuentre familiarizado con el desarrollo de
aplicaciones Java en el ambiente de desarrollo Eclipse. Adems se espera un conocimiento mnimo
sobre WebServices y desarrollo de aplicaciones Web en jsf 2.0.

Objetivos
Identificar reglas de negocio.
Proponer e implementar estrategias para integrar las aplicaciones existentes con las reglas
de negocio.
Utilizar Drools JBRMS como administrador de reglas de negocio e incorporarlo a
aplicaciones existentes con el fin de desacoplar las reglas de negocio de las aplicaciones.
Instalacin de JBoss AS.
JBoss es un servidor de aplicaciones J2EE de cdigo abierto implementado en Java puro. Al estar
basado en Java, JBoss puede ser utilizado en cualquier sistema operativo para el que est
disponible Java.
Para instalar slo es necesario descomprimir los archivos en una carpeta de su sistema
preferiblemente en una ruta que no tenga espacios entre los nombres.
http://www.jboss.org/jbossas/downloads
Para nuestro caso se utilizara la versin de jboss 4.2.2

Para realizar la instalacin del servidor jboss se realizan los siguientes pasos.
1. Descargar instalador de la pgina principal de jboss.
2. La carpeta descargada se encuentra comprimida en un archivo de extensin .rar, para lo
cual es necesario descomprimir en ubicacin que se desea instalar el servidor, por
recomendacin se debe instalar en disco c.
3. Se debe configurar la variable de entorno.
* En la caja Nombre de variable: JBOSS_HOME.
* En la caja Valor de variable: la ubicacin donde hayas instalado el servidor.
4. Reiniciamos pc.
Ejecucin.
La ejecucin de JBoss es relativamente sencilla, dentro del directorio bin de la instalacin de JBoss
se encuentran los archivos de arranque en forma de "scripts" para Shell. El archivo de ejecucin
run.sh es utilizado para iniciar JBoss en ambientes *nix con los parmetros encontrados en el
directorio server/default/conf, de igual manera, el archivo run.bat lo hace para ambientes
Windows.

Debe observar algo similar al siguiente desplegado; los detalles de estos parmetros son aquellos
definidos en la configuracin de JBoss e incluyen: bases de datos para trabajar con JBoss,
ubicacin de registros, parmetros JNDI, EJB's disponibles y cargados, entre otra informacin.

Esta pantalla es donde se ejecuta JBoss que permanecer congelada por el trmino en que este
activo JBoss, a esta pantalla se enviarn entre otras cosas: los errores de ejecucin y resultados de
agregar EJB's al directorio deploy de Jboss.
Para finalizar JBoss basta ejecutar Ctrl-C bajo la pantalla en cuestin y Jboss ser terminado, en el
proceso desplegando ciertos mensajes de terminacin.
Como consola de administracin se puede acceder en el equipo a la siguiente direccin ip local,
mostrando la consola web. http://localhost:8080/.

Para colocar el servidor en eclipse se hace lo siguiente:


Para ello abra la vista Servers en eclipse y al hacer clic derecho sobre el panel de trabajo seleccione
la opcin new Server.

Configurando:

Instalacin de las libreras de Drools en el JBOSS AS


El archivo se descarga de la siguiente ruta:
http://download.jboss.org/drools/release/4.0.7.19894.GA/

Debido a que se va a utilizar el Droold BRMS para la administracin de las reglas se deben copiar
dentro del servidor de aplicacin JBOSS las libreras necesarias. Para esto se siguen los siguientes
pasos:
Descargue el archivo .zip con las libreras de Drools que se indic la pgina de instaladores
Descomprima este archivo
Copie los siguientes jars:
o drools-core-4.0.7.jar (Se encuentra en la carpeta donde descomprimi el archivo).
o mvel-1.3.1-java1.4.jar (Se encuentra en la carpeta /lib donde descomprimi el
.zip).
o Pegue los jars en la carpeta JBOSS_HOME\server\default\lib.
Despliegue de Drools BRMS en el servidor de aplicaciones
Para realizar el despliegue de la interfaz web de administracin de reglas de drools realice los
siguientes pasos:
Descargue el archivo zip de Drools BRMS indicado en la pgina de descargas
Descomprima el archivo (Debi aparecer un archivo denominado drools-jbrms.war)
Copie este archivo y pguelo en la carpeta de deploy en servidor de aplicaciones JBoss
(JBOSS_HOME\server\default\deploy)
Inicie JBoss ejecutando el archivo binario JBOSS_HOME\bin\run.bat
Si le sale una notificacin de Windows, dele click en Desbloquear.
Una vez terminado el despliegue de JBoss, desde su navegador puede ingresar a la
siguiente direccin donde se encuentra el administrador web de drools:
http://localhost:8080/drools-jbrms/

Creacin de proyecto web.


Creacin de proyecto web para la utilizacin de reglas drools.

Nombre de proyecto: MedidorTemperatura.

Es creado el proyecto web.

Se crea la pgina de inicio del proyecto.

Con nombre: index.html

Se crea la carpeta para colocar imgenes. Nombre:IMG

Se copia y se pegan las imgenes en esta carpeta.


En el formulario index.html se coloca el siguiente cdigo:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"


"http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Gestin de Variable Temperatura</title>
</head>
<body>
<table>
<TR>
<td>
<form action="ServletGestionTemperatura" method="post"><TABLE WIDTH="100"
BORDER="6">
<TR>
<TD>
<table width="100%" border="0" cellspacing="0" cellpadding="0">
<tr>
<td><IMG SRC="IMG/drools_logo.gif" WIDTH=78 HEIGHT=50 style="width :
118px; height : 33px;"></IMG>&nbsp;</td>
</tr>
<tr>
<td width="80%">Opciones de Ingreso:</td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
</tr>
<tr>
<td width="21%">Valor Temperatura:</td>
<td width="79%"><input name="valortem" type="text" value="2" size="10"
maxlength="10"></td>
</tr>
<tr>
<td></td>
</tr>
<tr>
<td>&nbsp;</td>
</tr>
<tr>
<td>
<input type="submit" name="enviar" value="Enviar">
</td>
<td colspan="2">
<input type="reset" name="Reset" value="Reset">
</td>
</tr>
</table>
</TD>
</TR>
</TABLE>
</form>

</td>
</TR>
</table>
</body>
</html>

Se crea el servlet. Nombre: ServletGestionTemperatura


Package: edu.uniminuto.se.servlet

En el servlet queda:
package edu.uniminuto.se.servlet;
import java.io.IOException;
import
import
import
import
import

javax.servlet.RequestDispatcher;
javax.servlet.ServletException;
javax.servlet.http.HttpServlet;
javax.servlet.http.HttpServletRequest;
javax.servlet.http.HttpServletResponse;

import uniminuto.se.variable.Temperatura;
import edu.uniminuto.se.prototipo.reglas.ServicioAnalisis;
/**
* Servlet implementation class ServletGestionTemperatura
*/
public class ServletGestionTemperatura extends HttpServlet {
private static final long serialVersionUID = 1L;
/**
* @see HttpServlet#HttpServlet()
*/
public ServletGestionTemperatura() {
super();
// TODO Auto-generated constructor stub
}
/**
* @see HttpServlet#doGet(HttpServletRequest request,
HttpServletResponse response)
*/

protected void doGet(HttpServletRequest request,


HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
}
/**
* @see HttpServlet#doPost(HttpServletRequest request,
HttpServletResponse response)
*/
protected void doPost(HttpServletRequest request,
HttpServletResponse response) throws ServletException, IOException {
// TODO Auto-generated method stub
System.out.println("INGRESO::::");
String valortemp = request.getParameter("valortem");
System.out.print("### El valortemp "+valortemp);
String localizacion = "Cali";
String codigo = "002";
float valor = Float.parseFloat(valortemp);
Temperatura p = new Temperatura(valor, localizacion,codigo);
try {
p = ServicioAnalisis.ejecutarAnalisis(p);
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
System.out.println("LLEGO:"+p.getDescripcion());
String respuesta = p.getDescripcion();
request.setAttribute("valortem", respuesta);
gotoPage("Respuesta.jsp", request, response);
}
private void gotoPage(String address, HttpServletRequest request,
HttpServletResponse response) throws ServletException,
IOException {
RequestDispatcher dispatcher =
request.getRequestDispatcher(address);
dispatcher.forward(request, response);
}
}

Se crea la clase donde se toma las mediciones.


Package: uniminuto.se.variable
Clase: Temperatura

La clase debe quedar de la siguiente forma.


package uniminuto.se.variable;
public class Temperatura {
private float valortemperatura;
private String localizacion;
private String codigo;
private String descripcion;
public Temperatura(float valortemperatura, String localizacion,
String codigo){
this.valortemperatura = valortemperatura;
this.localizacion = localizacion;
this.codigo = codigo;
}
public float getValortemperatura() {
return valortemperatura;
}
public void setValortemperatura(float valortemperatura) {
this.valortemperatura = valortemperatura;
}
public String getLocalizacion() {
return localizacion;
}
public void setLocalizacion(String localizacion) {
this.localizacion = localizacion;
}
public String getCodigo() {
return codigo;
}
public void setCodigo(String codigo) {
this.codigo = codigo;
}

public String getDescripcion() {


return descripcion;
}
public void setDescripcion(String descripcion) {
this.descripcion = descripcion;
}
}

Tambin se crea la clase que hace la gestin de reglas con la aplicacin guvnor de drools, es donde
est la regla determinada.
Clase:ServicioAnalisis
paquete: edu.uniminuto.se.prototipo.reglas

La clase queda de la siguiente forma:


package edu.uniminuto.se.prototipo.reglas;
import java.io.File;
import java.io.FileInputStream;
import java.util.Properties;
import org.drools.RuleBase;
import org.drools.WorkingMemory;
import org.drools.agent.RuleAgent;
import org.jboss.system.server.ServerConfig;
import org.jboss.system.server.ServerConfigLocator;

import uniminuto.se.variable.Temperatura;
/**
* Clase que representa el anlisis de la variable
*/
public class ServicioAnalisis
{
// ----------------------------------------------------------------// Mtodos
// ----------------------------------------------------------------public static Temperatura ejecutarAnalisis( Temperatura p ) throws
Exception
{
ServerConfig config = ServerConfigLocator.locate( );
File dataDir = config.getServerDataDir( );
File archivo = new File( dataDir, "./analisis/Reglas.properties"
);
Properties prop = new Properties( );
System.out.println( "Cargando el archivo###:" +
archivo.getAbsolutePath( ) );
FileInputStream in = new FileInputStream( archivo );
prop.load( in );
in.close( );
RuleAgent agent = RuleAgent.newRuleAgent( prop );
RuleBase ruleBase = agent.getRuleBase( );
WorkingMemory workingMemory = ruleBase.newStatefulSession( );
workingMemory.insert( p );
workingMemory.fireAllRules( );
return p;
}
}

Se crea un jsp donde se imprimir la respuesta dada por guvnor drools.


Nombre: Respuesta

En el jsp se coloca:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"


pageEncoding="ISO-8859-1"%>
<html>
<head>
<title>Resultado del Expert</title>
</head>
<body>
<h2 style="COLOR: #ff0000;">Descripcin de Temperatura</h2>
<IMG SRC="IMG/temp.jpg" WIDTH=78 HEIGHT=50 style="width : 118px; height
: 94px;"></IMG>
<%
String descrtemp =""+(request.getAttribute("valortem"));
out.println("La temperatura: "+descrtemp);
%>
</body>
</html>

Se revisa el archivo web.xml que quede de la siguiente forma.


<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID"
version="2.5">
<display-name>MedidorTemperatura</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<description></description>
<display-name>ServletGestionTemperatura</display-name>
<servlet-name>ServletGestionTemperatura</servlet-name>
<servletclass>edu.uniminuto.se.servlet.ServletGestionTemperatura</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ServletGestionTemperatura</servlet-name>
<url-pattern>/ServletGestionTemperatura</url-pattern>
</servlet-mapping>
</web-app>

Tambin en el servidor jboss se debe colocar el archivo properties donde se coloca la ruta de
guvnor drool.
Segn la ruta dada en la clase ServicioAnalisis, la ruta es:

"./analisis/Reglas.properties"
Si la carpeta anlisis no se encuentra se crea en data.

La ruta donde se crea es:


jboss-4.2.2.GA\server\default\data\analisis
Nombre: Reglas.properties
El cdigo que se coloca en el properties:
##
## RuleAgent configuration file example
##
##file=/foo/bar/boo.pkg /foo/bar/boo2.pkg
##
newInstance=false
url=http://localhost:8080/droolsjbrms/org.drools.brms.JBRMS/package/VariableTemperatura/LATEST
#file=E:/Java/Drools/Biblioteca.pkg
name=MyConfig
poll=30
Como resumen y resultados tenemos:

Estructura de proyecto en eclipse:

Formulario de ingreso de temperatura:

Despus de enviar el parmetro se obtiene.

Es la descripcin dada por la regla creada en guvnor drools.

Instalador de drools y creacin de reglas.


BossDrools BRMS esel componente de Jboss Rules que permite gestionar, almacenar, clasificar,
modificar y desplegar en caliente reglas de negocio, que podrn ser invocadas va servicios web
desde aplicaciones Java.
Proporciona un interfaz Web, que facilita la definicin de reglas a personas que no trabajan con
habitualmente con IDES de desarrollo, principalmente Analista de Negocio y Expertos en Reglas.
Alguna caracterstica tcnica interesante: utiliza JCR (JackRabbit) para la gestin del repositorio de
reglas o que utiliza el estndar JAAS para la autorizacin y autenticacin.
Instalacin de las libreras de Drools en el JBOSS AS
Debido a que se va a utilizar el Droold BRMS para la administracin de las reglas se deben copiar
dentro del servidor de aplicacin JBOSS las libreras necesarias. Para esto se siguen los siguientes
pasos:

Descargue el archivo .zip con las libreras de Drools que se indic la pgina de instaladores
Descomprima este archivo
Copie los siguientes jars:
drools-core-4.0.7.jar (Se encuentra en la carpeta donde descomprimi el archivo).
mvel-1.3.1-java1.4.jar (Se encuentra en la carpeta /lib donde descomprimi el
.zip).
Pegue los jars en la carpeta JBOSS_HOME\server\default\lib.

Despliegue de Drools BRMS en el servidor de aplicaciones.


Para realizar el despliegue de la interfaz web de administracin de reglas de drools realice los
siguientes pasos:
Descargue el archivo zip de Drools BRMS http://download.jboss.org/drools/release
Descomprima el archivo (Debi aparecer un archivo denominado drools-jbrms.war)
Copie este archivo y pguelo en la carpeta de deploy en servidor de aplicaciones JBoss
(JBOSS_HOME\server\default\deploy)
Inicie JBoss ejecutando el archivo binario JBOSS_HOME\bin\run.bat
Si le sale una notificacin de Windows, dele click en Desbloquear.
Una vez terminado el despliegue de JBoss, desde su navegador puede ingresar a la
siguiente direccin donde se encuentra el administrador web de drools:
http://localhost:8080/drools-jbrms/,
A continuacin nos aparece la siguiente pantalla de login pulsamos el botn Login con User y
Password vacos.Debera estar en la pgina de inicio del BRMS. Si no te da respuesta de la pagina
siguiente probar con otros navegadores, tal como chrome o explorer.

A continuacin pulsamos sobre la opcin del men Packages, la pantalla muestra varias
opciones en la parte superior representadas por pequeos iconos, Haga click en el cono de
create new package en la ventana que aparece e ingrese un nombre. En la siguiente imagen se
puede observar:

Ingresandolos datos necesarios,Nos solicita un nombre de paquete y una descripcin, se da en la


opcin CreatePackage. Ya queda creado el paquete en este caso llamado VariableTemperatura.

Recordemos que para definir reglas necesitamos un modelo (Clase Java) sobre la cual verificar
condiciones y ejecutar acciones. En nuestro caso se tiene una clase que est en la aplicacin de
sensor. El directorio est en uniminuto.se.variable de la aplicacin web. Se debe crear el
respectivo .jar de esta clase lo cual realizamos el siguiente procedimiento:
Haga click derecho sobre la clase Temperatura en nuestro caso.
Escoja la opcin Export.
Escoja la opcin Java / Jar File.
En la ubicacin de export.

Si se necesita realizar cambios a este archivo es necesario crear de nuevo el .jar


Una vez creado el jar de la clase Temperatura vamos a proceder a cargarlo en el BRMS:
Haga cick en el cono de create a new model

Ingrese un nombre para el modelo (Temperatura)

Luego de ingresar los datos, dar click en ok.


Ahora vamos a asociar un modelo de datos al paquete creado anteriormente, este modelo debe
hacer referencia a un jar, el cual contendr una serie de beans, en nuestro caso un nico bean
llamado Temperatura. Importante: el jar no debe contener los fuentes.
En la nueva ventana haga click en examinar y escoja el .jar anteriormente creado, haga click en
Upload.

Observando el tmodel creado queda de la siguiente forma:

En el rbol de la izquierda hacemos click sobre el paquete, y seleccionamos


EditPackageConfiguration, nos aparece la siguiente pantalla. En la seccin Header debemos
incluir las clases sobre la cuales vamos a definir reglas, as como la definicin de variables globales.
En nuestro caso aadimos nuestro nico bean, importante no incluir; al final de la lnea:

Colocar: import uniminuto.se.variable.Temperatura (Esto le indica que debe asociar al paquete la


clase Temperatura del jar cargado anteriormente)

Hacer click en Save and valdate configuration.


Ahora haga click en Build, Validate and Deploy y haga click en BuildPakage (El paso de
BuildPackage es necesario de realizar siempre que se hagan cambios sobre las reglas).

Luego se crea una categora, las categoras no son obligatorias, pero es recomendable cuando
tenemos gran cantidad de reglas. Para ello vamos al Men Admin Create a new category.
Introducimos el nombre (Valortemperatura) y una descripcin, y pulsamos OK. Si no aparece la
nueva categora pulsa sobre la opcin Refreshview.

Llegados a este punto ya podemos definir una regla, para ello en el men que se encuentra
encima del rbol, pulsamos sobre el icono de Drools si nos ponemos sobre este nos muestra un
tooltip con Create New Rule.

Introducimos el nombre, seleccionamos el paquete, y el formato de la regla, vamos a seleccionar


Regla de Negocio (Bussiness rule usingguided editor).

Aparecer el campo de texto donde se escribir la regla, por ejemplo.


rule "1001"
no-loop true
when
p:Temperatura(valortemperatura<"10")
then
p.setDescripcion("Temperatura Muy Baja");
update(p);
end

Esta regla corresponde a la que habamos definido antes y est escrita en el lenguaje de Drools
(mvel)

Haga click en el botn valdate para que el administrador revise la regla y decida si est
bien escrita de acuerdo a la sintaxis de mvel.
Luego haga click en save changes y save en la ventana nueva que sale.
Volvemos al link de packages, seleccionamos el paquete de Biblioteca, y volvemos a
Generar el paquete (Hacer click en build, valdate and deploy y luego en build package)
Debera salir el mensaje de Package built succesful

Bibliografia
http://cupi2.uniandes.edu.co/site/index.php/tutoriales/drools

You might also like