Bienvenido a Java Mexico

Java México es una comunidad de desarrolladores mexicanos en el lenguaje Java.

Este sitio es colaborativo, automáticamente al registrarte obtienes un Blog para compartir tus conocimientos o información acerca del lenguaje. Antes de publicar en tu blog o los foros por favor lee los lineamientos de publicación.

Para dudas y problemas con respecto al lenguaje Java puedes visitar los Foros de Discusión.

¿Eres nuevo? ¿Cómo hacer que tus preguntas tengan mas posibilidades de ser respondidas?

Es normal que un usuario al tener un problema con algún programa quiera obtener ayuda de la comunidad y se disponga a escribir en algunos de los foros. Pero, ¿Que pasa cuando al crear el tema este queda como si hubiera sido escrito por un niño de 5 años?
Aquí daré unos tips sobre como hacer que tu pregunta tenga mas chance de ser respondida, mas rápido y con mas ganas de ayudarte por parte de la comunidad.
El mismo propósito de este tema puede parecer innecesario y/o inservible, por varias razones. Pero hay un motivo que me impulsa a hacerlo: me he dado cuenta de que la mayoría de las personas no saben como redactar una pregunta.

Curiosidades programando Java

Hoy les voy a mostrar algunas curiosidades que se pueden hacer con código Java que puede que algunas sirvan y algunas pues solo para divertirse:

1.- Crear en línea una colección mediante una clase anónima y un bloque inicializador de instancia en lugar de hacerlo con Arrays.asList:

public static void main(String[] args) {
       
        List<Integer> lista = Arrays.asList(7,9,1);
        lista.add(3);
        System.out.println(lista);
}

El inconveniente de usar Arrays.asList es que debido a que la lista se genera desde la raiz de un arreglo, estos por naturaleza tienen un tamaño definido y no puede redimensionarse por lo tanto la lista generada no soporta la operación add o alguna otra que intente modificar el tamaño y devuelve UnsupportedOperationException.

public static void main(String[] args) {
       
        List<Integer> lista = new ArrayList() {{ add(7); add(9); add(1)}};
        lista.add(3);
        System.out.println(lista);
        System.out.println(lista.getClass());
}

La Fundación Eclipse será el nuevo hogar de la plataforma Java EE


Hace algunas semanas Oracle anunció la iniciativa de buscar un nuevo hogar para la plataforma Java EE. En busca de que la evolución de la misma sea más ágil, flexible y abierta.

El día de hoy se dio a conocer que después de platicar con varias organizaciones, la
a Fundación Eclipse resultó seleccionada para albergar el proyecto y plataforma Java EE.

El repositorio de código de Java EE ahora está en Github: https://github.com/javaee

Aquí el anuncio oficial de Oracle: https://blogs.oracle.com/theaquarium/opening-up-ee-update

**Update**

Anuncio oficial de Red Hat: http://middlewareblog.redhat.com/2017/09/12/java-ee-moves-to-eclipse/

Concurrencia Web Service REST ibatis Spring

Buen día a todos les comento mi problema. Tengo un proyecto web donde se hacen peticiones a los web service entre tantas de la peticiones hay una en particular que me esta dando muchos problemas y es el siguiente: Tengo una query que busca el máximo id de una columna + 1, en el método donde hago varias cosas al final mando a llamar esa query y justo después hago un insert a la base de datos con ese id que me devuelve la primer query. el problema es que hay ocasiones donde parece que se hace una peticion al mismo tiempo hora y segundo y en le asigna el (id + 1) a dos usuarios totalmente distintos cuando yo esperaria que sea el cosecutivo, eh utlizado varias notaciones en el método como este: @Transactional(rollbackFor = ServiceException.class, propagation = Propagation.NESTED, isolation = Isolation.READ_UNCOMMITTED) pero aun así el problema persiste.

Agradecería sus comentarios.

Gracias!!

Spring MVC ... primer ejemplo (Rest)

Para este ejemplo crearemos una base de datos (yo uso postgresql) llamada proyecto, agregaremos una tabla usuario con los siguientes campos: id, nombre, password, logeado y area.

CREATE TABLE public.usuario
(
    id INTEGER NOT NULL,
    nombre CHARACTER VARYING NOT NULL,
    password CHARACTER VARYING  NOT NULL,
    logeado BOOLEAN,
    area CHARACTER VARYING,
    CONSTRAINT usuario_pkey PRIMARY KEY (id)
);

Ahora agregaremos unos datos:

INSERT INTO public.usuario(
        id, nombre, password, logeado, area)
        VALUES (1, 'Antony Yung', '00T$@l12', TRUE, 'sistemas'),(2, 'Adrian Uribe', '3EvBb00', FALSE, 'administracion'),
    (3,'Ernestina Pedroza','@22GgHQll',TRUE,'recursos humanos');

Una vez creado la base de datos y su correspondiente tabla nos enfocaremos a crear el ejemplo con Spring MVC.

