laboratorio 2 de sistemas experto

28
  Sistemas Expertos uniminuto Laboratorio 2 de sistemas experto. Elaborado por: Ing. John Jaiver Muñoz Universidad uniminuto Santiago de Cali, valle del cauca. 2014

Upload: juanmro

Post on 06-Oct-2015

9 views

Category:

Documents


0 download

DESCRIPTION

sistemas experto reglas de negocio

TRANSCRIPT

  • 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/

    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:

  • Gestin de Variable Temperatura

    Opciones de Ingreso:

    Valor Temperatura:

  • 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 javax.servlet.RequestDispatcher;

    import javax.servlet.ServletException;

    import javax.servlet.http.HttpServlet;

    import javax.servlet.http.HttpServletRequest;

    import 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:

  • Resultado del Expert

    Descripcin de Temperatura

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

    MedidorTemperatura

    index.html

    ServletGestionTemperatura

    ServletGestionTemperatura

    edu.uniminuto.se.servlet.ServletGestionTemperatura

    ServletGestionTemperatura

    /ServletGestionTemperatura

    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/drools-jbrms/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

  • Bibliografia

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