viernes, enero 03, 2014

java.lang.IllegalStateException: getOutputStream() ya ha sido llamado para esta respuesta JSF JasperReports

Saludos el problema se me sucito por que al parecer al FacesContext debe procesar el ciclo de vida.

En otras palabras tenia el codigo asi:

HttpServletResponse httpServletResponse=(HttpServletResponse)FacesContext.getExternalContext().getResponse();


Y debi cambiarlo a este modo:

FacesContext facesContext= FacesContext.getCurrentInstance();

HttpServletResponse httpServletResponse=(HttpServletResponse)facesContext.getExternalContext().getResponse();
.
.
.//(resto de codigo)
.

facesContext.responseComplete(); //se debe ejecutar el responseComplete();

Un poco mas sobre la explicacion:

http://www.programacion.com/articulo/introduccion_a_la_tecnologia_javaserver_faces_233/5


Espero que sea de su ayuda.

Hasta la proxima.

martes, diciembre 17, 2013

Firma Electronica XML Banco Central del Ecuador BCE

Saludos en esta entrada publicare como firmar un archivo XML con la firma electrónica en archivo p12 proveída por el Banco Central del Ecuador.

Esta firma es la mas barata del mercado.

En formato:

Extención .p12
Estándar: X.509
Algoritmo: RSA-SHA1

Podre disponible para los lenguajes de programación Java y C#.

Java (Probado con el JDK de oracle):

1. Lo que tenemos que hacer es bajarnos las bibliotecas recomendadas inclusive en la documentacion del SRI.

Ingresamos a:

http://oficinavirtual.mityc.es/componentes/

Luego en descagas:

http://oficinavirtual.mityc.es/componentes/downloads.html

Nos bajamos los componentes incluyendo las dependencias.

componentes-1.1.7-with-deps.zip (Version al momento de escribir esta entrada).

2. Agregamos las referencias al proyecto donde estamos desarrollando. Preferiblemente incluir todas y las librerias de la firma.

Los jasrs estan dentro de la caperpeta deps y core.

3. De acuerdo a la documentacion debemos crear una clase que sirva como clase generica para la firma y una clase especifiquemos las lineas de codigo para nuestro tipo de firma.

En la documentacion del SRI explica que debemos usar el tipo de firma XAdES_BES. Por lo que la segunda clase nos ayudara para espicificar esto.

Clase FirmaGenerica (Clase abstracta como se muestra en la documentacion):

public abstract class GenericXMLSignature {


    //Path de la firma electronica
    private String pathSignature;
    //calve de la firma electronica
    private String passSignature;
    
    /**
    *
    * Ejecución del ejemplo. La ejecución consistirá en la firma de los datos
    * creados por el método abstracto createDataToSign mediante el
    * certificado declarado en la constante PKCS12_FILE. El
    * resultado del proceso de firma será almacenado en un fichero XML en el
    * directorio correspondiente a la constante OUTPUT_DIRECTORY
    * del usuario bajo el nombre devuelto por el método abstracto
    * getSignFileName
    *

    */
  
    /*Metodos Getters y Setters (Propiedades)*/
    public String getPathSignature() {
        return pathSignature;
    }

    public void setPathSignature(String pathSignature) {
        this.pathSignature = pathSignature;
    }

    public String getPassSignature() {
        return passSignature;
    }

    public void setPassSignature(String passSignature) {
        this.passSignature = passSignature;
    }
  