¿Qués es lo que ncesitaremos?

  1. Archivo: build.gradle , para configurar las dependencias necesarias

Error al guardar Backups MySQL en Java

Buen día,
Tengo un formulario en Java que tiene dos botones: Seleccionar y Guardar. Estos ejecutan un código para seleccionar el destino y guardar el archivo.sql, respectivamente. La cosa es que el archivo.sql solo lo guarda en Escritorio y en Documentos y en el disco C, en otros destinos como carpetas que yo tengo en escritorio o carpetas que tengo en mi partición D, no lo guarda; no me da error el código, voy a mirar la carpeta donde guardé y no está el archivo. ¿ A qué se deberá esto?
Mi código de Seleccionar es:

JFileChooser jfc = new JFileChooser();
        jfc.setFileSelectionMode(JFileChooser.DIRECTORIES_ONLY);
        int select0 = jfc.showSaveDialog(this);
        if (select0 == JFileChooser.APPROVE_OPTION) {
            String ruta = jfc.getSelectedFile().getPath();
            jTextField1.setText(ruta);
        }

El de Guardar:

String ruta = jTextField1.getText();
        String nombre = "\\RespaldoBD.sql";
        String backus = "";
        if (ruta.trim().length() != 0) {
            try {

Crear sello de CFDI con java

El sello de un CFDI es en realidad la firma electrónica de algunos campos en conjunto(cadena original) del CFDI. La firma digital brinda varios servicios de seguridad:

  • No repudio. La entidad que emite el CFDI no puede rechazar que ella/él lo emitió puesto que en teoría sólo ella/él conoce la llave privada y nadie mas.
  • Autenticación. Al verificar la firma de un CFDI sabemos quién lo emitio ya que se utiliza la correspondiente llave pública del emisor. En Criptografía de llave pública,
    siempre existen un par de llaves, la pública y privada, las cuales sirven para cifrar y descifrar el mensaje.
  • Integridad. Al firmar el CFDI se realiza un subproceso que genera una cadena única, producto del uso de funciones hash. Si se altera el documento posteriormente o al menos los
    campos que se uilizan para generar la cadena original, la cadena única generada debe cambiar completamente y el resultado de la firma será diferente a la original.

Hay dos procesos principales en la generación del sello:

Creación de cadena original CFDI 3.3 con java

Pasos para creación de la cadena original del CFDI 3.3:

1. Tener anotadas las clases con javax, como en el blog.
2. Obtener el archivo cadenaoriginal_3_3.xslt del SAT.
3. Generar la cadena original con el siguiente código:

...
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.util.JAXBSource;
import javax.xml.transform.Result;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
import javax.xml.transform.TransformerFactory;
import javax.xml.transform.stream.StreamResult;
import javax.xml.transform.stream.StreamSource;
...

JAXBContext jaxBContext = JAXBContext.newInstance("mx.gob.sat.v33"); //El paquete donde se encuentra la clase Comprobante
StreamSource ss = new StreamSource(getClass().getResourceAsStream("/xslt33/cadenaoriginal_3_3.xslt")); //La ruta donde se encuentra el archivo xslt

Generar clases java del CFDI versión 3.3 con comando xjc

Hola,

Les dejo los pasos para la generación de las clases java del CFDI 3.3:

1. Obtener el archivo cfdv33.xsd (http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv33.xsd)
2. Crear un directorio donde se crearan las clases java (ejemplo: testing)
3. Ejecutar el comando (Se encuentra en la distribución de java, a partir de la versión 6):
xjc -d ./testing/ cfdv33.xsd
4. Los warnings son debido a que esos catálogos son demasiado grandes. Sin embargo, se han generado la mayoría de las clases.
No he podido generar estos enums con esta herramienta (xjc) ya que son demasiado grandes y me sale un OutOfMemoryError. Si desean generar estos enum hice un script en python, espero les sirva.

Spring Framework ... Spring MVC

¿Qué es Spring Framework?

Es un marco de trabajo que se apoya en algunos estándares Java EE para el desarrollo de aplicaciones y contenedor de inversión de control. Nos permite, entre otras cosas, crear aplicaciones web, servicios REST, persistencia de bases de datos relacionales y no relacionales, etc. En este post hablaremos de Spring MVC, el cual es un marco de trabajo que nos permite crear aplicaciones web con la arquitectura MVC.

Arquitectura Modelo-Vista-Controlador (Model-View-Control)

Esta arquitectura se compone de tres principales conceptos:

  • A. Modelo: Objetos Java.
  • B. Vista: Plantilla que genera la HTML.
  • C. Controlador: Controlador que atiende las peticiones HTTP que llegan al servidor desde el navegador; si resuelve la petición, devuelve una respuesta, en este caso la página HTML.

Supongamos que un cliente quiere saber el estado actual de sus movimientos bancarios.

  1. El cliente hace una solicitud al servidor.
Distribuir contenido