Mostrando entradas con la etiqueta xml. Mostrar todas las entradas
Mostrando entradas con la etiqueta xml. Mostrar todas las entradas

jueves, 22 de mayo de 2014

Configurar Jasper Reports 5 en JBoss EAP como módulo

En esta última semana tuve que resolver un problema de dependencia para poder usar el componente Jasper Reports 5 en el servidor JBoss EAP 6 instalado en Red Hat, en mi escenario ya estaba configurado el jasper como modulo sin embargo se usaba una versión anterior a la requerida por mi aplicación (específicamente la 3) lo cual desencadenaba errores al querer ejecutar los reportes del nuevo site. Por lo cual procedí a modificar la carpeta del módulo anterior ya configurado a fin de elevar la version del Jasper, primero se debe bajar el servicio del jboss con el comando en la terminal service jboss-as stop como root claro despues localize la carpeta del módulo del jasper en la siguiente ubicación /opt/jboss6/jboss-eap-6.0/modules/JasperReport3/main/


Copie todos los archivos jar necesarios en la carpeta main antes descrita a fin de que pueda levantar el Jasper Reports 5, la carpeta quedo con los siguientes archivos (dar click en la imagen para ampliar):


Luego de copiar los archivos antes descritos se debe modificar el archivo module.xml que es finalmente en el que se configuran las dependencias en los JAR del módulo, evidentemente antes en este archivo se encontraba direccionado el jar del Jasper Reports 3 y sus dependencias por lo cual solo tuve que actualizar este documento ahora referenciando a los nuevos componentes del Jasper Reports 5 copiados anteriormente.


Luego de modificar y guardar el archivo module.xml iniciamos nuevamente el servicio con el comando en la terminal service jboss-as start como root y ya podemos usar el Jasper Reports 5 en nuestro servidor.

Si desean bajar la carpeta main completa la dejo comprimida en el siguiente enlace del drive. Espero les sea de ayuda. Hasta la próxima!

jueves, 16 de enero de 2014

Comunicación entre aplicaciones web usando xml, java y javascript

En estos días me tope con un problema a resolver y se trata de verificar la creación de un archivo PDF en una aplicación web distinta a la mia, el cual en el ejemplo que explicaré a continuación denominaremos cargo. Evidentemente tuve que modificar las dos aplicaciones para que se puedan comunicar de alguna manera, en este caso opte por XML, la arquitectura quedó masomenos del siguiente modo:


En donde Rich Client vendria a ser la aplicacion cliente y Server es la aplicacion donde se vericará la creación/existencia del registro en base de datos o archivo en PDF en este caso ya que podría servir para verificar ambos.

Primero configuramos en el Server el XML de respuesta que se enviará al cliente en base a algunos parámetros get, en este caso el número de cargo y el tipo de cargo, para lo cual necesitamos crear un servlet al cual nombrare ValorPosible.java en la aplicación servidor que contenga lo siguiente:

response.setContentType("text/xml;charset=ISO-8859-1");
      PrintWriter out = response.getWriter(); 
      int tipoval = Tool.parseInt(request.getParameter("tipoval"));
      String resultado = "-1";
     
      switch(tipoval)
      {
      case 70://validar si  hay algun tipo de documento registrado de un cargo
        {
            String nCargo = request.getParameter("nCargo");
            String nTipo = request.getParameter("nTipo");
            String query = "select count (*) NUM from w_doc_cargo where ncargo="+nCargo+" and ntipo="+nTipo;
            int conta =Tool.parseInt(Tool.obtieneDatos(query).getString("NUM"));
            out.print(
                  " \n" +
                  " \n" +
                  "" + conta  + " \n" +
                  "");
              break;
        }
    }
    out.close();
}


Ahora configuraremos la aplicación cliente, primero debemos agregar en la pagina JSP que desea verificar la existencia del archivo la siguiente funcion javascript, si desean pueden hacerlo invocando un archivo js externo o dentro del jsp no hay problema.

            
function retValXml(url1)
{
           if (window.XMLHttpRequest)
             {
             xmlHttp=new XMLHttpRequest();
             }
           else // for older IE 5/6
             {
             xmlHttp=new ActiveXObject("Microsoft.XMLHTTP");
             }
           var url=url1;
           xmlHttp.open("GET",url,false);
           xmlHttp.send();
           var dom=xmlHttp.responseText;
           return dom.split("Valor")[1].substr(1, dom.split("Valor")[1].length-3);
}

También agrego otra función javascript que será finalmente la que determinará la exitencia del registro o archivo en la aplicación servidor mediante la comunicación por XML.

            
function VisualizarPDF(nCargo, nTipo)
{   var url="http://server/servlets/ValorPosible?tipoval=70&nCargo=" + nCargo;
    var ret = retValXml(url);
    if(trim(nCargo)=="")
    {
        alert("Ingrese un número de cargo");
    }
    else if(ret=="0")
    {       
        alert("El número de cargo no existe");
    }
    else
    {
        //...Aqui va el codigo para redirigir hacia la url/ubicación predefinida de los cargos
        window.location.href = 'http://server/ruta/predefinida/pdfs/' + nCargo + ".pdf";
    }
}

Nótese que en la pagina JSP de la aplicación cliente en la funcion javascript anterior invocamos al servlet de la aplicación servidor en la línea:

var url="http://server/servlets/ValorPosible?tipoval=70&nCargo=" + nCargo;

Solo nos quedaría testear nuestra funcion invocandola desde un hipervinculo o enlace de la siguiente manera:

<a href="#" onclick="javascript:VisualizarPDF(1,70);" > Descargar </a>

Evidentemente en la aplicación este link debe tener el parámetro número de cargo como dinámico en la función VisualizarPDF en este caso estoy pasando el codigo de cargo "1", despues de verificar la existencia se redirige hacia el archivo "1.pdf" ubicado en la ruta predefinida de archivos en la aplicacion servidor o en la que configuremos en el código.

Hasta luego.