    protected void execute() {
    
        // Obtencion del gestor de claves
        KeyStore keyStore = getKeyStore();
      
        if(keyStore==null){
            System.err.println("No se pudo obtener almacen de firma.");
            return;
        }
        String alias=getAlias(keyStore);
      
        // Obtencion del certificado para firmar. Utilizaremos el primer
        // certificado del almacen.          
        X509Certificate certificate = null;
        try {
            certificate = (X509Certificate)keyStore.getCertificate(alias);
            if (certificate == null) {
                System.err.println("No existe ningún certificado para firmar.");
                return;
            }
        } catch (KeyStoreException e1) {
            e1.printStackTrace();
        }
    
        // Obtención de la clave privada asociada al certificado
        PrivateKey privateKey = null;
        KeyStore tmpKs = keyStore;
        try {
            privateKey = (PrivateKey) tmpKs.getKey(alias, this.passSignature.toCharArray());
        } catch (UnrecoverableKeyException e) {
            System.err.println("No existe clave privada para firmar.");
            e.printStackTrace();
        } catch (KeyStoreException e) {
            System.err.println("No existe clave privada para firmar.");
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            System.err.println("No existe clave privada para firmar.");
            e.printStackTrace();
        }
    
         // Obtención del provider encargado de las labores criptográficas
         Provider provider = keyStore.getProvider();

         /*
          * Creación del objeto que contiene tanto los datos a firmar como la
          * configuración del tipo de firma
          */
         DataToSign dataToSign = createDataToSign();

         /*
          * Creación del objeto encargado de realizar la firma
          */
         FirmaXML firma = new FirmaXML();

         // Firmamos el documento
         Document docSigned = null;
         try {
             Object[] res = firma.signFile(certificate, dataToSign, privateKey, provider);
             docSigned = (Document) res[0];
         } catch (Exception ex) {
             System.err.println("Error realizando la firma");
             ex.printStackTrace();
             return;
         }

         // Guardamos la firma a un fichero en el home del usuario
         String filePath = getPathOut() + File.separatorChar + getSignatureFileName();
         System.out.println("Firma salvada en en: " + filePath);
       
         saveDocumenteDisk(docSigned, filePath);
    }
    
     /**
      *
      * Crea el objeto DataToSign que contiene toda la información de la firma
      * que se desea realizar. Todas las implementaciones deberán proporcionar
      * una implementación de este método
      *

      *
     * @return El objeto DataToSign que contiene toda la información de la firma
      *         a realizar
      */
    protected abstract DataToSign createDataToSign();

    
    protected abstract String getSignatureFileName();
  
    protected abstract String getPathOut();
   

  
     protected Document getDocument(String resource) {
         Document doc = null;
         DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
         dbf.setNamespaceAware(true);
         File file = new File(resource);
         try {
            DocumentBuilder db = dbf.newDocumentBuilder();
          
            doc=db.parse(file);
         } catch (ParserConfigurationException ex) {
             System.err.println("Error al parsear el documento");
             ex.printStackTrace();
             System.exit(-1);
         } catch (SAXException ex) {
             System.err.println("Error al parsear el documento");
             ex.printStackTrace();
             System.exit(-1);
         } catch (IOException ex) {
             System.err.println("Error al parsear el documento");
             ex.printStackTrace();
             System.exit(-1);
         } catch (IllegalArgumentException ex) {
            System.err.println("Error al parsear el documento");
             ex.printStackTrace();
            System.exit(-1);
         }
         return doc;
     }

   
     private KeyStore getKeyStore()
     {
         KeyStore ks = null;
        try {
            ks = KeyStore.getInstance("PKCS12");
            ks.load(new FileInputStream(pathSignature), passSignature.toCharArray());
        } catch (KeyStoreException e) {
            e.printStackTrace();
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        } catch (CertificateException e) {
            e.printStackTrace();
        } catch (IOException e) {
            e.printStackTrace();
        }
         return ks;
     }
   
   

     private static String getAlias(KeyStore keyStore)
     {
         String alias = null;
         Enumeration nombres;
           try {
               nombres = keyStore.aliases();
                 
               while(nombres.hasMoreElements())
               {
                   String tmpAlias = (String)nombres.nextElement();
                   if(keyStore.isKeyEntry(tmpAlias))
                   alias=tmpAlias;
               }
           }
           catch (KeyStoreException e) {
               e.printStackTrace();
           }
           return alias;
     }






   

