lunes, 11 de noviembre de 2013

Workflow PetriNet

Técnicamente se entiende que un Workflow corresponde a un conjunto de actividades o tareas que se ejecutan en un contexto de negocio, y que pueden interactuar con otros sistemas.

Para diseñar un Workflow, un proceso de negocio o un flujo de tareas en una organización, nos podemos ayudar de alguna herramienta de diseño de procesos, un diseñador bpmn o power point, dependiento el alcance o detalle que queremos agregar al proceso sera necesario optar con alguna especificacion para el diseño de Workflow.

Las redes de Petri son una herramienta establecida para el modeling y procesos de análisis. Por una parte, las redes de Petri se pueden utilizar como un lenguaje de diseño para la especificación de los flujos de trabajo complejos/ Workflows. Por otro lado, las redes de Petri proporciona técnicas de análisis de gran alcance que puede ser utilizado para verificar la corrección de procedimientos de flujo de trabajo (Workflow).

http://www.yasper.org/

Yasper aporta simulación manual y automática de un flujo de proceso, en el que el usuario selecciona pasos de ejecución haciendo clic en el modelo, y la simulación automática, que aleatoriza la elección de pasos y produce un informe agregado con estadísticas relevantes.

Los modelos Yasper apoyan directamente las ampliaciones de las redes de Petri, y pueden emular varias otras técnicas, tales como máquinas de estado, diagramas de flujo, diagramas UML, de actividad y EPC (event process chain).

http://www.yasper.org/

Notación:





Ejemplo:



jueves, 17 de octubre de 2013

Enviar email con java

Buenas, un amigo cuyo nombre no quiero decir me pidio esto, ojala funcione, ya que hay otras formas y otros parametros que se pueden utilizar dependiendo el servidor de correo y sus configuraciones

import java.util.Properties;

import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;


/**
 * Ejemplo de envio de correo simple con JavaMail
 *
 * @author slack
 *
  */