 public static void saveDocumenteDisk(Document document,String pathXml)
     {
         try {
                 DOMSource source = new DOMSource(document);
                 StreamResult result = new StreamResult(new File(pathXml));

                 TransformerFactory transformerFactory = TransformerFactory.newInstance();
                 Transformer transformer;
                 transformer = transformerFactory.newTransformer();
                 transformer.transform(source, result);
         } catch (TransformerConfigurationException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
         } catch (TransformerException e) {
                 // TODO Auto-generated catch block
                 e.printStackTrace();
         }
     }
}


////Esta es la clase que extiende de Generic.
public class XAdESBESSignature extends GenericXMLSignature{


   
        private static String nameFile;
        private static String pathFile;
        /**
        *
        * Recurso a firmar
        *

        */
        private String fileToSign;
         
        /**
        *
        * Fichero donde se desea guardar la firma
        *

        */
        public XAdESBESSignature(String fileToSign) {
            super();
            this.fileToSign = fileToSign;
        }

        /**
           *
           * Punto de entrada al programa
           *

           *
           * @param args
           *            Argumentos del programa
           */
     

        public static void firmar(String xmlPath,String pathSignature,String passSignature,String pathOut,String nameFileOut)
        {           
              //Document document=UtilApplication.convertStringToDocument(xml);

              //String pathXml=UtilApplication.getTempPath()+"\\"+UUID.randomUUID().toString()+".xml";

              //UtilApplication.saveDocumenteDisk(document, pathXml);

           
           
              XAdESBESSignature signature = new XAdESBESSignature(xmlPath);
              signature.setPassSignature(passSignature);
              signature.setPathSignature(pathSignature);
              pathFile=pathOut;
              nameFile=nameFileOut;
             
              signature.execute();
          }
         
         
          @Override
          protected DataToSign createDataToSign() {
             
              DataToSign datosAFirmar = new DataToSign();

              datosAFirmar.setXadesFormat(es.mityc.javasign.EnumFormatoFirma.XAdES_BES);
              
              datosAFirmar.setEsquema(XAdESSchemas.XAdES_132);
              datosAFirmar.setXMLEncoding("UTF-8");
              datosAFirmar.setEnveloped(true);
              datosAFirmar.addObject(new ObjectToSign(new InternObjectToSign("comprobante"), "contenido comprobante", null, "text/xml", null));
              datosAFirmar.setParentSignNode("comprobante");

              Document docToSign = getDocument(fileToSign);
              datosAFirmar.setDocument(docToSign);

              return datosAFirmar;
          }
     

        @Override
        protected String getSignatureFileName() {
            return XAdESBESSignature.nameFile;
        }
       
        @Override
        protected String getPathOut() {
            return XAdESBESSignature.pathFile;
        }
   
}

//Como usar dicha clase

XAdESBESSignature.firmar(String xmlPath,String pathFirma,String clavefirma,String directoriosalida, String nombreArchivoSalida);

//Hasta aqui la firma.

Los jars de referencias y necesarios son:
bcmail-jdk16-1.45.jar
bcprov-jdk16-1.45.jar
bctsp-jdk16-1.45.jar
commons-codec-1.8.jar
commons-httpclient-3.0.1.jar
commons-lang-2.4.jar
commons-logging-1.1.3.jar
DNIeJCAProvider-1.4.jar
iaikPkcs11Wrapper-1.1.7.jar
jss-4.2.5.jar
MITyCLibAPI-1.1.7.jar
MITyCLibCert-1.1.7.jar
MITyCLibOCSP-1.1.7.jar
MITyCLibTrust-1.1.7.jar
MITyCLibTSA-1.1.7.jar
MITyCLibXADES-1.1.7.jar
serializer-2.7.1.jar
sunpkcs11-1.0.jar
xalan-2.7.1.jar
xml-apis-1.3.04.jar
xmlsec-1.4.2-ADSI-1.1.jar
xmlsec-1.5.5.jar


///Para c# al momento lo que he logrado es esto por cuestiones de tiempo no he logrado terminar si alguien tiene terminao hagamelo saber.

public class Signature
    {

        Random rnd = new Random(DateTime.Now.
Millisecond);

        public const string XmlDsigRSASHA1Url = "http://www.w3.org/2000/09/xmldsig#rsa-sha1";

        public void Xml(String pathXml,String pathSignature,String passFirma)
        {
            //Declaro variable XMLDocument
            XmlDocument xmlDoc = new XmlDocument();
            // Cargo el documento en el xmlDoc
            xmlDoc.PreserveWhitespace = true;
            xmlDoc.Load(pathXml);

            //Obtengo la firma en el Certificado X509
            X509Certificate2 uidCert = new X509Certificate2(pathSignature, passFirma, X509KeyStorageFlags.DefaultKeySet);

            //Inicializo el RSA
            RSACryptoServiceProvider rsaKey = (RSACryptoServiceProvider)uidCert.PrivateKey;

            //Agrego el SgnedXml que permite firmar el xml
            SignedXml signedXml = new SignedXml(xmlDoc);

            // Add the key to the SignedXml document.
            signedXml.SigningKey = rsaKey;

            //signedXml.Signature.Id = newID("Signature");
           

            //Agregamos el metodo de firmado
            signedXml.SignedInfo.SignatureMethod = XmlDsigRSASHA1Url;

            //signedXml.SignedInfo.Id = newID("Signature-SignedInfo");

            // Create a reference to be signed.
            Reference reference = new Reference();
            //reference.Id = newID("SignedPropertiesID");
            reference.Uri = "";

            // Add an enveloped transformation to the reference.
            XmlDsigEnvelopedSignatureTransform env = new XmlDsigEnvelopedSignatureTransform();
            reference.AddTransform(env);

            // Add the reference to the SignedXml object.
            signedXml.AddReference(reference);


            // Add an RSAKeyValue KeyInfo (optional; helps recipient find key to validate).
            KeyInfo keyInfo = new KeyInfo();

            KeyInfoX509Data clause = new KeyInfoX509Data();
            clause.AddSubjectName(uidCert.Subject);
            clause.AddCertificate(uidCert);
            keyInfo.AddClause(clause);

            //keyInfo.Id = newID("Certificate1");

            signedXml.KeyInfo = keyInfo;

            // Compute the signature.
            signedXml.ComputeSignature();


            Boolean respuesta = signedXml.CheckSignature();
            System.Console.WriteLine(respuesta);

            // Get the XML representation of the signature and save
            // it to an XmlElement object.
            XmlElement xmlDigitalSignature = signedXml.GetXml();


            //XmlElement signature = signedXml.GetXml();
            foreach (XmlNode node in xmlDigitalSignature.SelectNodes(
                "descendant-or-self::*[namespace-uri()='http://www.w3.org/2000/09/xmldsig#']"))
            {
                node.Prefix = "ds";
            }


            System.Console.WriteLine(signedXml.GetXml().InnerXml);
            // Append the element to the XML document.
            xmlDoc.DocumentElement.AppendChild(xmlDoc.ImportNode(xmlDigitalSignature, true));

            xmlDoc.Save(@"D:\Xml\firmado.xml");

        }


        private String newID(String prefix)
        {
            String newID = prefix + rnd.Next(1048576);
            newID = prefix + rnd.Next(1048576);
            return newID;
        }
    }


A mis amigos de los diferentes lenguajes que no sean java les recomiendo tratar de consumir los webservices del por medio de soap.  Existe un software llamado SOAPUI. que permite o muestra como se consume en webservice. http://sourceforge.net/projects/soapui/files/

En .net he tenido problemas si se agrega como referencia no se porque no llena los objetos de retorno cuando se consume.

Es mi experiencia si alguie lo tiene no dude en compartir.


Disculpas no puedo subir proyectos por la sutacion comercial que puedan dar al mismo mi intencion es dar directrices que lo puedan lograr.

Por favor si algo no funciona sean mas especificos. error exacto.