public class EnviarMail
{
    /**
     * main de prueba
     * @param args Se ignoran.
     */
    public static void main(String[] args)
    {
        try
        {
            // Propiedades de la conexión
            Properties props = new Properties();
            props.setProperty("mail.smtp.host", "smtp.gmail.com");
            props.setProperty("mail.smtp.starttls.enable", "true");
            props.setProperty("mail.smtp.port", "25");
            props.setProperty("mail.smtp.user", "lcorneteros@gmail.com");
            props.setProperty("mail.smtp.auth", "true");

            // Preparamos la sesion
            Session session = Session.getDefaultInstance(props);

            // Construimos el mensaje
            MimeMessage message = new MimeMessage(session);
            message.setFrom(new InternetAddress("yo@yo.com"));
            message.addRecipient(
                Message.RecipientType.TO,
                new InternetAddress("linSlackware@gmail.com"));
            message.setSubject("Hola");
            message.setText("eeelllla la q envia email con java ");

            // Lo enviamos.
            Transport t = session.getTransport("smtp");
            t.connect("lconajeros@gmail.com", "clave");
            t.sendMessage(message, message.getAllRecipients());

            // Cierre.
            t.close();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
}


Saludos !!

Patrones de Diseño

¿Qué es un patrón de diseño ?

La manera más simple para describir un patrón es que proporciona una solución probada a un problema común documentado individualmente en un formato coherente y por lo general como parte de una colección más grande .

La noción de un patrón que ya es una parte fundamental de la vida cotidiana. Sin reconocer que cada vez , es natural que utilizamos soluciones de probada eficacia para resolver los problemas comunes de todos los días. Patrones en el mundo de TI que giran en torno al diseño de sistemas automatizados se conocen como patrones de diseño.

Los patrones de diseño son útiles porque :

representan soluciones probadas en el campo de los problemas comunes de diseño organizar la inteligencia del diseño en un formato estandarizado y fácilmente " referenciable " generalmente son repetibles por la mayoría de los profesionales de TI que participan en el diseño se puede utilizar para garantizar la coherencia en cómo se diseñan los sistemas y construido puede ser la base de las normas de diseño
suelen ser flexibles y opcionales ( y abiertamente documentar los impactos de su aplicación e incluso proponer enfoques alternativos ) se puede utilizar como ayudas educativas mediante la documentación de aspectos específicos de diseño del sistema ( independientemente de si se aplican ) a veces puede ser aplicado antes y después de la aplicación de un sistema de se puede apoyar a través de la aplicación de otros patrones de diseño que son parte de la misma colección enriquecer el vocabulario de un determinado campo de TI , ya que cada patrón se le da un nombre significativo, además, dado que las soluciones aportadas por los patrones de diseño son probados , su aplicación sistemática tiende a mejorar naturalmente la calidad de los diseños de sistemas .

Tenga en cuenta que a pesar de que los patrones de diseño proporcionan soluciones de diseño probadas , su mera utilización no puede garantizar que los problemas de diseño siempre se resuelven según sea necesario. Hay muchos factores que pesan en el éxito final de la utilización de un patrón de diseño , incluyendo las limitaciones impuestas por el entorno de aplicación , la competencia de los practicantes , divergencias entre los requisitos de negocio , y así sucesivamente . Todos estos representan los aspectos que afectan a la medida en que un patrón puede ser aplicado con éxito .

modelo de la notación

La SOA patrones de diseño de catálogo utiliza una notación sencilla para representar sistemáticamente diferentes tipos de patrones .

patrón Símbolos

Cuando se trabaja con patrones de diseño SOA , ligeramente diferentes símbolos se usan para representar :


  • un patrón de diseño
  • un patrón de diseño compuesto
  • un grupo de patrones de diseño relacionados

Además, los colores se incorporan para indicar si un patrón de diseño que aparece justo es que se hace referencia y no se discute en realidad , frente a uno que es el tema actual de discusión.



Estos símbolos se utilizan en todo el libro Design Patterns SOA , especialmente en los diagramas de relación de patrón. En este sitio web se dará cuenta de que todo cuando se analizan los patrones de compuestos.

figuras de patrónes

Los símbolos patrón antes mencionados se utilizan en las siguientes tres tipos principales de diagramas :


  • propuestas secuencias de aplicación de patrones
  • relaciones patrón
  • jerarquías patrón compuesto

Vamos a echar un vistazo más de cerca a cada uno de estos tres tipos de diagramas principales:

Patrón aplicación Secuencias Figuras

Al documentar las secuencias recomendadas modelo de solicitud , los grupos de patrones relacionados y los patrones individuales que pertenecen a un grupo en particular se muestran de la siguiente manera :



Estos patrones se muestran en una secuencia de aplicación recomendada.



Estos patrones se muestran en una secuencia de aplicación recomendada .

En este caso, no hay requisitos firmes en cuanto al orden en que deben aplicarse los tres patrones de la derecha.

Patrón de relación Figuras

Cada patrón se documenta con un diagrama de relaciones entre patrón , como se muestra aquí:



Una convención estilo aplicado a todos los diagramas de relación patrón es el uso del color , de la siguiente manera :

Cada diagrama de relaciones patrón explora las relaciones de un patrón . Por lo tanto , que el patrón de diseño se pone de relieve en rojo , como por la notación símbolo previamente establecido .
Relaciones preestablecidas se documentarán de manera unidireccional. Para las relaciones en que el patrón que se está debatiendo en la actualidad afecta o se refiere a otros modelos, una línea roja se utiliza junto con una flecha apuntando hacia el otro patrón. Cuando los documentos de línea de relación cómo otros patrones se relacionan con el modelo actual , las líneas son de color verde , y las flechas se invierten.
Tenga en cuenta que la direccionalidad de las relaciones se conserva en diferentes diagramas. Por ejemplo , la línea de relación emisor de luz verde de Normalización de servicio y apuntando a la centralización de lógica en la figura anterior se invertirían ( y de color rojo ) en la figura relación de patrón para el patrón de Normalización de servicio . Tenga en cuenta que los diagramas de relación patrón se proporcionan en un solo libro.

Compuesto Jerarquía Patrón Figura

Patrones compuestas se componen de combinaciones de patrones de diseño . Cuando se muestra un patrón compuesto , por lo general se requiere una representación jerárquica , en la que aparece el nombre del patrón compuesto en la parte superior , y los patrones que forman el compuesto se muestra debajo.




Estos tipos de diagramas pueden ser considerados figuras relación simplificados en que sólo se identifican patrones que pertenecen a cada compuesto , sin entrar en los detalles de cómo estos patrones se relacionan .


patrón Perfil

Además del nombre del patrón y el nombre del contribuyente ( s ) , cada uno de los modelos de este catálogo se describe el uso de un formato de perfil constante y la estructura sobre la base de las siguientes partes:


  • requisito
  • icono
  • Cuadro Resumen
  • Principios
  • arquitectura
  • problema
  • solución
  • aplicación
  • Impactos
  • relaciones
  • Estudio de caso Ejemplo

En las siguientes secciones se describe cada parte de un perfil de patrón de forma individual . Tenga en cuenta que de acuerdo con los requisitos de publicación de Prentice Hall, sólo con el requisito, icono , cuadro sinóptico , una figura de la muestra, y los vínculos con los patrones relacionados se publican para cada patrón en este sitio Web para los patrones que forman parte del catálogo maestro . Las secciones detalladas , ejemplos de casos de estudio , diagramas de relación, y el contenido suplementaria se proporcionan en el libro. Dado que los patrones candidatos se publican para fines de revisión , la información más detallada a veces se pone a disposición .

requisito

Un requisito es una declaración concisa , simple frase que presenta el requisito fundamental dirigida por el patrón en la forma de una pregunta. Cada descripción del patrón comienza con esta declaración.

Un ejemplo de una declaración de necesidad:

¿Cómo puede un servicio de ser diseñado para minimizar las posibilidades de capacidad de lógica deconstrucción ?

icono

La descripción de cada patrón se acompaña de una imagen de icono que actúa como un identificador visual .

Un ejemplo de un icono de patrón:



Los iconos se muestran junto con los estados exigencia en cada perfil de patrón , así como en el interior de la portada del libro .

Cuadro Resumen

Tras la declaración de obligación , se muestra un cuadro resumen , compuesto por las declaraciones que en conjunto proporcionan una sinopsis concisa del patrón para fines de referencia rápida .

Las siguientes partes del perfil se resumen en la siguiente tabla:


  • problema
  • solución
  • aplicación
  • Impactos

Además, la tabla de perfiles proporciona referencias a los principios de diseño de servicios de orientación relacionados y tipos de arquitectura orientadas al servicio a través de las siguientes secciones:

Principios
arquitectura
Las partes de la descripción del patrón no representado en la tabla de resumen son las relaciones y las secciones de caso de estudio .

problema

El problema que causa un problema y los efectos del problema se describen en esta sección , que típicamente se acompaña de una figura que ilustra aún más el " estado de problema . " Es este problema para el que se espera que el patrón para proporcionar una solución . A menudo incluyen con descripciones de los problemas son las circunstancias comunes que pueden conducir al problema (también conocido como " fuerzas ") .

solución

Esto representa la solución de diseño propuesto por el patrón para resolver el problema y cumplir con el requisito . A menudo, la solución está a una corta declaración seguida de un diagrama que se comunica de forma concisa el estado de solución final. " How-to " datos no se proporcionan en esta sección, pero en cambio se encuentran en la sección de aplicaciones.

aplicación

Esta parte está dedicada a la descripción de cómo se puede aplicar el patrón. En Puede incluir directrices, los detalles de implementación y, a veces incluso un proceso sugerido.

Impactos

La mayoría de los modelos vienen con ventajas y desventajas . Esta sección destaca las consecuencias comunes , costos y requisitos asociados con la aplicación de un patrón y también puede proporcionar alternativas que se pueden considerar .

Tenga en cuenta que estas consecuencias son frecuentes, pero no necesariamente predecible. Por ejemplo , las cuestiones relacionadas con los requisitos de rendimiento comunes a menudo se plantean , sin embargo , estos problemas no pueden afectar un entorno con una infraestructura ya altamente escalable.

Patrones SOA y tecnologías de aplicación

Es importante para ver y posicionar SOA como un modelo arquitectónico que es neutral a cualquier plataforma de tecnología y la orientación a servicios como un paradigma que es neutral a cualquier medio de aplicación distribuida . Al hacer esto, usted tiene la libertad de ejercer continuamente los objetivos estratégicos relacionados con SOA y la orientación a servicios , aprovechando en curso avances tecnológicos .

Por ejemplo , un servicio puede ser construido e implementado como un componente , un servicio web basado en SOAP o un servicio REST. Esencialmente , cualquier tecnología de aplicación que se puede utilizar para crear un sistema distribuido puede ser adecuado para la orientación a servicios . Muchos de los patrones de diseño de este catálogo no son específicos de uno cualquiera de estos tres medios de aplicación , pero algunos son . Varios ejemplos se basan en el uso de los servicios Web basados ​​en SOAP porque este medio de la implementación del servicio ha sido históricamente los más populares. Esto no le impide aplicar los patrones con otras tecnologías apropiadas . Algunos patrones , en particular, pueden llevarse a cabo con productos específicos de proveedor y tecnologías que se basan en protocolos de comunicación alternativos y las API que no se basan en estándares de la industria .

Al decidir sobre qué tecnologías a utilizar para un determinado patrón , puede ser útil tomar algunas de las pautas relativas a la normalización en cuenta , tales como Protocolo de Canonical, protocolos duales, recursos canónicos y esquema Canónicos . Este tipo de patrones pueden proporcionar orientación normativa para ayudarle a establecer unos criterios básicos para la selección de la tecnología.

viernes, 11 de octubre de 2013

Arquitectura TI Estandar Framework y Componentes, Basada en la especificación J2EE.

Arquitectura TI Estandar Framework y Componentes, Basada en la especificación J2EE.



Recursos.


Oracle GlassFish Server.
Oracle GlassFish Enterprise Server proporciona un servidor para el desarrollo y el despliegue de la plataforma Java, Enterprise Edition (plataforma Java EE) y tecnologías web basadas en la tecnología Java, algunas de sus características son:
  • Servidor de aplicaciones con asistencia gratuita de la comunidad
  • Los mejores servidores de aplicaciones de código abierto del sector hoy en día.
  • Arquitectura modular y extensible de nueva generación (OSGi)
  • Fiabilidad y rendimiento con menor complejidad para las empresas
  • usa un componente adicional llamado Grizzly que usa Java NIO para escalabilidad y velocidad.


Apache Software.
Apache Software Foundation (ASF) es una organización no lucrativa (en concreto, una fundación) creada para dar soporte a los proyectos de software bajo la denominación Apache, incluyendo el popular servidor HTTP Apache. La ASF se formó a partir del llamado Grupo Apache y fue registrada en Delaware (Estados Unidos), en junio de 1999.
Entre los objetivos de la ASF se encuentran el de proporcionar tecnologías basadas en librerías Java que componen los framework que son utilizados por la industria de desarrollo de software.


Eclipse.
Eclipse es un programa informático, entorno de desarrollo de software ampliamente utilizado, compuesto por un conjunto de herramientas de programación de código abierto multiplataforma para desarrollar lo que el proyecto llama "Aplicaciones de Cliente Enriquecido", basadas en navegadores. Esta plataforma, típicamente ha sido usada para desarrollar entornos de desarrollo integrados (del inglés IDE), como el IDE de Java llamado Java Development Toolkit (JDT) y el compilador (ECJ) que se entrega como parte de Eclipse (y que son usados también para desarrollar el mismo Eclipse).


Java .
El lenguaje de programación Java fue originalmente desarrollado por James Gosling de Sun Microsystems (la cual fue adquirida por la compañía Oracle) y publicado en el 1995 como un componente fundamental de la plataforma Java de Sun Microsystems. Su sintaxis deriva mucho de C y C++, pero tiene menos facilidades de bajo nivel que cualquiera de ellos. Las aplicaciones de Java generalmente pueden ejecutarse en cualquier máquina virtual Java (JVM) sin importar la arquitectura de la computadora subyacente. Java es un lenguaje de programación de propósito generalconcurrenteorientado a objetos y basado en clases. Su intención es permitir que los desarrolladores de aplicaciones escriban el programa una vez y lo ejecuten en cualquier dispositivo (conocido en inglés como WORA, o "write once, run anywhere"), lo que quiere decir que el código que es ejecutado en una plataforma no tiene que ser recompilado para correr en otra. Java es, a partir del 2012, uno de los lenguajes de programación más populares en uso, particularmente para aplicaciones de cliente-servidor de web, con unos 10 millones de usuarios reportados.

DisplayTag.
DisplayTag es un una librería de tags jsp que es de gran utilidad a la hora de trabajar con una arquitectura MVC, permite mostrar tablas dentro de los jsp sin la necesidad de recurrir al Scriplet o la utilización de varios tag de JSTL o Struts.
Entre las funcionalidades más destacadas de esta librería: paginación, ordenamiento, exportación de las tablas (en varios formatos: pdf, rtf, csv, Excel, XML).


Junit .
JUnit es un conjunto de bibliotecas que son utilizadas en programación para hacer pruebas unitarias de aplicaciones Java.
JUnit es un conjunto de clases (framework) que permite realizar la ejecución de clases Java de manera controlada, para poder evaluar si el funcionamiento de cada uno de los métodos de la clase se comporta como se espera.
JUnit es también un medio de controlar las pruebas de regresión, necesarias cuando una parte del código ha sido modificado y se desea ver que el nuevo código cumple con los requerimientos anteriores y que no se ha alterado su funcionalidad después de la nueva modificación.


Netbeans .
NETBEANS es un entorno de desarrollo integrado, hecho principalmente para el lenguaje de programación Java.
NetBeans es un proyecto de código abierto de gran éxito con una gran base de usuarios, una comunidad en constante crecimiento, y con más de 500 socios en todo el mundo. Sun MicroSystems fundó el proyecto de código abierto NetBeans en junio de 2000 y Oracle continúa siendo el patrocinador principal.
La plataforma NetBeans permite que las aplicaciones sean desarrolladas a partir de un conjunto de componentes de software llamados módulos. Las aplicaciones construidas a partir de módulos pueden ser extendidas agregándole nuevos módulos. Debido a que los módulos pueden ser desarrollados independientemente, las aplicaciones basadas en la plataforma NetBeans pueden ser extendidas fácilmente por otros desarrolladores de software.


Pentaho.
Pentaho se define como una plataforma de BI “orientada a la solución” y “centrada en procesos” que incluye todos los principales componentes requeridos para implementar soluciones basados en procesos. Las soluciones que Pentaho pretende ofrecer se componen fundamentalmente de una infraestructura de herramientas de análisis e informes integrados con un motor de workflow de procesos de negocio. La plataforma será capaz de ejecutar las reglas de negocio necesarias, expresadas en forma de procesos y actividades y de presentar y entregar la información adecuada en el momento adecuado.
Algunos módulos son reporting, analysis, dahsboards, data Mining y herramientas para tratamiento de datos.


Hinernate.
Hibernate es una herramienta de Mapeo objeto-relacional (ORM) para la plataforma Java (y disponible también para .Net con el nombre de NHibernate) que facilita el mapeo de atributos entre una base de datos relacional tradicional y el modelo de objetos de una aplicación, mediante archivos declarativos (XML) o anotaciones en los beans de las entidades que permiten establecer estas relaciones.
Hibernate busca solucionar el problema de la diferencia entre los dos modelos de datos coexistentes en una aplicación: el usado en la memoria de la computadora (orientación a objetos) y el usado en las bases de datos (modelo relacional). Para lograr esto permite al desarrollador detallar cómo es su modelo de datos, qué relaciones existen y qué forma tienen. Con esta información Hibernate le permite a la aplicación manipular los datos en la base de datos operando sobre objetos, con todas las características de la POO


Apache – Ant.
Apache Ant es una herramienta usada en programación para la realización de tareas mecánicas y repetitivas, normalmente durante la fase de compilación y construcción (build). Es, por tanto, un software para procesos de automatización de compilación, desarrollado en lenguaje Java.
Esta herramienta, hecha en el lenguaje de programación Java, tiene la ventaja de no depender de las órdenes del shell de cada sistema operativo, sino que se basa en archivos de configuración XML y clases Java para la realización de las distintas tareas, siendo idónea como solución multi-plataforma.
Ant es un proyecto de la Apache Software Foundation, y se lanza bajo la licencia Apache Software.


Spring Framework.
Spring es un framework para el desarrollo de aplicaciones y contenedor de inversión de control para la plataforma Java.
El framework fue lanzado inicialmente bajo la licencia Apache 2.0. Spring Framework a ontenido reconocimientos Jolt Awards, Jax Innovation Awards, etc. desde el 2006 a la fecha.
Las características fundamentales de Spring Framework pueden ser usadas en cualquier aplicación desarrollada en Java y la plataforma Java EE. A pesar que no impone ningún modelo de programación en particular, este framework se ha vuelto popular en la comunidad al ser ampliamente utilizado y soportado por la Industria de desarrollo Java y J2EE para aplicaciones empresariales.



Log4j.
Log4j es una biblioteca desarrollada en Java por la Apache Software Foundation que permite a los desarrolladores de software elegir la salida y el nivel de granularidad de los mensajes o “logs” (data logging) a tiempo de ejecución y no a tiempo de compilación como es comúnmente realizado.


CVS.
Concurrent Versions System o simplemente CVS, es una aplicación informática que implementa un sistema de control de versiones: mantiene el registro de todo el trabajo y los cambios en los ficheros (código fuente principalmente) que forman un proyecto (de programa) y permite que distintos desarrolladores (potencialmente situados a gran distancia) colaboren. CVS se ha hecho popular en el mundo del software. Sus desarrolladores difunden el sistema bajo la licenciaGPL.


Jasper Report :
JasperReports es una herramienta de creación de informes que tiene la habilidad de entregar contenido enriquecido al usuario, en distintos formatos como ficheros PDFHTMLXLSCSV y XML.
Está escrito completamente en Java y puede ser usado en gran variedad de aplicaciones, incluyendo J2EE o aplicaciones web, para generar contenido dinámico.
Su propósito principal es ayudar a crear documentos dinámicos, reportes gráficos, etc.
JasperReports se usa comúnmente con iReport, un front-end gráfico para la edición de informes.
Se encuentra bajo licencia libre GNU de apache software foundation.



Oracle Database.
Oracle Database es un sistema de gestión de base de datos objeto-relacional (u ORDBMS por el acrónimo en inglés de Object-Relational Data Base Management System), desarrollado por Oracle Corporation.
Se considera a Oracle Database como uno de los sistemas de bases de datos más completos, destacando:

URL’s.
http://java.sun.com/
http://netbeans.org/
http://soa.netbeans.org/soa/
http://www.springsource.org/
http://displaytag.sourceforge.net/
http://www.pentaho.com/
http://www.intalio.com/
http://www.hibernate.org/
http://linslackware.blogspot.com/

http://community.jaspersoft.com/
Validar firma xml utilizando certificado x509 y libreria xmlsec-1.4.3.jar

package xml;

import java.io.File;  
import java.security.PublicKey;  
import java.security.cert.X509Certificate;  
import org.apache.xml.security.keys.KeyInfo;  
import org.apache.xml.security.signature.XMLSignature;  
import org.w3c.dom.*;  
  
import javax.xml.parsers.*;  
  
/** 
 * Verifica un archivo firmado 
 * @author Jorge Salomon
 * @see http://linSlackware.blogspot.com 
 */  
public class VerifySignature {  
      
    /** 
     * Punto de inicio 
     */  
    public static void main(String args[]) throws Exception {  
        org.apache.xml.security.Init.init();  
  
        String signatureFileName = "/home/slack/desarrollo/testing/src/xml/xml/DTE_DOWN76828160-2 387.xml";  
  
        DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();  
  
        dbf.setNamespaceAware(true);  
        dbf.setAttribute("http://xml.org/sax/features/namespaces", Boolean.TRUE);  
          
        File            f   = new File(signatureFileName);  
        DocumentBuilder db  = dbf.newDocumentBuilder();  
        Document     doc    = db.parse(new java.io.FileInputStream(f));  
        Element      sigElement = (Element) doc.getElementsByTagName("Signature").item(0);  
        XMLSignature signature  = new XMLSignature(sigElement, f.toURL().toString());  
  
        KeyInfo keyInfo = signature.getKeyInfo();  
        if (keyInfo != null) {  
            X509Certificate cert = keyInfo.getX509Certificate();  
            if (cert != null) {  
                // Validamos la firma usando un certificado X509  
                if (signature.checkSignatureValue(cert)){  
                    System.out.println("Válido según el certificado");    
                } else {  
                    System.out.println("Inválido según el certificado");      
                }  
            } else {  
                // No encontramos un Certificado intentamos validar por la cláve pública  
                PublicKey pk = keyInfo.getPublicKey();  
                if (pk != null) {  
                    // Validamos usando la clave pública  
                    if (signature.checkSignatureValue(pk)){  
                        System.out.println("Válido según la clave pública");      
                    } else {  
                        System.out.println("Inválido según la clave pública");    
                    }  
                } else {  
                    System.out.println("No podemos validar, tampoco hay clave pública");  
                }  
            }  
        } else {  
            System.out.println("No ha sido posible encontrar el KeyInfo");  
        }  
    }  
  
}