Mas información (Comercial): http://www.corvustec.com/index.php?option=com_content&view=article&id=58&Itemid=87

Consumir WebService SRI Ecuador

Saludos poco a poco iré actualizando esta entrada.


Los web services a consumir son los siguintes:


https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantes?wsdl

https://celcer.sri.gob.ec/comprobantes-electronicos-
ws/AutorizacionComprobantes?wsdl

Para consumir desde java hay que usar el jar cliente-ws,jar la misma que esta disponible cuando se instala el cliente de los comprobantes electronicos del SRI.

Y usar las Clases RecepcionComprontesService AutorizacionComprobantesService


Los objetos con las respuestas son RespuestaSolicitud RespuestaComprobante.

No olvidar que si enviamos varias veces el comprobante en la autoirzacion obtendremos varias respuesta.


Para .net si solo se agrega como referencia no funciona.

Por lo pronto no he podido probar por cuestiones de tiempo con soap.

Al parecer HttpWebRequest permite consumir por medio de soap al webservice.

Recomomiendo ver la herramienta soapui si van por ese camino.

Mil disculpas no he podido probar para .net prometo darme un tiempo para eso.

La firma para .net no he logrado poner todos los tags necesarios. como uri y algunas cosas mas.

Talvez alguien logro transformar los jar en dll.

Si alguien quiere compartir algo adicional haganmelo saber.

Les dejo este enlace.

http://geekswithblogs.net/marcel/archive/2007/03/26/109886.aspx

Se debe hacer lo que dice en el punto 3.

Tengo problemas con mi soapui.

Alguien puede poner en los comentarios la peticion que genera el soapui. Del webservice del sr.


Mas información (Comercial): http://www.corvustec.com/index.php?option=com_content&view=article&id=58&Itemid=87

sábado, noviembre 24, 2012

No se puede abrir el archivo físico "*.mdf". Error del sistema operativo 5: "5(Acceso denegado.)". (Microsoft SQL Server, Error: 5120)

Saludos.

En caso de que esten adjuntando la base de datos fisica (Attach).

El error es por que MS Server no puede acceder al archivo.

Solucion:

Establecer permisos de MS Server (o "Todos" por que no se cual es) al archivo o carpeta donde esta el archivo de la base de datos fisica.


Cualquier duda o comentario por ese medio.

Hasta la proxima.


martes, noviembre 13, 2012

Objetivo inalcanzable, 'objeto' devolvió nulo: javax.el.PropertyNotFoundException

Saludos.

Este error es algo común en aplicaciones JSF.

La verdad es que a veces por cosas de la vida no caemos en cuenta o se nos pasa por alto ciertas cosas que ya hemos hecho varias veces.

Las recomendaciones que les puedo dejar son las siguientes:

1. Verificar que el bean al que estamos llamando en la pagina jsf (.xhtml) sea serializable. (public class Clase implements serializable).

2. Que el objeto al que estemos llamando tenga getters y setters. Ej.

value="#{indexPage.person.nombre}"

El objeto person debe tener getter y setter en el bean. Y el objeto nombre debe tener getter y setter en la clase Person.

3. Si estamos usando un objeto en el bean como person. Debemos verificar que este este inicializado, en el constructor. A veces no nos damos cuenta por que carga la pagina pero no se puede guardar o hacer alguna operacion crud. Ej.

public class Clase implements serializable
{

   ///Esta linea depende de su necesidad
   private static final long serialVersionUID = 1L;
 
   private Person person;

   public Clase (){
          person=new Person();
   }

    public Person getPerson()
   {
          return this.person;
    }
    public void setPerson(Person person)
   {
          this.person= person;
   }
}

Espero que sea de su ayuda y si alguien tiene algún caso atípico de este error pues seria de mucha ayuda comentando.


Hasta la próxima.


www.corvustec.com

viernes, noviembre 09, 2012

Google Chrome se queda en pantalla completa (Linux)

No se por que pero el modo pantalla completa de chrome tiene a veces problemas.

Personalmente uso firefox y de vez en cuando chorme. No se porque se presiono la teclita F11 y no hubo como restaurar a modo normal el chrome.

Asi que sin mas opcion hice lo siguiente.

1. Abrir terminal y entrar como root ( su - )
2. Entre al usuario del problema ( cd /home/(usuario) )
3. Ingrese a .config ( cd .config ) o la ruta completa ( cd /home/(usuario).config )
4. Ejecute el comando rm -Rf google-chrome dentro de la ruta antes mencionada
5. Reinicie. ( Me pueden hablar o criticar pero no se como reiniciar dicho servicio ).

Espero que haya servido de algo.

Dudas o comentarios escribir en la zona correspondiente.


Hasta la proxima.

jueves, octubre 25, 2012

Linux no inicia despues de instalar

Saludos.

Hay una explicacion para lo que esta pasando es por que en las maquinas ya sean pc o servidores viene por defecto activado el UEFI que es un nuevo sistema de firmware en el BIOS. Dicha opcion permite soporte discos duros de mas de 2TB entre otras cosas. Si quieren mayot profundidad les dejo un enlace de wikipedia que puede ayudar como punto de partida.

http://es.wikipedia.org/wiki/Extensible_Firmware_Interface

Para solucionar eso se debe entrar al BIOS y desactivar el UEFI o poner disabled dicha opcion que puede estar en las opciones de arranque 

En caso de ser algun servidor como ibm, solaris, etc. Revisar en las especificaciones tecnicas del bios de la marca.

En caso de los Pc en la mayoria esta en la opcion de arranque o boot del bios.

Puede ser que alguien diga y si quiero instalar con UEFI. pues hay que revisar la informacion de la version de linux que queremos instalar o buscar
instalar con UEFI.

No pongo informacion especifica por que creo que les puede ayudar como punto de partida para buscar mas informacion en las diferentes distribuciones y computadores.


No duden en escribir si tienen dudas o comentarios


sábado, agosto 11, 2012

Como configurar Datasource JBoss 7

En JBoss 7 la configuracion del Datasource es algo diferente a las versiones anteriores.

En este ejemplo lo haremos con postgres pero es analogo a mysql

1.  Nos ubicamos en la carpeta del servidor en este caso jboss-as-7.1.1.Final.
     Luego entramos en module y encontraremos carpetas de raiz com, org, etc.
     Para el caso de postgresql entraremos en org y creamos una carpeta postgresql dentro de esta creamos otra que se llama main.

Para PostgreSQL debe quedarnos asi:
 jboss-as-7.1.1.Final/modules/org/postgresql/main/
Para MySQL asi:
 jboss-as-7.1.1.Final/modules/com/mysql/main/

2. Descargamos el conector respectivo y lo pegamos en la carpeta main que creamos anteriormente.

Para postgres la version a la fecha es: postgresql-9.1-902.jdbc4.jar.

Para MySQL: descargamos el comprimido mysql-connector-java-5.1.21.zip lo descomprimimos y copiamos el archivo mysql-connector-java-5.1.21-bin.jar en la carpeta main.

3. En la misma ruta creamos el archivo module.xml

Pegamos el siguiente contenido para PostgreSQL

<module xmlns="urn:jboss:module:1.0" name="org.postgresql">
    <resources>
        <resource-root path="postgresql-9.1-902.jdbc4.jar"/>
    </resources>
    <dependencies>
        <module name="javax.api"/>
        <module name="javax.transaction.api"/>
    </dependencies>
</module>


Para MySQL:

<module xmlns=”urn:jboss:module:1.1″ name=”com.mysql“><resources>
<resource-root path=”mysql-connector-java-5.1.19-bin.jar”/>
</resources>
<dependencies>
<module name=”javax.api”/>
<module name=”javax.transaction.api”/>
<module name=”javax.servlet.api” optional=”true”/>
</dependencies>
</module>

4. Dentro del archivo standalone.xml o domain.xml en cualquiera de los dos, Agregar las siguientes lineas.

a)

Para PostgreSQL:

<driver name="org.postgresql" module="org.postgresql">
  <xa-datasource-class>org.postgresql.xa.PGXADataSource
</xa-datasource-class>
</driver>


Debemos buscar el tag drivers y degamos el codigo anterior encontrarmos un codigo de ejemplo en dicho archivo dice driver name="h2" podemos buscar este ejemplo y poner nuestro codigo anterior.

Para MySQL es:


<driver name=”mysql” module=”com.mysql“>
 <xa-datasource-class>com.mysql.jdbc.Driver
</xa-datasource-class>
</driver>

b)

Ahora pondremos el codigo para datasourse que este es el que haremos referencia por medio del contexto de la aplicacion. En otras palabras al que llamaremos cuando necesitamos conectarnos.

Esto debemos pegar dentro del tag datasources esta en plural no lo olviden. Al final pondre como queda el codigo entro del archivo standalone.xml

Para PostgreSQL:

<datasource jndi-name="java:jboss/datasources/ejemploDS" pool-name="ejemploDS" 
   enabled="true" jta="true" use-java-context="true" use-ccm="true">
 <connection-url>jdbc:postgresql://localhost:5432/base
 </connection-url>
   <driver>org.postgresql</driver>
     <security>
    <user-name>postgres</user-name>
    <password>pass</password>
     </security>
</datasource>

Para MySQL:

<datasource jndi-name=”java:jboss/datasources/myds” pool-name=”myds” enabled=”true” 
use-java-context=”true”>
<connection-url>jdbc:mysql://localhost:3306/mydb</connection-url>
<driver>mysql</driver>
<security>
<user-name>root</user-name>
<password>mypassword</password>
</security>
</datasource>

Al final el tag datasources debe quedar asi:

<!-- tag datasources -->
<datasources>

  <!-- datasource de ejemplo -->
  <datasource jndi-name="java:jboss/datasources/ExampleDS" 
        pool-name="ExampleDS" enabled="true" 
        use-java-context="true">
    <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1
    </connection-url>
    <driver>h2</driver>
    <security>
      <user-name>sa</user-name>
      <password>sa</password>
    </security>
  </datasource>

  <!-- tag drivers -->
  <drivers>

    <!--ejemplo de driver -->
    <driver name="h2" module="com.h2database.h2">
      <xa-datasource-class>org.h2.jdbcx.JdbcDataSource
      </xa-datasource-class>
    </driver>

    <!--nuestro codigo de driver -->
    <driver name="org.postgresql" module="org.postgresql">
      <xa-datasource-class>org.postgresql.xa.PGXADataSource
      </xa-datasource-class>
    </driver>

  </drivers>
  <!-- fin tag drivers -->

  <!-- nuestro tag datasource -->
  <datasource jndi-name="java:jboss/datasources/ejemploDS" 
     pool-name="ejemploDS" enabled="true" 
     jta="true" use-java-context="true" 
     use-ccm="true">
    <connection-url>jdbc:postgresql://localhost:5432/base
    </connection-url>
    <driver>org.postgresql</driver>
      <security>
        <user-name>postgres</user-name>
        <password></password>
      </security>
   </datasource>

</datasources>
<!-- fin tag datasources -->

Ya hemos configurado el datasource para nuestra conexion.

Para llamar del persistence.xml

<provider>org.hibernate.ejb.HibernatePersistence</provider>
<jta-data-source>java:jboss/datasources/ejemploDS</jta-data-source>

Ese es todo. dejen sus comentarios o inquietudes.


Fuentes:

http://www.mastertheboss.com/jboss-datasource/how-to-configure-a-datasource-with-jboss-7

http://vkslabs.com/adding-mysql-data-store-to-jboss-7-x/

http://kousikraj.wordpress.com/2011/11/25/datasource-configuration-setup-for-jboss-as-7-with-example-of-postgresql/



Hasta la proxima

www.corvustec.com/